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 : // IMPORTENT: If any property data ( name / type / ... ) are changed, then
80 : // Content::getPropertyValues(...) must be adapted too!
81 : //
82 : //=========================================================================
83 :
84 : // virtual
85 0 : uno::Sequence< beans::Property > Content::getProperties(
86 : const uno::Reference< ucb::XCommandEnvironment > & /*xEnv*/ )
87 : {
88 0 : osl::Guard< osl::Mutex > aGuard( m_aMutex );
89 :
90 0 : if ( isFolder() )
91 : {
92 0 : 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 : rtl::OUString(
107 : RTL_CONSTASCII_USTRINGPARAM( "ContentType" ) ),
108 : -1,
109 0 : getCppuType( static_cast< const rtl::OUString * >( 0 ) ),
110 : beans::PropertyAttribute::BOUND
111 : | beans::PropertyAttribute::READONLY
112 : ),
113 : beans::Property(
114 : rtl::OUString(
115 : RTL_CONSTASCII_USTRINGPARAM( "IsDocument" ) ),
116 : -1,
117 0 : getCppuBooleanType(),
118 : beans::PropertyAttribute::BOUND
119 : | beans::PropertyAttribute::READONLY
120 : ),
121 : beans::Property(
122 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "IsFolder" ) ),
123 : -1,
124 0 : getCppuBooleanType(),
125 : beans::PropertyAttribute::BOUND
126 : | beans::PropertyAttribute::READONLY
127 : ),
128 : beans::Property(
129 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Title" ) ),
130 : -1,
131 0 : getCppuType( static_cast< const rtl::OUString * >( 0 ) ),
132 : beans::PropertyAttribute::BOUND
133 : | beans::PropertyAttribute::READONLY
134 : ),
135 : ///////////////////////////////////////////////////////////////
136 : // Optional standard properties
137 : ///////////////////////////////////////////////////////////////
138 : beans::Property(
139 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "MediaType" ) ),
140 : -1,
141 0 : getCppuType( static_cast< const rtl::OUString * >( 0 ) ),
142 : beans::PropertyAttribute::BOUND
143 : ),
144 : beans::Property(
145 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
146 : "CreatableContentsInfo" ) ),
147 : -1,
148 : getCppuType( static_cast<
149 0 : const uno::Sequence< ucb::ContentInfo > * >( 0 ) ),
150 : beans::PropertyAttribute::BOUND
151 : | beans::PropertyAttribute::READONLY
152 : ),
153 : ///////////////////////////////////////////////////////////////
154 : // New properties
155 : ///////////////////////////////////////////////////////////////
156 : beans::Property(
157 : rtl::OUString(
158 : RTL_CONSTASCII_USTRINGPARAM( "HasEncryptedEntries" ) ),
159 : -1,
160 0 : getCppuBooleanType(),
161 : beans::PropertyAttribute::BOUND
162 : | beans::PropertyAttribute::READONLY
163 : )
164 0 : };
165 0 : return MAKEPROPSEQUENCE( aRootFolderPropertyInfoTable );
166 : }
167 : else
168 : {
169 : //=================================================================
170 : //
171 : // Folder: Supported properties
172 : //
173 : //=================================================================
174 :
175 : static const beans::Property aFolderPropertyInfoTable[] =
176 : {
177 : ///////////////////////////////////////////////////////////////
178 : // Required properties
179 : ///////////////////////////////////////////////////////////////
180 : beans::Property(
181 : rtl::OUString(
182 : RTL_CONSTASCII_USTRINGPARAM( "ContentType" ) ),
183 : -1,
184 0 : getCppuType( static_cast< const rtl::OUString * >( 0 ) ),
185 : beans::PropertyAttribute::BOUND
186 : | beans::PropertyAttribute::READONLY
187 : ),
188 : beans::Property(
189 : rtl::OUString(
190 : RTL_CONSTASCII_USTRINGPARAM( "IsDocument" ) ),
191 : -1,
192 0 : getCppuBooleanType(),
193 : beans::PropertyAttribute::BOUND
194 : | beans::PropertyAttribute::READONLY
195 : ),
196 : beans::Property(
197 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "IsFolder" ) ),
198 : -1,
199 0 : getCppuBooleanType(),
200 : beans::PropertyAttribute::BOUND
201 : | beans::PropertyAttribute::READONLY
202 : ),
203 : beans::Property(
204 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Title" ) ),
205 : -1,
206 0 : getCppuType( static_cast< const rtl::OUString * >( 0 ) ),
207 : beans::PropertyAttribute::BOUND
208 : ),
209 : ///////////////////////////////////////////////////////////////
210 : // Optional standard properties
211 : ///////////////////////////////////////////////////////////////
212 : beans::Property(
213 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "MediaType" ) ),
214 : -1,
215 0 : getCppuType( static_cast< const rtl::OUString * >( 0 ) ),
216 : beans::PropertyAttribute::BOUND
217 : ),
218 : beans::Property(
219 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
220 : "CreatableContentsInfo" ) ),
221 : -1,
222 : getCppuType( static_cast<
223 0 : const uno::Sequence< ucb::ContentInfo > * >( 0 ) ),
224 : beans::PropertyAttribute::BOUND
225 : | beans::PropertyAttribute::READONLY
226 : )
227 : ///////////////////////////////////////////////////////////////
228 : // New properties
229 : ///////////////////////////////////////////////////////////////
230 0 : };
231 0 : return MAKEPROPSEQUENCE( aFolderPropertyInfoTable );
232 : }
233 : }
234 : else
235 : {
236 : //=================================================================
237 : //
238 : // Stream: Supported properties
239 : //
240 : //=================================================================
241 :
242 : static const beans::Property aStreamPropertyInfoTable[] =
243 : {
244 : ///////////////////////////////////////////////////////////////
245 : // Required properties
246 : ///////////////////////////////////////////////////////////////
247 : beans::Property(
248 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ContentType" ) ),
249 : -1,
250 0 : getCppuType( static_cast< const rtl::OUString * >( 0 ) ),
251 : beans::PropertyAttribute::BOUND
252 : | beans::PropertyAttribute::READONLY
253 : ),
254 : beans::Property(
255 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "IsDocument" ) ),
256 : -1,
257 0 : getCppuBooleanType(),
258 : beans::PropertyAttribute::BOUND
259 : | beans::PropertyAttribute::READONLY
260 : ),
261 : beans::Property(
262 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "IsFolder" ) ),
263 : -1,
264 0 : getCppuBooleanType(),
265 : beans::PropertyAttribute::BOUND
266 : | beans::PropertyAttribute::READONLY
267 : ),
268 : beans::Property(
269 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Title" ) ),
270 : -1,
271 0 : getCppuType( static_cast< const rtl::OUString * >( 0 ) ),
272 : beans::PropertyAttribute::BOUND
273 : ),
274 : ///////////////////////////////////////////////////////////////
275 : // Optional standard properties
276 : ///////////////////////////////////////////////////////////////
277 : beans::Property(
278 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "MediaType" ) ),
279 : -1,
280 0 : getCppuType( static_cast< const rtl::OUString * >( 0 ) ),
281 : beans::PropertyAttribute::BOUND
282 : ),
283 : beans::Property(
284 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Size" ) ),
285 : -1,
286 0 : getCppuType( static_cast< const sal_Int64 * >( 0 ) ),
287 : beans::PropertyAttribute::BOUND
288 : | beans::PropertyAttribute::READONLY
289 : ),
290 : beans::Property(
291 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
292 : "CreatableContentsInfo" ) ),
293 : -1,
294 : getCppuType( static_cast<
295 0 : const uno::Sequence< ucb::ContentInfo > * >( 0 ) ),
296 : beans::PropertyAttribute::BOUND
297 : | beans::PropertyAttribute::READONLY
298 : ),
299 : ///////////////////////////////////////////////////////////////
300 : // New properties
301 : ///////////////////////////////////////////////////////////////
302 : beans::Property(
303 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Compressed" ) ),
304 : -1,
305 0 : getCppuBooleanType(),
306 : beans::PropertyAttribute::BOUND
307 : ),
308 : beans::Property(
309 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Encrypted" ) ),
310 : -1,
311 0 : getCppuBooleanType(),
312 : beans::PropertyAttribute::BOUND
313 : )
314 0 : };
315 0 : return MAKEPROPSEQUENCE( aStreamPropertyInfoTable );
316 0 : }
317 : }
318 :
319 : //=========================================================================
320 : // virtual
321 0 : uno::Sequence< ucb::CommandInfo > Content::getCommands(
322 : const uno::Reference< ucb::XCommandEnvironment > & /*xEnv*/ )
323 : {
324 0 : osl::Guard< osl::Mutex > aGuard( m_aMutex );
325 :
326 0 : if ( isFolder() )
327 : {
328 0 : if ( m_aUri.isRootFolder() )
329 : {
330 : //=================================================================
331 : //
332 : // Root Folder: Supported commands
333 : //
334 : //=================================================================
335 :
336 : static const ucb::CommandInfo aRootFolderCommandInfoTable[] =
337 : {
338 : ///////////////////////////////////////////////////////////
339 : // Required commands
340 : ///////////////////////////////////////////////////////////
341 : ucb::CommandInfo(
342 : rtl::OUString(
343 : RTL_CONSTASCII_USTRINGPARAM( "getCommandInfo" ) ),
344 : -1,
345 0 : getCppuVoidType()
346 : ),
347 : ucb::CommandInfo(
348 : rtl::OUString(
349 : RTL_CONSTASCII_USTRINGPARAM( "getPropertySetInfo" ) ),
350 : -1,
351 0 : getCppuVoidType()
352 : ),
353 : ucb::CommandInfo(
354 : rtl::OUString(
355 : RTL_CONSTASCII_USTRINGPARAM( "getPropertyValues" ) ),
356 : -1,
357 : getCppuType(
358 : static_cast<
359 0 : uno::Sequence< beans::Property > * >( 0 ) )
360 : ),
361 : ucb::CommandInfo(
362 : rtl::OUString(
363 : RTL_CONSTASCII_USTRINGPARAM( "setPropertyValues" ) ),
364 : -1,
365 : getCppuType(
366 : static_cast<
367 0 : uno::Sequence< beans::PropertyValue > * >( 0 ) )
368 : ),
369 : ///////////////////////////////////////////////////////////
370 : // Optional standard commands
371 : ///////////////////////////////////////////////////////////
372 : ucb::CommandInfo(
373 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "open" ) ),
374 : -1,
375 : getCppuType(
376 0 : static_cast< ucb::OpenCommandArgument2 * >( 0 ) )
377 : ),
378 : ucb::CommandInfo(
379 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "transfer" ) ),
380 : -1,
381 : getCppuType(
382 0 : static_cast< ucb::TransferInfo * >( 0 ) )
383 : ),
384 : ucb::CommandInfo(
385 : rtl::OUString(
386 : RTL_CONSTASCII_USTRINGPARAM( "createNewContent" ) ),
387 : -1,
388 0 : getCppuType( static_cast< ucb::ContentInfo * >( 0 ) )
389 : ),
390 : ///////////////////////////////////////////////////////////
391 : // New commands
392 : ///////////////////////////////////////////////////////////
393 : ucb::CommandInfo(
394 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "flush" ) ),
395 : -1,
396 0 : getCppuVoidType()
397 : )
398 0 : };
399 :
400 0 : return MAKECMDSEQUENCE( aRootFolderCommandInfoTable );
401 : }
402 : else
403 : {
404 : //=================================================================
405 : //
406 : // Folder: Supported commands
407 : //
408 : //=================================================================
409 :
410 : static const ucb::CommandInfo aFolderCommandInfoTable[] =
411 : {
412 : ///////////////////////////////////////////////////////////
413 : // Required commands
414 : ///////////////////////////////////////////////////////////
415 : ucb::CommandInfo(
416 : rtl::OUString(
417 : RTL_CONSTASCII_USTRINGPARAM( "getCommandInfo" ) ),
418 : -1,
419 0 : getCppuVoidType()
420 : ),
421 : ucb::CommandInfo(
422 : rtl::OUString(
423 : RTL_CONSTASCII_USTRINGPARAM( "getPropertySetInfo" ) ),
424 : -1,
425 0 : getCppuVoidType()
426 : ),
427 : ucb::CommandInfo(
428 : rtl::OUString(
429 : RTL_CONSTASCII_USTRINGPARAM( "getPropertyValues" ) ),
430 : -1,
431 : getCppuType(
432 : static_cast<
433 0 : uno::Sequence< beans::Property > * >( 0 ) )
434 : ),
435 : ucb::CommandInfo(
436 : rtl::OUString(
437 : RTL_CONSTASCII_USTRINGPARAM( "setPropertyValues" ) ),
438 : -1,
439 : getCppuType(
440 : static_cast<
441 0 : uno::Sequence< beans::PropertyValue > * >( 0 ) )
442 : ),
443 : ///////////////////////////////////////////////////////////
444 : // Optional standard commands
445 : ///////////////////////////////////////////////////////////
446 : ucb::CommandInfo(
447 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "delete" ) ),
448 : -1,
449 0 : getCppuBooleanType()
450 : ),
451 : ucb::CommandInfo(
452 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "insert" ) ),
453 : -1,
454 0 : getCppuVoidType()
455 : ),
456 : ucb::CommandInfo(
457 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "open" ) ),
458 : -1,
459 : getCppuType(
460 0 : static_cast< ucb::OpenCommandArgument2 * >( 0 ) )
461 : ),
462 : ucb::CommandInfo(
463 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "transfer" ) ),
464 : -1,
465 : getCppuType(
466 0 : static_cast< ucb::TransferInfo * >( 0 ) )
467 : ),
468 : ucb::CommandInfo(
469 : rtl::OUString(
470 : RTL_CONSTASCII_USTRINGPARAM( "createNewContent" ) ),
471 : -1,
472 0 : getCppuType( static_cast< ucb::ContentInfo * >( 0 ) )
473 : ),
474 : ///////////////////////////////////////////////////////////
475 : // New commands
476 : ///////////////////////////////////////////////////////////
477 : ucb::CommandInfo(
478 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "flush" ) ),
479 : -1,
480 0 : getCppuVoidType()
481 : )
482 0 : };
483 :
484 0 : return MAKECMDSEQUENCE( aFolderCommandInfoTable );
485 : }
486 : }
487 : else
488 : {
489 : //=================================================================
490 : //
491 : // Stream: Supported commands
492 : //
493 : //=================================================================
494 :
495 : static const ucb::CommandInfo aStreamCommandInfoTable[] =
496 : {
497 : ///////////////////////////////////////////////////////////////
498 : // Required commands
499 : ///////////////////////////////////////////////////////////////
500 : ucb::CommandInfo(
501 : rtl::OUString(
502 : RTL_CONSTASCII_USTRINGPARAM( "getCommandInfo" ) ),
503 : -1,
504 0 : getCppuVoidType()
505 : ),
506 : ucb::CommandInfo(
507 : rtl::OUString(
508 : RTL_CONSTASCII_USTRINGPARAM( "getPropertySetInfo" ) ),
509 : -1,
510 0 : getCppuVoidType()
511 : ),
512 : ucb::CommandInfo(
513 : rtl::OUString(
514 : RTL_CONSTASCII_USTRINGPARAM( "getPropertyValues" ) ),
515 : -1,
516 : getCppuType(
517 0 : static_cast< uno::Sequence< beans::Property > * >( 0 ) )
518 : ),
519 : ucb::CommandInfo(
520 : rtl::OUString(
521 : RTL_CONSTASCII_USTRINGPARAM( "setPropertyValues" ) ),
522 : -1,
523 : getCppuType(
524 : static_cast<
525 0 : uno::Sequence< beans::PropertyValue > * >( 0 ) )
526 : ),
527 : ///////////////////////////////////////////////////////////////
528 : // Optional standard commands
529 : ///////////////////////////////////////////////////////////////
530 : ucb::CommandInfo(
531 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "delete" ) ),
532 : -1,
533 0 : getCppuBooleanType()
534 : ),
535 : ucb::CommandInfo(
536 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "insert" ) ),
537 : -1,
538 0 : getCppuVoidType()
539 : ),
540 : ucb::CommandInfo(
541 : rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "open" ) ),
542 : -1,
543 : getCppuType(
544 0 : static_cast< ucb::OpenCommandArgument2 * >( 0 ) )
545 : )
546 : ///////////////////////////////////////////////////////////////
547 : // New commands
548 : ///////////////////////////////////////////////////////////////
549 0 : };
550 :
551 0 : return MAKECMDSEQUENCE( aStreamCommandInfoTable );
552 0 : }
553 : }
554 :
555 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|