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