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