xref: /aoo4110/main/ucb/source/ucp/file/shell.hxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski 
25*b1cdbd2cSJim Jagielski #ifndef _SHELL_HXX_
26*b1cdbd2cSJim Jagielski #define _SHELL_HXX_
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski #include <cppuhelper/weak.hxx>
30*b1cdbd2cSJim Jagielski #include <cppuhelper/interfacecontainer.hxx>
31*b1cdbd2cSJim Jagielski #include <cppuhelper/typeprovider.hxx>
32*b1cdbd2cSJim Jagielski #include <vector>
33*b1cdbd2cSJim Jagielski #include <hash_map>
34*b1cdbd2cSJim Jagielski #include <hash_set>
35*b1cdbd2cSJim Jagielski #include <list>
36*b1cdbd2cSJim Jagielski #include <osl/file.hxx>
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski #include "osl/mutex.hxx"
39*b1cdbd2cSJim Jagielski #include <rtl/ustring.hxx>
40*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/Sequence.hxx>
41*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyChangeEvent.hpp>
42*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/XCommandInfo.hpp>
43*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/Property.hpp>
44*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyValue.hpp>
45*b1cdbd2cSJim Jagielski #include <com/sun/star/io/XStream.hpp>
46*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertyChangeListener.hpp>
47*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/XCommandProcessor.hpp>
48*b1cdbd2cSJim Jagielski #include <com/sun/star/io/XOutputStream.hpp>
49*b1cdbd2cSJim Jagielski #include <com/sun/star/io/XInputStream.hpp>
50*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySetInfo.hpp>
51*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertiesChangeNotifier.hpp>
52*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/NumberedSortingInfo.hpp>
53*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/XRow.hpp>
54*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XMultiServiceFactory.hpp>
55*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/XContentProvider.hpp>
56*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/XDynamicResultSet.hpp>
57*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertyContainer.hpp>
58*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertyAccess.hpp>
59*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/XPropertySetRegistryFactory.hpp>
60*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/TransferInfo.hpp>
61*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/ContentInfo.hpp>
62*b1cdbd2cSJim Jagielski #include "filtask.hxx"
63*b1cdbd2cSJim Jagielski #include "filnot.hxx"
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski namespace fileaccess {
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski     class FileProvider;
68*b1cdbd2cSJim Jagielski     class XPropertySetInfo_impl;
69*b1cdbd2cSJim Jagielski     class XCommandInfo_impl;
70*b1cdbd2cSJim Jagielski     class XResultSet_impl;
71*b1cdbd2cSJim Jagielski     class BaseContent;
72*b1cdbd2cSJim Jagielski     class shell;
73*b1cdbd2cSJim Jagielski 
74*b1cdbd2cSJim Jagielski     class shell
75*b1cdbd2cSJim Jagielski         : public virtual TaskManager
76*b1cdbd2cSJim Jagielski     {
77*b1cdbd2cSJim Jagielski         friend class XPropertySetInfo_impl;
78*b1cdbd2cSJim Jagielski         friend class XResultSet_impl;
79*b1cdbd2cSJim Jagielski         friend class XCommandInfo_impl;
80*b1cdbd2cSJim Jagielski     public:
81*b1cdbd2cSJim Jagielski         // Type definitions
82*b1cdbd2cSJim Jagielski 
83*b1cdbd2cSJim Jagielski         typedef rtl::OUString UniquePath;
84*b1cdbd2cSJim Jagielski         typedef equalOUString eUniquePath;
85*b1cdbd2cSJim Jagielski         typedef hashOUString hUniquePath;
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski         class MyProperty
88*b1cdbd2cSJim Jagielski         {
89*b1cdbd2cSJim Jagielski         private:
90*b1cdbd2cSJim Jagielski             rtl::OUString                          PropertyName;
91*b1cdbd2cSJim Jagielski             sal_Int32                              Handle;
92*b1cdbd2cSJim Jagielski             sal_Bool                               isNative;
93*b1cdbd2cSJim Jagielski             com::sun::star::uno::Type              Typ;        // Duplicates information in Value
94*b1cdbd2cSJim Jagielski             com::sun::star::uno::Any               Value;
95*b1cdbd2cSJim Jagielski             com::sun::star::beans::PropertyState   State;
96*b1cdbd2cSJim Jagielski             sal_Int16                              Attributes;
97*b1cdbd2cSJim Jagielski         public:
98*b1cdbd2cSJim Jagielski             MyProperty();
99*b1cdbd2cSJim Jagielski             MyProperty( const rtl::OUString&                         __PropertyName );
100*b1cdbd2cSJim Jagielski             MyProperty( const sal_Bool&                              __isNative,
101*b1cdbd2cSJim Jagielski                         const rtl::OUString&                         __PropertyName,
102*b1cdbd2cSJim Jagielski                         const sal_Int32&                             __Handle,
103*b1cdbd2cSJim Jagielski                         const com::sun::star::uno::Type&             __Typ,
104*b1cdbd2cSJim Jagielski                         const com::sun::star::uno::Any&              __Value,
105*b1cdbd2cSJim Jagielski                         const com::sun::star::beans::PropertyState&  __State,
106*b1cdbd2cSJim Jagielski                         const sal_Int16&                             __Attributes );
107*b1cdbd2cSJim Jagielski 
108*b1cdbd2cSJim Jagielski             ~MyProperty();
109*b1cdbd2cSJim Jagielski             inline const sal_Bool& SAL_CALL IsNative() const;
getPropertyName() const110*b1cdbd2cSJim Jagielski             inline const rtl::OUString& SAL_CALL getPropertyName() const { return PropertyName; }
111*b1cdbd2cSJim Jagielski             inline const sal_Int32& SAL_CALL getHandle() const;
112*b1cdbd2cSJim Jagielski             inline const com::sun::star::uno::Type& SAL_CALL getType() const;
113*b1cdbd2cSJim Jagielski             inline const com::sun::star::uno::Any& SAL_CALL getValue() const;
114*b1cdbd2cSJim Jagielski             inline const com::sun::star::beans::PropertyState& SAL_CALL getState() const;
115*b1cdbd2cSJim Jagielski             inline const sal_Int16& SAL_CALL getAttributes() const;
116*b1cdbd2cSJim Jagielski 
117*b1cdbd2cSJim Jagielski             // The set* functions are declared const, because the key of "this" stays intact
118*b1cdbd2cSJim Jagielski             inline void SAL_CALL setHandle( const sal_Int32&  __Handle ) const;
119*b1cdbd2cSJim Jagielski             inline void SAL_CALL setType( const com::sun::star::uno::Type& __Type ) const;
120*b1cdbd2cSJim Jagielski             inline void SAL_CALL setValue( const com::sun::star::uno::Any& __Value ) const;
121*b1cdbd2cSJim Jagielski             inline void SAL_CALL setState( const com::sun::star::beans::PropertyState& __State ) const;
122*b1cdbd2cSJim Jagielski             inline void SAL_CALL setAttributes( const sal_Int16& __Attributes ) const;
123*b1cdbd2cSJim Jagielski         };
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski         struct eMyProperty
126*b1cdbd2cSJim Jagielski         {
operator ()fileaccess::shell::eMyProperty127*b1cdbd2cSJim Jagielski             bool operator()( const MyProperty& rKey1, const MyProperty& rKey2 ) const
128*b1cdbd2cSJim Jagielski             {
129*b1cdbd2cSJim Jagielski                 return !!(  rKey1.getPropertyName() == rKey2.getPropertyName() );
130*b1cdbd2cSJim Jagielski             }
131*b1cdbd2cSJim Jagielski         };
132*b1cdbd2cSJim Jagielski 
133*b1cdbd2cSJim Jagielski         struct hMyProperty
134*b1cdbd2cSJim Jagielski         {
operator ()fileaccess::shell::hMyProperty135*b1cdbd2cSJim Jagielski             size_t operator()( const MyProperty& rName ) const
136*b1cdbd2cSJim Jagielski             {
137*b1cdbd2cSJim Jagielski                 return rName.getPropertyName().hashCode();
138*b1cdbd2cSJim Jagielski             }
139*b1cdbd2cSJim Jagielski         };
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski         typedef std::hash_set< MyProperty,hMyProperty,eMyProperty > PropertySet;
142*b1cdbd2cSJim Jagielski         typedef std::list< Notifier* >                              NotifierList;
143*b1cdbd2cSJim Jagielski 
144*b1cdbd2cSJim Jagielski 
145*b1cdbd2cSJim Jagielski         class UnqPathData
146*b1cdbd2cSJim Jagielski         {
147*b1cdbd2cSJim Jagielski         public:
148*b1cdbd2cSJim Jagielski             UnqPathData();
149*b1cdbd2cSJim Jagielski             ~UnqPathData();
150*b1cdbd2cSJim Jagielski             UnqPathData( const UnqPathData& );
151*b1cdbd2cSJim Jagielski             UnqPathData& operator=( UnqPathData& );
152*b1cdbd2cSJim Jagielski 
153*b1cdbd2cSJim Jagielski             PropertySet*               properties;
154*b1cdbd2cSJim Jagielski             NotifierList*              notifier;
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski             // Three views on the PersistentPropertySet
157*b1cdbd2cSJim Jagielski             com::sun::star::uno::Reference< com::sun::star::ucb::XPersistentPropertySet >   xS;
158*b1cdbd2cSJim Jagielski             com::sun::star::uno::Reference< com::sun::star::beans::XPropertyContainer >     xC;
159*b1cdbd2cSJim Jagielski             com::sun::star::uno::Reference< com::sun::star::beans::XPropertyAccess >        xA;
160*b1cdbd2cSJim Jagielski         };
161*b1cdbd2cSJim Jagielski 
162*b1cdbd2cSJim Jagielski         typedef std::hash_map< UniquePath,UnqPathData,hUniquePath,eUniquePath > ContentMap;
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski     public:
165*b1cdbd2cSJim Jagielski 
166*b1cdbd2cSJim Jagielski         // MethodenDefinitionen
167*b1cdbd2cSJim Jagielski         shell( const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& xMultiServiceFactory,
168*b1cdbd2cSJim Jagielski                FileProvider* pProvider,sal_Bool bWithConfig );
169*b1cdbd2cSJim Jagielski 
170*b1cdbd2cSJim Jagielski         virtual ~shell();
171*b1cdbd2cSJim Jagielski 
172*b1cdbd2cSJim Jagielski 
173*b1cdbd2cSJim Jagielski 
174*b1cdbd2cSJim Jagielski         /**
175*b1cdbd2cSJim Jagielski          *  This two methods register and deregister a change listener for the content belonging
176*b1cdbd2cSJim Jagielski          *  to URL aUnqPath
177*b1cdbd2cSJim Jagielski          */
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski         void SAL_CALL registerNotifier( const rtl::OUString& aUnqPath,Notifier* pNotifier );
180*b1cdbd2cSJim Jagielski 
181*b1cdbd2cSJim Jagielski         void SAL_CALL deregisterNotifier( const rtl::OUString& aUnqPath,Notifier* pNotifier );
182*b1cdbd2cSJim Jagielski 
183*b1cdbd2cSJim Jagielski 
184*b1cdbd2cSJim Jagielski 
185*b1cdbd2cSJim Jagielski         /**
186*b1cdbd2cSJim Jagielski          *  Used to associate and deassociate a new property with
187*b1cdbd2cSJim Jagielski          *  the content belonging to URL UnqPath.
188*b1cdbd2cSJim Jagielski          *  The default value and the the attributes are input
189*b1cdbd2cSJim Jagielski          */
190*b1cdbd2cSJim Jagielski 
191*b1cdbd2cSJim Jagielski         void SAL_CALL associate( const rtl::OUString& UnqPath,
192*b1cdbd2cSJim Jagielski                                  const rtl::OUString& PropertyName,
193*b1cdbd2cSJim Jagielski                                  const com::sun::star::uno::Any& DefaultValue,
194*b1cdbd2cSJim Jagielski                                  const sal_Int16 Attributes )
195*b1cdbd2cSJim Jagielski             throw( com::sun::star::beans::PropertyExistException,
196*b1cdbd2cSJim Jagielski                    com::sun::star::beans::IllegalTypeException,
197*b1cdbd2cSJim Jagielski                    com::sun::star::uno::RuntimeException);
198*b1cdbd2cSJim Jagielski 
199*b1cdbd2cSJim Jagielski 
200*b1cdbd2cSJim Jagielski         void SAL_CALL deassociate( const rtl::OUString& UnqPath,
201*b1cdbd2cSJim Jagielski                                    const rtl::OUString& PropertyName )
202*b1cdbd2cSJim Jagielski             throw( com::sun::star::beans::UnknownPropertyException,
203*b1cdbd2cSJim Jagielski                    com::sun::star::beans::NotRemoveableException,
204*b1cdbd2cSJim Jagielski                    com::sun::star::uno::RuntimeException);
205*b1cdbd2cSJim Jagielski 
206*b1cdbd2cSJim Jagielski 
207*b1cdbd2cSJim Jagielski 
208*b1cdbd2cSJim Jagielski         //
209*b1cdbd2cSJim Jagielski         //  Every method having a command id is not allowed to throw anything,
210*b1cdbd2cSJim Jagielski         //  but instead must install every error code in the task handler
211*b1cdbd2cSJim Jagielski         //
212*b1cdbd2cSJim Jagielski 
213*b1cdbd2cSJim Jagielski 
214*b1cdbd2cSJim Jagielski         /**
215*b1cdbd2cSJim Jagielski          *  Given an xOutputStream, this method writes the content of the file belonging to
216*b1cdbd2cSJim Jagielski          *  URL aUnqPath into the XOutputStream
217*b1cdbd2cSJim Jagielski          */
218*b1cdbd2cSJim Jagielski 
219*b1cdbd2cSJim Jagielski         void SAL_CALL page( sal_Int32 CommandId,
220*b1cdbd2cSJim Jagielski                             const rtl::OUString& aUnqPath,
221*b1cdbd2cSJim Jagielski                             const com::sun::star::uno::Reference< com::sun::star::io::XOutputStream >& xOutputStream )
222*b1cdbd2cSJim Jagielski             throw();
223*b1cdbd2cSJim Jagielski 
224*b1cdbd2cSJim Jagielski 
225*b1cdbd2cSJim Jagielski         /**
226*b1cdbd2cSJim Jagielski          *  Given a file URL aUnqPath, this methods returns a XInputStream which reads from the open file.
227*b1cdbd2cSJim Jagielski          */
228*b1cdbd2cSJim Jagielski 
229*b1cdbd2cSJim Jagielski         com::sun::star::uno::Reference< com::sun::star::io::XInputStream > SAL_CALL
230*b1cdbd2cSJim Jagielski         open( sal_Int32 CommandId,
231*b1cdbd2cSJim Jagielski               const rtl::OUString& aUnqPath,
232*b1cdbd2cSJim Jagielski               sal_Bool bLock )
233*b1cdbd2cSJim Jagielski             throw();
234*b1cdbd2cSJim Jagielski 
235*b1cdbd2cSJim Jagielski 
236*b1cdbd2cSJim Jagielski         /**
237*b1cdbd2cSJim Jagielski          *  Given a file URL aUnqPath, this methods returns a XStream which can be used
238*b1cdbd2cSJim Jagielski          *  to read and write from/to the file.
239*b1cdbd2cSJim Jagielski          */
240*b1cdbd2cSJim Jagielski 
241*b1cdbd2cSJim Jagielski         com::sun::star::uno::Reference< com::sun::star::io::XStream > SAL_CALL
242*b1cdbd2cSJim Jagielski         open_rw( sal_Int32 CommandId,
243*b1cdbd2cSJim Jagielski                  const rtl::OUString& aUnqPath,
244*b1cdbd2cSJim Jagielski                  sal_Bool bLock )
245*b1cdbd2cSJim Jagielski             throw();
246*b1cdbd2cSJim Jagielski 
247*b1cdbd2cSJim Jagielski 
248*b1cdbd2cSJim Jagielski         /**
249*b1cdbd2cSJim Jagielski          *  This method returns the result set containing the the children of the directory belonging
250*b1cdbd2cSJim Jagielski          *  to file URL aUnqPath
251*b1cdbd2cSJim Jagielski          */
252*b1cdbd2cSJim Jagielski 
253*b1cdbd2cSJim Jagielski         com::sun::star::uno::Reference< com::sun::star::ucb::XDynamicResultSet > SAL_CALL
254*b1cdbd2cSJim Jagielski         ls( sal_Int32 CommandId,
255*b1cdbd2cSJim Jagielski             const rtl::OUString& aUnqPath,
256*b1cdbd2cSJim Jagielski             const sal_Int32 OpenMode,
257*b1cdbd2cSJim Jagielski             const com::sun::star::uno::Sequence< com::sun::star::beans::Property >& sProperty,
258*b1cdbd2cSJim Jagielski             const com::sun::star::uno::Sequence< com::sun::star::ucb::NumberedSortingInfo > & sSortingInfo )
259*b1cdbd2cSJim Jagielski             throw();
260*b1cdbd2cSJim Jagielski 
261*b1cdbd2cSJim Jagielski 
262*b1cdbd2cSJim Jagielski         /**
263*b1cdbd2cSJim Jagielski          *  Info methods
264*b1cdbd2cSJim Jagielski          */
265*b1cdbd2cSJim Jagielski 
266*b1cdbd2cSJim Jagielski         // Info for commands
267*b1cdbd2cSJim Jagielski         com::sun::star::uno::Reference< com::sun::star::ucb::XCommandInfo > SAL_CALL
268*b1cdbd2cSJim Jagielski         info_c()
269*b1cdbd2cSJim Jagielski             throw();
270*b1cdbd2cSJim Jagielski 
271*b1cdbd2cSJim Jagielski         // Info for the properties
272*b1cdbd2cSJim Jagielski         com::sun::star::uno::Reference< com::sun::star::beans::XPropertySetInfo > SAL_CALL
273*b1cdbd2cSJim Jagielski         info_p( const rtl::OUString& aUnqPath )
274*b1cdbd2cSJim Jagielski             throw();
275*b1cdbd2cSJim Jagielski 
276*b1cdbd2cSJim Jagielski 
277*b1cdbd2cSJim Jagielski         /**
278*b1cdbd2cSJim Jagielski          *  Sets the values of the properties belonging to fileURL aUnqPath
279*b1cdbd2cSJim Jagielski          */
280*b1cdbd2cSJim Jagielski 
281*b1cdbd2cSJim Jagielski         com::sun::star::uno::Sequence< com::sun::star::uno::Any > SAL_CALL
282*b1cdbd2cSJim Jagielski         setv( const rtl::OUString& aUnqPath,
283*b1cdbd2cSJim Jagielski               const com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >& values )
284*b1cdbd2cSJim Jagielski             throw();
285*b1cdbd2cSJim Jagielski 
286*b1cdbd2cSJim Jagielski 
287*b1cdbd2cSJim Jagielski         /**
288*b1cdbd2cSJim Jagielski          *  Reads the values of the properties belonging to fileURL aUnqPath;
289*b1cdbd2cSJim Jagielski          *  Returns an XRow object containing the values in the requested order.
290*b1cdbd2cSJim Jagielski          */
291*b1cdbd2cSJim Jagielski 
292*b1cdbd2cSJim Jagielski         com::sun::star::uno::Reference< com::sun::star::sdbc::XRow > SAL_CALL
293*b1cdbd2cSJim Jagielski         getv( sal_Int32 CommandId,
294*b1cdbd2cSJim Jagielski               const rtl::OUString& aUnqPath,
295*b1cdbd2cSJim Jagielski               const com::sun::star::uno::Sequence< com::sun::star::beans::Property >& properties )
296*b1cdbd2cSJim Jagielski             throw();
297*b1cdbd2cSJim Jagielski 
298*b1cdbd2cSJim Jagielski 
299*b1cdbd2cSJim Jagielski         /********************************************************************************/
300*b1cdbd2cSJim Jagielski         /*                         transfer-commands                                    */
301*b1cdbd2cSJim Jagielski         /********************************************************************************/
302*b1cdbd2cSJim Jagielski 
303*b1cdbd2cSJim Jagielski         /**
304*b1cdbd2cSJim Jagielski          *  Moves the content belonging to fileURL srcUnqPath to fileURL dstUnqPath( files and directories )
305*b1cdbd2cSJim Jagielski          */
306*b1cdbd2cSJim Jagielski 
307*b1cdbd2cSJim Jagielski         void SAL_CALL
308*b1cdbd2cSJim Jagielski         move( sal_Int32 CommandId,
309*b1cdbd2cSJim Jagielski               const rtl::OUString srcUnqPath,   // Full file(folder)-path
310*b1cdbd2cSJim Jagielski               const rtl::OUString dstUnqPath,   // Path to the destination-directory
311*b1cdbd2cSJim Jagielski               const sal_Int32 NameClash )
312*b1cdbd2cSJim Jagielski             throw();
313*b1cdbd2cSJim Jagielski 
314*b1cdbd2cSJim Jagielski         /**
315*b1cdbd2cSJim Jagielski          *  Copies the content belonging to fileURL srcUnqPath to fileURL dstUnqPath ( files and directories )
316*b1cdbd2cSJim Jagielski          */
317*b1cdbd2cSJim Jagielski 
318*b1cdbd2cSJim Jagielski         void SAL_CALL
319*b1cdbd2cSJim Jagielski         copy( sal_Int32 CommandId,               // See "move"
320*b1cdbd2cSJim Jagielski               const rtl::OUString srcUnqPath,
321*b1cdbd2cSJim Jagielski               const rtl::OUString dstUnqPath,
322*b1cdbd2cSJim Jagielski               sal_Int32 NameClash )
323*b1cdbd2cSJim Jagielski             throw();
324*b1cdbd2cSJim Jagielski 
325*b1cdbd2cSJim Jagielski #define RemoveFolder   1
326*b1cdbd2cSJim Jagielski #define RemoveFile    -1
327*b1cdbd2cSJim Jagielski #define RemoveUnknown  0
328*b1cdbd2cSJim Jagielski 
329*b1cdbd2cSJim Jagielski         /**
330*b1cdbd2cSJim Jagielski          *  Deletes the content belonging to fileURL aUnqPath( recursively in case of directory )
331*b1cdbd2cSJim Jagielski          */
332*b1cdbd2cSJim Jagielski 
333*b1cdbd2cSJim Jagielski         sal_Bool SAL_CALL
334*b1cdbd2cSJim Jagielski         remove( sal_Int32 CommandId,
335*b1cdbd2cSJim Jagielski                 const rtl::OUString& aUnqPath,
336*b1cdbd2cSJim Jagielski                 sal_Int32 TypeToMove = RemoveUnknown,
337*b1cdbd2cSJim Jagielski                 sal_Bool  MustExist  = sal_True )
338*b1cdbd2cSJim Jagielski             throw();
339*b1cdbd2cSJim Jagielski 
340*b1cdbd2cSJim Jagielski #undef RemoveUnknown
341*b1cdbd2cSJim Jagielski #undef RemoveFile
342*b1cdbd2cSJim Jagielski #undef RemoveFolder
343*b1cdbd2cSJim Jagielski 
344*b1cdbd2cSJim Jagielski 
345*b1cdbd2cSJim Jagielski         /********************************************************************************/
346*b1cdbd2cSJim Jagielski         /*                         write and create - commandos                         */
347*b1cdbd2cSJim Jagielski         /********************************************************************************/
348*b1cdbd2cSJim Jagielski 
349*b1cdbd2cSJim Jagielski         /**
350*b1cdbd2cSJim Jagielski          *  Creates new directory with given URL, recursively if necessary
351*b1cdbd2cSJim Jagielski          *  Return:: success of operation
352*b1cdbd2cSJim Jagielski          */
353*b1cdbd2cSJim Jagielski 
354*b1cdbd2cSJim Jagielski         sal_Bool SAL_CALL
355*b1cdbd2cSJim Jagielski         mkdir( sal_Int32 CommandId,
356*b1cdbd2cSJim Jagielski                const rtl::OUString& aDirectoryName,
357*b1cdbd2cSJim Jagielski                sal_Bool OverWrite )
358*b1cdbd2cSJim Jagielski             throw();
359*b1cdbd2cSJim Jagielski 
360*b1cdbd2cSJim Jagielski 
361*b1cdbd2cSJim Jagielski         /**
362*b1cdbd2cSJim Jagielski          *  Creates new file with given URL.
363*b1cdbd2cSJim Jagielski          *  The content of aInputStream becomes the content of the file
364*b1cdbd2cSJim Jagielski          *  Return:: success of operation
365*b1cdbd2cSJim Jagielski          */
366*b1cdbd2cSJim Jagielski 
367*b1cdbd2cSJim Jagielski         sal_Bool SAL_CALL
368*b1cdbd2cSJim Jagielski         mkfil( sal_Int32 CommandId,
369*b1cdbd2cSJim Jagielski                const rtl::OUString& aFileName,
370*b1cdbd2cSJim Jagielski                sal_Bool OverWrite,
371*b1cdbd2cSJim Jagielski                const com::sun::star::uno::Reference< com::sun::star::io::XInputStream >& aInputStream )
372*b1cdbd2cSJim Jagielski             throw();
373*b1cdbd2cSJim Jagielski 
374*b1cdbd2cSJim Jagielski 
375*b1cdbd2cSJim Jagielski         /**
376*b1cdbd2cSJim Jagielski          *  writes to the file with given URL.
377*b1cdbd2cSJim Jagielski          *  The content of aInputStream becomes the content of the file
378*b1cdbd2cSJim Jagielski          *  Return:: success of operation
379*b1cdbd2cSJim Jagielski          */
380*b1cdbd2cSJim Jagielski         sal_Bool SAL_CALL
381*b1cdbd2cSJim Jagielski         write( sal_Int32 CommandId,
382*b1cdbd2cSJim Jagielski                const rtl::OUString& aUnqPath,
383*b1cdbd2cSJim Jagielski                sal_Bool OverWrite,
384*b1cdbd2cSJim Jagielski                const com::sun::star::uno::Reference< com::sun::star::io::XInputStream >& aInputStream )
385*b1cdbd2cSJim Jagielski             throw();
386*b1cdbd2cSJim Jagielski 
387*b1cdbd2cSJim Jagielski 
388*b1cdbd2cSJim Jagielski 
389*b1cdbd2cSJim Jagielski         void SAL_CALL insertDefaultProperties( const rtl::OUString& aUnqPath );
390*b1cdbd2cSJim Jagielski 
391*b1cdbd2cSJim Jagielski         com::sun::star::uno::Sequence< com::sun::star::ucb::ContentInfo >
392*b1cdbd2cSJim Jagielski         queryCreatableContentsInfo();
393*b1cdbd2cSJim Jagielski 
394*b1cdbd2cSJim Jagielski 
395*b1cdbd2cSJim Jagielski         /******************************************************************************/
396*b1cdbd2cSJim Jagielski         /*                                                                            */
397*b1cdbd2cSJim Jagielski         /*                          mapping of file urls                              */
398*b1cdbd2cSJim Jagielski         /*                          to uncpath and vice versa                         */
399*b1cdbd2cSJim Jagielski         /*                                                                            */
400*b1cdbd2cSJim Jagielski         /******************************************************************************/
401*b1cdbd2cSJim Jagielski 
402*b1cdbd2cSJim Jagielski         sal_Bool SAL_CALL getUnqFromUrl( const rtl::OUString& Url, rtl::OUString& Unq );
403*b1cdbd2cSJim Jagielski 
404*b1cdbd2cSJim Jagielski         sal_Bool SAL_CALL getUrlFromUnq( const rtl::OUString& Unq, rtl::OUString& Url );
405*b1cdbd2cSJim Jagielski 
406*b1cdbd2cSJim Jagielski 
407*b1cdbd2cSJim Jagielski         sal_Bool m_bWithConfig;
408*b1cdbd2cSJim Jagielski         FileProvider*                                                                   m_pProvider;
409*b1cdbd2cSJim Jagielski         com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >    m_xMultiServiceFactory;
410*b1cdbd2cSJim Jagielski         com::sun::star::uno::Reference< com::sun::star::ucb::XPropertySetRegistry >     m_xFileRegistry;
411*b1cdbd2cSJim Jagielski 
412*b1cdbd2cSJim Jagielski     private:
413*b1cdbd2cSJim Jagielski 
414*b1cdbd2cSJim Jagielski         /********************************************************************************/
415*b1cdbd2cSJim Jagielski         /*                              get eventListeners                              */
416*b1cdbd2cSJim Jagielski         /********************************************************************************/
417*b1cdbd2cSJim Jagielski 
418*b1cdbd2cSJim Jagielski         std::list< ContentEventNotifier* >* SAL_CALL
419*b1cdbd2cSJim Jagielski         getContentEventListeners( const rtl::OUString& aName );
420*b1cdbd2cSJim Jagielski 
421*b1cdbd2cSJim Jagielski         std::list< ContentEventNotifier* >* SAL_CALL
422*b1cdbd2cSJim Jagielski         getContentDeletedEventListeners( const rtl::OUString& aName );
423*b1cdbd2cSJim Jagielski 
424*b1cdbd2cSJim Jagielski         std::vector< std::list< ContentEventNotifier* >* >* SAL_CALL
425*b1cdbd2cSJim Jagielski         getContentExchangedEventListeners( const rtl::OUString aOldPrefix,
426*b1cdbd2cSJim Jagielski                                            const rtl::OUString aNewPrefix,
427*b1cdbd2cSJim Jagielski                                            sal_Bool withChilds );
428*b1cdbd2cSJim Jagielski 
429*b1cdbd2cSJim Jagielski         std::list< PropertyChangeNotifier* >* SAL_CALL
430*b1cdbd2cSJim Jagielski         getPropertyChangeNotifier( const rtl::OUString& aName );
431*b1cdbd2cSJim Jagielski 
432*b1cdbd2cSJim Jagielski         std::list< PropertySetInfoChangeNotifier* >* SAL_CALL
433*b1cdbd2cSJim Jagielski         getPropertySetListeners( const rtl::OUString& aName );
434*b1cdbd2cSJim Jagielski 
435*b1cdbd2cSJim Jagielski 
436*b1cdbd2cSJim Jagielski         /********************************************************************************/
437*b1cdbd2cSJim Jagielski         /*                              notify eventListeners                           */
438*b1cdbd2cSJim Jagielski         /********************************************************************************/
439*b1cdbd2cSJim Jagielski 
440*b1cdbd2cSJim Jagielski         void SAL_CALL notifyPropertyChanges(
441*b1cdbd2cSJim Jagielski             std::list< PropertyChangeNotifier* >* listeners,
442*b1cdbd2cSJim Jagielski             const com::sun::star::uno::Sequence< com::sun::star::beans::PropertyChangeEvent >& seqChanged );
443*b1cdbd2cSJim Jagielski 
444*b1cdbd2cSJim Jagielski         void SAL_CALL notifyContentExchanged(
445*b1cdbd2cSJim Jagielski             std::vector< std::list< ContentEventNotifier* >* >* listeners_vec );
446*b1cdbd2cSJim Jagielski 
447*b1cdbd2cSJim Jagielski         void SAL_CALL notifyInsert(
448*b1cdbd2cSJim Jagielski             std::list< ContentEventNotifier* >* listeners,const rtl::OUString& aChildName );
449*b1cdbd2cSJim Jagielski 
450*b1cdbd2cSJim Jagielski         void SAL_CALL notifyContentDeleted(
451*b1cdbd2cSJim Jagielski             std::list< ContentEventNotifier* >* listeners );
452*b1cdbd2cSJim Jagielski 
453*b1cdbd2cSJim Jagielski         void SAL_CALL notifyContentRemoved(
454*b1cdbd2cSJim Jagielski             std::list< ContentEventNotifier* >* listeners,
455*b1cdbd2cSJim Jagielski             const rtl::OUString& aChildName );
456*b1cdbd2cSJim Jagielski 
457*b1cdbd2cSJim Jagielski         void SAL_CALL notifyPropertyAdded(
458*b1cdbd2cSJim Jagielski             std::list< PropertySetInfoChangeNotifier* >* listeners,
459*b1cdbd2cSJim Jagielski             const rtl::OUString& aPropertyName );
460*b1cdbd2cSJim Jagielski 
461*b1cdbd2cSJim Jagielski         void SAL_CALL notifyPropertyRemoved(
462*b1cdbd2cSJim Jagielski             std::list< PropertySetInfoChangeNotifier* >* listeners,
463*b1cdbd2cSJim Jagielski             const rtl::OUString& aPropertyName );
464*b1cdbd2cSJim Jagielski 
465*b1cdbd2cSJim Jagielski 
466*b1cdbd2cSJim Jagielski         /********************************************************************************/
467*b1cdbd2cSJim Jagielski         /*                       remove persistent propertyset                          */
468*b1cdbd2cSJim Jagielski         /********************************************************************************/
469*b1cdbd2cSJim Jagielski 
470*b1cdbd2cSJim Jagielski         void SAL_CALL erasePersistentSet( const rtl::OUString& aUnqPath,
471*b1cdbd2cSJim Jagielski                                           sal_Bool withChilds = false );
472*b1cdbd2cSJim Jagielski 
473*b1cdbd2cSJim Jagielski         /********************************************************************************/
474*b1cdbd2cSJim Jagielski         /*                       copy persistent propertyset                            */
475*b1cdbd2cSJim Jagielski         /*                       from srcUnqPath to dstUnqPath                          */
476*b1cdbd2cSJim Jagielski         /********************************************************************************/
477*b1cdbd2cSJim Jagielski 
478*b1cdbd2cSJim Jagielski         void SAL_CALL copyPersistentSet( const rtl::OUString& srcUnqPath,
479*b1cdbd2cSJim Jagielski                                          const rtl::OUString& dstUnqPath,
480*b1cdbd2cSJim Jagielski                                          sal_Bool withChilds = false );
481*b1cdbd2cSJim Jagielski 
482*b1cdbd2cSJim Jagielski 
483*b1cdbd2cSJim Jagielski         // Special optimized method for getting the properties of a directoryitem, which
484*b1cdbd2cSJim Jagielski         // is returned by osl::DirectoryItem::getNextItem()
485*b1cdbd2cSJim Jagielski 
486*b1cdbd2cSJim Jagielski         com::sun::star::uno::Reference< com::sun::star::sdbc::XRow > SAL_CALL
487*b1cdbd2cSJim Jagielski         getv( Notifier* pNotifier,
488*b1cdbd2cSJim Jagielski               const com::sun::star::uno::Sequence< com::sun::star::beans::Property >& properties,
489*b1cdbd2cSJim Jagielski               osl::DirectoryItem& DirItem,
490*b1cdbd2cSJim Jagielski               rtl::OUString& aUnqPath,
491*b1cdbd2cSJim Jagielski               sal_Bool&      bIsRegular );
492*b1cdbd2cSJim Jagielski 
493*b1cdbd2cSJim Jagielski 
494*b1cdbd2cSJim Jagielski         /**
495*b1cdbd2cSJim Jagielski          *  Load the properties from configuration, if create == true create them.
496*b1cdbd2cSJim Jagielski          *  The Properties are stored under the url belonging to it->first.
497*b1cdbd2cSJim Jagielski          */
498*b1cdbd2cSJim Jagielski 
499*b1cdbd2cSJim Jagielski         void SAL_CALL load( const shell::ContentMap::iterator& it,
500*b1cdbd2cSJim Jagielski                             sal_Bool create );
501*b1cdbd2cSJim Jagielski 
502*b1cdbd2cSJim Jagielski         /**
503*b1cdbd2cSJim Jagielski          *  Commit inserts the determined properties in the filestatus object into
504*b1cdbd2cSJim Jagielski          *  the internal map, so that is possible to determine on a subsequent
505*b1cdbd2cSJim Jagielski          *  setting of file properties which properties have changed without filestat
506*b1cdbd2cSJim Jagielski          */
507*b1cdbd2cSJim Jagielski 
508*b1cdbd2cSJim Jagielski         void SAL_CALL
509*b1cdbd2cSJim Jagielski         commit(
510*b1cdbd2cSJim Jagielski             const shell::ContentMap::iterator& it,
511*b1cdbd2cSJim Jagielski             const osl::FileStatus& aFileStatus );
512*b1cdbd2cSJim Jagielski 
513*b1cdbd2cSJim Jagielski         /**
514*b1cdbd2cSJim Jagielski          *  Given a Sequence of properties seq, this method determines the mask
515*b1cdbd2cSJim Jagielski          *  used to instantiate a osl::FileStatus, so that a call to
516*b1cdbd2cSJim Jagielski          *  osl::DirectoryItem::getFileStatus fills the required fields.
517*b1cdbd2cSJim Jagielski          */
518*b1cdbd2cSJim Jagielski 
519*b1cdbd2cSJim Jagielski         void SAL_CALL
520*b1cdbd2cSJim Jagielski         getMaskFromProperties(
521*b1cdbd2cSJim Jagielski             sal_Int32& n_Mask,
522*b1cdbd2cSJim Jagielski             const com::sun::star::uno::Sequence< com::sun::star::beans::Property >& seq );
523*b1cdbd2cSJim Jagielski 
524*b1cdbd2cSJim Jagielski 
525*b1cdbd2cSJim Jagielski         void SAL_CALL
526*b1cdbd2cSJim Jagielski         setFileProperties(
527*b1cdbd2cSJim Jagielski             const com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >& values,
528*b1cdbd2cSJim Jagielski             sal_Int32 numberOfValues )
529*b1cdbd2cSJim Jagielski             throw();
530*b1cdbd2cSJim Jagielski 
531*b1cdbd2cSJim Jagielski 
532*b1cdbd2cSJim Jagielski         // Helper function for public copy
533*b1cdbd2cSJim Jagielski 
534*b1cdbd2cSJim Jagielski         osl::FileBase::RC SAL_CALL
535*b1cdbd2cSJim Jagielski         copy_recursive(
536*b1cdbd2cSJim Jagielski             const rtl::OUString& srcUnqPath,
537*b1cdbd2cSJim Jagielski             const rtl::OUString& dstUnqPath,
538*b1cdbd2cSJim Jagielski             sal_Int32 TypeToCopy,
539*b1cdbd2cSJim Jagielski             sal_Bool  testExistence )
540*b1cdbd2cSJim Jagielski             throw();
541*b1cdbd2cSJim Jagielski 
542*b1cdbd2cSJim Jagielski 
543*b1cdbd2cSJim Jagielski         // Helper function for mkfil,mkdir and write
544*b1cdbd2cSJim Jagielski         // Creates whole path
545*b1cdbd2cSJim Jagielski         // returns success of the operation
546*b1cdbd2cSJim Jagielski         // The calle determines the errorCode, which should be used to install
547*b1cdbd2cSJim Jagielski         // any error
548*b1cdbd2cSJim Jagielski 
549*b1cdbd2cSJim Jagielski         sal_Bool SAL_CALL
550*b1cdbd2cSJim Jagielski         ensuredir( sal_Int32 CommandId,
551*b1cdbd2cSJim Jagielski                    const rtl::OUString& aDirectoryName,
552*b1cdbd2cSJim Jagielski                    sal_Int32 errorCode )
553*b1cdbd2cSJim Jagielski             throw();
554*b1cdbd2cSJim Jagielski 
555*b1cdbd2cSJim Jagielski         // General
556*b1cdbd2cSJim Jagielski         osl::Mutex m_aMutex;
557*b1cdbd2cSJim Jagielski         ContentMap  m_aContent;
558*b1cdbd2cSJim Jagielski 
559*b1cdbd2cSJim Jagielski         // Default properties
560*b1cdbd2cSJim Jagielski 
561*b1cdbd2cSJim Jagielski         const rtl::OUString Title;
562*b1cdbd2cSJim Jagielski         const rtl::OUString CasePreservingURL;
563*b1cdbd2cSJim Jagielski         const rtl::OUString IsDocument;
564*b1cdbd2cSJim Jagielski         const rtl::OUString IsFolder;
565*b1cdbd2cSJim Jagielski         const rtl::OUString DateModified;
566*b1cdbd2cSJim Jagielski         const rtl::OUString Size;
567*b1cdbd2cSJim Jagielski         const rtl::OUString IsVolume;
568*b1cdbd2cSJim Jagielski         const rtl::OUString IsRemoveable;
569*b1cdbd2cSJim Jagielski         const rtl::OUString IsRemote;
570*b1cdbd2cSJim Jagielski         const rtl::OUString IsCompactDisc;
571*b1cdbd2cSJim Jagielski         const rtl::OUString IsFloppy;
572*b1cdbd2cSJim Jagielski         const rtl::OUString IsHidden;
573*b1cdbd2cSJim Jagielski         const rtl::OUString ContentType;
574*b1cdbd2cSJim Jagielski         const rtl::OUString IsReadOnly;
575*b1cdbd2cSJim Jagielski         const rtl::OUString CreatableContentsInfo;
576*b1cdbd2cSJim Jagielski 
577*b1cdbd2cSJim Jagielski     public:
578*b1cdbd2cSJim Jagielski 
579*b1cdbd2cSJim Jagielski         const rtl::OUString FolderContentType;
580*b1cdbd2cSJim Jagielski         const rtl::OUString FileContentType;
581*b1cdbd2cSJim Jagielski 
582*b1cdbd2cSJim Jagielski 
583*b1cdbd2cSJim Jagielski     private:
584*b1cdbd2cSJim Jagielski 
585*b1cdbd2cSJim Jagielski         PropertySet                                                         m_aDefaultProperties;
586*b1cdbd2cSJim Jagielski         com::sun::star::uno::Sequence< com::sun::star::ucb::CommandInfo >   m_sCommandInfo;
587*b1cdbd2cSJim Jagielski 
588*b1cdbd2cSJim Jagielski     public:
589*b1cdbd2cSJim Jagielski         // Misceancellous:
590*b1cdbd2cSJim Jagielski         // Methods for "writeComponentInfo" and "createComponentFactory"
591*b1cdbd2cSJim Jagielski 
592*b1cdbd2cSJim Jagielski         static void SAL_CALL getScheme( rtl::OUString& Scheme );
593*b1cdbd2cSJim Jagielski 
594*b1cdbd2cSJim Jagielski         static rtl::OUString SAL_CALL getImplementationName_static( void );
595*b1cdbd2cSJim Jagielski 
596*b1cdbd2cSJim Jagielski         static com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL getSupportedServiceNames_static( void );
597*b1cdbd2cSJim Jagielski 
598*b1cdbd2cSJim Jagielski     };    // end class shell
599*b1cdbd2cSJim Jagielski 
600*b1cdbd2cSJim Jagielski }             // end namespace fileaccess
601*b1cdbd2cSJim Jagielski 
602*b1cdbd2cSJim Jagielski #endif
603*b1cdbd2cSJim Jagielski 
604