Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 :
21 : /**************************************************************************
22 : TODO
23 : **************************************************************************
24 :
25 : Props/Commands:
26 :
27 : rootfolder folder stream
28 : ---------------------------------------------
29 : ContentType r r r
30 : IsDocument r r r
31 : IsFolder r r r
32 : MediaType (w) (w) w
33 : Title r w w
34 : Size - - r
35 : CreatableContentsInfo r r r
36 : Compressed - - w
37 : Encrypted - - w
38 : HasEncryptedEntries r - -
39 :
40 : getCommandInfo x x x
41 : getPropertySetInfo x x x
42 : getPropertyValues x x x
43 : setPropertyValues x x x
44 : insert - x x
45 : delete - x x
46 : open x x x
47 : transfer x x -
48 : flush x x -
49 : createNewContent x x -
50 :
51 : *************************************************************************/
52 : #include <com/sun/star/beans/Property.hpp>
53 : #include <com/sun/star/beans/PropertyAttribute.hpp>
54 : #include <com/sun/star/beans/PropertyValue.hpp>
55 : #include <com/sun/star/ucb/CommandInfo.hpp>
56 : #include <com/sun/star/ucb/OpenCommandArgument2.hpp>
57 : #include <com/sun/star/ucb/TransferInfo.hpp>
58 : #include <com/sun/star/uno/Sequence.hxx>
59 : #include <sal/macros.h>
60 : #include "pkgcontent.hxx"
61 :
62 : using namespace com::sun::star;
63 : using namespace package_ucp;
64 :
65 :
66 :
67 : // Content implementation.
68 :
69 :
70 :
71 : #define MAKEPROPSEQUENCE( a ) \
72 : uno::Sequence< beans::Property >( a, sizeof( a ) / sizeof( a[ 0 ] ) )
73 :
74 : #define MAKECMDSEQUENCE( a ) \
75 : uno::Sequence< ucb::CommandInfo >( a, sizeof( a ) / sizeof( a[ 0 ] ) )
76 :
77 :
78 :
79 : // IMPORTANT: If any property data ( name / type / ... ) are changed, then
80 : // Content::getPropertyValues(...) must be adapted too!
81 :
82 :
83 :
84 : // virtual
85 10 : uno::Sequence< beans::Property > Content::getProperties(
86 : const uno::Reference< ucb::XCommandEnvironment > & /*xEnv*/ )
87 : {
88 10 : osl::Guard< osl::Mutex > aGuard( m_aMutex );
89 :
90 10 : if ( isFolder() )
91 : {
92 4 : if ( m_aUri.isRootFolder() )
93 : {
94 :
95 :
96 : // Root Folder: Supported properties
97 :
98 :
99 :
100 : static const beans::Property aRootFolderPropertyInfoTable[] =
101 : {
102 :
103 : // Required properties
104 :
105 : beans::Property(
106 : OUString( "ContentType" ),
107 : -1,
108 1 : cppu::UnoType<OUString>::get(),
109 : beans::PropertyAttribute::BOUND
110 : | beans::PropertyAttribute::READONLY
111 : ),
112 : beans::Property(
113 : OUString( "IsDocument" ),
114 : -1,
115 1 : cppu::UnoType<bool>::get(),
116 : beans::PropertyAttribute::BOUND
117 : | beans::PropertyAttribute::READONLY
118 : ),
119 : beans::Property(
120 : OUString( "IsFolder" ),
121 : -1,
122 1 : cppu::UnoType<bool>::get(),
123 : beans::PropertyAttribute::BOUND
124 : | beans::PropertyAttribute::READONLY
125 : ),
126 : beans::Property(
127 : OUString( "Title" ),
128 : -1,
129 1 : cppu::UnoType<OUString>::get(),
130 : beans::PropertyAttribute::BOUND
131 : | beans::PropertyAttribute::READONLY
132 : ),
133 :
134 : // Optional standard properties
135 :
136 : beans::Property(
137 : OUString( "MediaType" ),
138 : -1,
139 1 : cppu::UnoType<OUString>::get(),
140 : beans::PropertyAttribute::BOUND
141 : ),
142 : beans::Property(
143 : OUString(
144 : "CreatableContentsInfo" ),
145 : -1,
146 1 : cppu::UnoType<uno::Sequence< ucb::ContentInfo >>::get(),
147 : beans::PropertyAttribute::BOUND
148 : | beans::PropertyAttribute::READONLY
149 : ),
150 :
151 : // New properties
152 :
153 : beans::Property(
154 : OUString( "HasEncryptedEntries" ),
155 : -1,
156 1 : cppu::UnoType<bool>::get(),
157 : beans::PropertyAttribute::BOUND
158 : | beans::PropertyAttribute::READONLY
159 : )
160 10 : };
161 2 : return MAKEPROPSEQUENCE( aRootFolderPropertyInfoTable );
162 : }
163 : else
164 : {
165 :
166 :
167 : // Folder: Supported properties
168 :
169 :
170 :
171 : static const beans::Property aFolderPropertyInfoTable[] =
172 : {
173 :
174 : // Required properties
175 :
176 : beans::Property(
177 : OUString( "ContentType" ),
178 : -1,
179 1 : cppu::UnoType<OUString>::get(),
180 : beans::PropertyAttribute::BOUND
181 : | beans::PropertyAttribute::READONLY
182 : ),
183 : beans::Property(
184 : OUString( "IsDocument" ),
185 : -1,
186 1 : cppu::UnoType<bool>::get(),
187 : beans::PropertyAttribute::BOUND
188 : | beans::PropertyAttribute::READONLY
189 : ),
190 : beans::Property(
191 : OUString( "IsFolder" ),
192 : -1,
193 1 : cppu::UnoType<bool>::get(),
194 : beans::PropertyAttribute::BOUND
195 : | beans::PropertyAttribute::READONLY
196 : ),
197 : beans::Property(
198 : OUString( "Title" ),
199 : -1,
200 1 : cppu::UnoType<OUString>::get(),
201 : beans::PropertyAttribute::BOUND
202 : ),
203 :
204 : // Optional standard properties
205 :
206 : beans::Property(
207 : OUString( "MediaType" ),
208 : -1,
209 1 : cppu::UnoType<OUString>::get(),
210 : beans::PropertyAttribute::BOUND
211 : ),
212 : beans::Property(
213 : OUString(
214 : "CreatableContentsInfo" ),
215 : -1,
216 1 : cppu::UnoType<uno::Sequence< ucb::ContentInfo >>::get(),
217 : beans::PropertyAttribute::BOUND
218 : | beans::PropertyAttribute::READONLY
219 : )
220 :
221 : // New properties
222 :
223 9 : };
224 2 : return MAKEPROPSEQUENCE( aFolderPropertyInfoTable );
225 : }
226 : }
227 : else
228 : {
229 :
230 :
231 : // Stream: Supported properties
232 :
233 :
234 :
235 : static const beans::Property aStreamPropertyInfoTable[] =
236 : {
237 :
238 : // Required properties
239 :
240 : beans::Property(
241 : OUString( "ContentType" ),
242 : -1,
243 1 : cppu::UnoType<OUString>::get(),
244 : beans::PropertyAttribute::BOUND
245 : | beans::PropertyAttribute::READONLY
246 : ),
247 : beans::Property(
248 : OUString( "IsDocument" ),
249 : -1,
250 1 : cppu::UnoType<bool>::get(),
251 : beans::PropertyAttribute::BOUND
252 : | beans::PropertyAttribute::READONLY
253 : ),
254 : beans::Property(
255 : OUString( "IsFolder" ),
256 : -1,
257 1 : cppu::UnoType<bool>::get(),
258 : beans::PropertyAttribute::BOUND
259 : | beans::PropertyAttribute::READONLY
260 : ),
261 : beans::Property(
262 : OUString( "Title" ),
263 : -1,
264 1 : cppu::UnoType<OUString>::get(),
265 : beans::PropertyAttribute::BOUND
266 : ),
267 :
268 : // Optional standard properties
269 :
270 : beans::Property(
271 : OUString( "MediaType" ),
272 : -1,
273 1 : cppu::UnoType<OUString>::get(),
274 : beans::PropertyAttribute::BOUND
275 : ),
276 : beans::Property(
277 : OUString( "Size" ),
278 : -1,
279 1 : cppu::UnoType<sal_Int64>::get(),
280 : beans::PropertyAttribute::BOUND
281 : | beans::PropertyAttribute::READONLY
282 : ),
283 : beans::Property(
284 : OUString(
285 : "CreatableContentsInfo" ),
286 : -1,
287 1 : cppu::UnoType<uno::Sequence< ucb::ContentInfo >>::get(),
288 : beans::PropertyAttribute::BOUND
289 : | beans::PropertyAttribute::READONLY
290 : ),
291 :
292 : // New properties
293 :
294 : beans::Property(
295 : OUString( "Compressed" ),
296 : -1,
297 1 : cppu::UnoType<bool>::get(),
298 : beans::PropertyAttribute::BOUND
299 : ),
300 : beans::Property(
301 : OUString( "Encrypted" ),
302 : -1,
303 1 : cppu::UnoType<bool>::get(),
304 : beans::PropertyAttribute::BOUND
305 : )
306 16 : };
307 6 : return MAKEPROPSEQUENCE( aStreamPropertyInfoTable );
308 10 : }
309 : }
310 :
311 :
312 : // virtual
313 0 : uno::Sequence< ucb::CommandInfo > Content::getCommands(
314 : const uno::Reference< ucb::XCommandEnvironment > & /*xEnv*/ )
315 : {
316 0 : osl::Guard< osl::Mutex > aGuard( m_aMutex );
317 :
318 0 : if ( isFolder() )
319 : {
320 0 : if ( m_aUri.isRootFolder() )
321 : {
322 :
323 :
324 : // Root Folder: Supported commands
325 :
326 :
327 :
328 : static const ucb::CommandInfo aRootFolderCommandInfoTable[] =
329 : {
330 :
331 : // Required commands
332 :
333 : ucb::CommandInfo(
334 : OUString( "getCommandInfo" ),
335 : -1,
336 0 : cppu::UnoType<void>::get()
337 : ),
338 : ucb::CommandInfo(
339 : OUString( "getPropertySetInfo" ),
340 : -1,
341 0 : cppu::UnoType<void>::get()
342 : ),
343 : ucb::CommandInfo(
344 : OUString( "getPropertyValues" ),
345 : -1,
346 0 : cppu::UnoType<uno::Sequence< beans::Property >>::get()
347 : ),
348 : ucb::CommandInfo(
349 : OUString( "setPropertyValues" ),
350 : -1,
351 0 : cppu::UnoType<uno::Sequence< beans::PropertyValue >>::get()
352 : ),
353 :
354 : // Optional standard commands
355 :
356 : ucb::CommandInfo(
357 : OUString( "open" ),
358 : -1,
359 0 : cppu::UnoType<ucb::OpenCommandArgument2>::get()
360 : ),
361 : ucb::CommandInfo(
362 : OUString( "transfer" ),
363 : -1,
364 0 : cppu::UnoType<ucb::TransferInfo>::get()
365 : ),
366 : ucb::CommandInfo(
367 : OUString( "createNewContent" ),
368 : -1,
369 0 : cppu::UnoType<ucb::ContentInfo>::get()
370 : ),
371 :
372 : // New commands
373 :
374 : ucb::CommandInfo(
375 : OUString( "flush" ),
376 : -1,
377 0 : cppu::UnoType<void>::get()
378 : )
379 0 : };
380 :
381 0 : return MAKECMDSEQUENCE( aRootFolderCommandInfoTable );
382 : }
383 : else
384 : {
385 :
386 :
387 : // Folder: Supported commands
388 :
389 :
390 :
391 : static const ucb::CommandInfo aFolderCommandInfoTable[] =
392 : {
393 :
394 : // Required commands
395 :
396 : ucb::CommandInfo(
397 : OUString( "getCommandInfo" ),
398 : -1,
399 0 : cppu::UnoType<void>::get()
400 : ),
401 : ucb::CommandInfo(
402 : OUString( "getPropertySetInfo" ),
403 : -1,
404 0 : cppu::UnoType<void>::get()
405 : ),
406 : ucb::CommandInfo(
407 : OUString( "getPropertyValues" ),
408 : -1,
409 0 : cppu::UnoType<uno::Sequence< beans::Property >>::get()
410 : ),
411 : ucb::CommandInfo(
412 : OUString( "setPropertyValues" ),
413 : -1,
414 0 : cppu::UnoType<uno::Sequence< beans::PropertyValue >>::get()
415 : ),
416 :
417 : // Optional standard commands
418 :
419 : ucb::CommandInfo(
420 : OUString( "delete" ),
421 : -1,
422 0 : cppu::UnoType<bool>::get()
423 : ),
424 : ucb::CommandInfo(
425 : OUString( "insert" ),
426 : -1,
427 0 : cppu::UnoType<void>::get()
428 : ),
429 : ucb::CommandInfo(
430 : OUString( "open" ),
431 : -1,
432 0 : cppu::UnoType<ucb::OpenCommandArgument2>::get()
433 : ),
434 : ucb::CommandInfo(
435 : OUString( "transfer" ),
436 : -1,
437 0 : cppu::UnoType<ucb::TransferInfo>::get()
438 : ),
439 : ucb::CommandInfo(
440 : OUString( "createNewContent" ),
441 : -1,
442 0 : cppu::UnoType<ucb::ContentInfo>::get()
443 : ),
444 :
445 : // New commands
446 :
447 : ucb::CommandInfo(
448 : OUString( "flush" ),
449 : -1,
450 0 : cppu::UnoType<void>::get()
451 : )
452 0 : };
453 :
454 0 : return MAKECMDSEQUENCE( aFolderCommandInfoTable );
455 : }
456 : }
457 : else
458 : {
459 :
460 :
461 : // Stream: Supported commands
462 :
463 :
464 :
465 : static const ucb::CommandInfo aStreamCommandInfoTable[] =
466 : {
467 :
468 : // Required commands
469 :
470 : ucb::CommandInfo(
471 : OUString( "getCommandInfo" ),
472 : -1,
473 0 : cppu::UnoType<void>::get()
474 : ),
475 : ucb::CommandInfo(
476 : OUString( "getPropertySetInfo" ),
477 : -1,
478 0 : cppu::UnoType<void>::get()
479 : ),
480 : ucb::CommandInfo(
481 : OUString( "getPropertyValues" ),
482 : -1,
483 0 : cppu::UnoType<uno::Sequence< beans::Property >>::get()
484 : ),
485 : ucb::CommandInfo(
486 : OUString( "setPropertyValues" ),
487 : -1,
488 0 : cppu::UnoType<uno::Sequence< beans::PropertyValue >>::get()
489 : ),
490 :
491 : // Optional standard commands
492 :
493 : ucb::CommandInfo(
494 : OUString( "delete" ),
495 : -1,
496 0 : cppu::UnoType<bool>::get()
497 : ),
498 : ucb::CommandInfo(
499 : OUString( "insert" ),
500 : -1,
501 0 : cppu::UnoType<void>::get()
502 : ),
503 : ucb::CommandInfo(
504 : OUString( "open" ),
505 : -1,
506 0 : cppu::UnoType<ucb::OpenCommandArgument2>::get()
507 : )
508 :
509 : // New commands
510 :
511 0 : };
512 :
513 0 : return MAKECMDSEQUENCE( aStreamCommandInfoTable );
514 0 : }
515 : }
516 :
517 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|