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