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 #ifndef __FRAMEWORK_ACCELERATORS_STORAGEHOLDER_HXX_ 25*b1cdbd2cSJim Jagielski #define __FRAMEWORK_ACCELERATORS_STORAGEHOLDER_HXX_ 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski //=============================================== 28*b1cdbd2cSJim Jagielski // own includes 29*b1cdbd2cSJim Jagielski 30*b1cdbd2cSJim Jagielski #include <accelerators/istoragelistener.hxx> 31*b1cdbd2cSJim Jagielski #include <threadhelp/threadhelpbase.hxx> 32*b1cdbd2cSJim Jagielski #include <general.h> 33*b1cdbd2cSJim Jagielski #include <stdtypes.h> 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim Jagielski //=============================================== 36*b1cdbd2cSJim Jagielski // interface includes 37*b1cdbd2cSJim Jagielski 38*b1cdbd2cSJim Jagielski #ifndef __COM_SUN_STAR_EMBED_XSTORAGE_HPP_ 39*b1cdbd2cSJim Jagielski #include <com/sun/star/embed/XStorage.hpp> 40*b1cdbd2cSJim Jagielski #endif 41*b1cdbd2cSJim Jagielski 42*b1cdbd2cSJim Jagielski #ifndef __COM_SUN_STAR_LANG_XMULTISERVICEFACTORY_HPP_ 43*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XMultiServiceFactory.hpp> 44*b1cdbd2cSJim Jagielski #endif 45*b1cdbd2cSJim Jagielski 46*b1cdbd2cSJim Jagielski //=============================================== 47*b1cdbd2cSJim Jagielski // other includes 48*b1cdbd2cSJim Jagielski 49*b1cdbd2cSJim Jagielski 50*b1cdbd2cSJim Jagielski //=============================================== 51*b1cdbd2cSJim Jagielski // namespace 52*b1cdbd2cSJim Jagielski 53*b1cdbd2cSJim Jagielski namespace framework 54*b1cdbd2cSJim Jagielski { 55*b1cdbd2cSJim Jagielski 56*b1cdbd2cSJim Jagielski #ifdef css 57*b1cdbd2cSJim Jagielski #error "Who defines css? I will use it as namespace alias inside header." 58*b1cdbd2cSJim Jagielski #else 59*b1cdbd2cSJim Jagielski #define css ::com::sun::star 60*b1cdbd2cSJim Jagielski #endif 61*b1cdbd2cSJim Jagielski 62*b1cdbd2cSJim Jagielski //=============================================== 63*b1cdbd2cSJim Jagielski // definitions 64*b1cdbd2cSJim Jagielski 65*b1cdbd2cSJim Jagielski //----------------------------------------------- 66*b1cdbd2cSJim Jagielski /** 67*b1cdbd2cSJim Jagielski TODO document me 68*b1cdbd2cSJim Jagielski */ 69*b1cdbd2cSJim Jagielski class StorageHolder : private ThreadHelpBase // attention! Must be the first base class to guarentee right initialize lock ... 70*b1cdbd2cSJim Jagielski { 71*b1cdbd2cSJim Jagielski //------------------------------------------- 72*b1cdbd2cSJim Jagielski // types 73*b1cdbd2cSJim Jagielski public: 74*b1cdbd2cSJim Jagielski 75*b1cdbd2cSJim Jagielski /** @short TODO */ 76*b1cdbd2cSJim Jagielski typedef ::std::vector< css::uno::Reference< css::embed::XStorage > > TStorageList; 77*b1cdbd2cSJim Jagielski 78*b1cdbd2cSJim Jagielski typedef ::std::vector< IStorageListener* > TStorageListenerList; 79*b1cdbd2cSJim Jagielski 80*b1cdbd2cSJim Jagielski struct TStorageInfo 81*b1cdbd2cSJim Jagielski { 82*b1cdbd2cSJim Jagielski public: 83*b1cdbd2cSJim Jagielski css::uno::Reference< css::embed::XStorage > Storage; 84*b1cdbd2cSJim Jagielski sal_Int32 UseCount; 85*b1cdbd2cSJim Jagielski TStorageListenerList Listener; 86*b1cdbd2cSJim Jagielski TStorageInfoframework::StorageHolder::TStorageInfo87*b1cdbd2cSJim Jagielski TStorageInfo() 88*b1cdbd2cSJim Jagielski : UseCount(0) 89*b1cdbd2cSJim Jagielski {} 90*b1cdbd2cSJim Jagielski }; 91*b1cdbd2cSJim Jagielski 92*b1cdbd2cSJim Jagielski /** @short TODO */ 93*b1cdbd2cSJim Jagielski typedef ::std::hash_map< ::rtl::OUString , 94*b1cdbd2cSJim Jagielski TStorageInfo , 95*b1cdbd2cSJim Jagielski ::rtl::OUStringHash , 96*b1cdbd2cSJim Jagielski ::std::equal_to< ::rtl::OUString > > TPath2StorageInfo; 97*b1cdbd2cSJim Jagielski 98*b1cdbd2cSJim Jagielski //------------------------------------------- 99*b1cdbd2cSJim Jagielski // member 100*b1cdbd2cSJim Jagielski private: 101*b1cdbd2cSJim Jagielski 102*b1cdbd2cSJim Jagielski /** @short TODO */ 103*b1cdbd2cSJim Jagielski css::uno::Reference< css::lang::XMultiServiceFactory > m_xSMGR; 104*b1cdbd2cSJim Jagielski 105*b1cdbd2cSJim Jagielski /** @short TODO */ 106*b1cdbd2cSJim Jagielski css::uno::Reference< css::embed::XStorage > m_xRoot; 107*b1cdbd2cSJim Jagielski 108*b1cdbd2cSJim Jagielski /** @short TODO */ 109*b1cdbd2cSJim Jagielski TPath2StorageInfo m_lStorages; 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielski //------------------------------------------- 112*b1cdbd2cSJim Jagielski // interface 113*b1cdbd2cSJim Jagielski public: 114*b1cdbd2cSJim Jagielski 115*b1cdbd2cSJim Jagielski //--------------------------------------- 116*b1cdbd2cSJim Jagielski /** @short TODO 117*b1cdbd2cSJim Jagielski */ 118*b1cdbd2cSJim Jagielski StorageHolder(); 119*b1cdbd2cSJim Jagielski 120*b1cdbd2cSJim Jagielski //--------------------------------------- 121*b1cdbd2cSJim Jagielski /** @short TODO 122*b1cdbd2cSJim Jagielski */ 123*b1cdbd2cSJim Jagielski StorageHolder(const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR); 124*b1cdbd2cSJim Jagielski 125*b1cdbd2cSJim Jagielski //--------------------------------------- 126*b1cdbd2cSJim Jagielski /** @short TODO 127*b1cdbd2cSJim Jagielski */ 128*b1cdbd2cSJim Jagielski virtual ~StorageHolder(); 129*b1cdbd2cSJim Jagielski 130*b1cdbd2cSJim Jagielski //--------------------------------------- 131*b1cdbd2cSJim Jagielski /** @short TODO 132*b1cdbd2cSJim Jagielski */ 133*b1cdbd2cSJim Jagielski virtual void forgetCachedStorages(); 134*b1cdbd2cSJim Jagielski 135*b1cdbd2cSJim Jagielski //--------------------------------------- 136*b1cdbd2cSJim Jagielski /** @short TODO 137*b1cdbd2cSJim Jagielski */ 138*b1cdbd2cSJim Jagielski virtual void setRootStorage(const css::uno::Reference< css::embed::XStorage >& xRoot); 139*b1cdbd2cSJim Jagielski 140*b1cdbd2cSJim Jagielski //--------------------------------------- 141*b1cdbd2cSJim Jagielski /** @short TODO 142*b1cdbd2cSJim Jagielski */ 143*b1cdbd2cSJim Jagielski virtual css::uno::Reference< css::embed::XStorage > getRootStorage() const; 144*b1cdbd2cSJim Jagielski 145*b1cdbd2cSJim Jagielski //--------------------------------------- 146*b1cdbd2cSJim Jagielski /** @short TODO 147*b1cdbd2cSJim Jagielski open or get! 148*b1cdbd2cSJim Jagielski */ 149*b1cdbd2cSJim Jagielski virtual css::uno::Reference< css::embed::XStorage > openPath(const ::rtl::OUString& sPath , 150*b1cdbd2cSJim Jagielski sal_Int32 nOpenMode); 151*b1cdbd2cSJim Jagielski 152*b1cdbd2cSJim Jagielski //--------------------------------------- 153*b1cdbd2cSJim Jagielski /** @short TODO 154*b1cdbd2cSJim Jagielski */ 155*b1cdbd2cSJim Jagielski virtual StorageHolder::TStorageList getAllPathStorages(const ::rtl::OUString& sPath); 156*b1cdbd2cSJim Jagielski 157*b1cdbd2cSJim Jagielski //--------------------------------------- 158*b1cdbd2cSJim Jagielski /** @short TODO 159*b1cdbd2cSJim Jagielski */ 160*b1cdbd2cSJim Jagielski virtual void commitPath(const ::rtl::OUString& sPath); 161*b1cdbd2cSJim Jagielski 162*b1cdbd2cSJim Jagielski //--------------------------------------- 163*b1cdbd2cSJim Jagielski /** @short TODO 164*b1cdbd2cSJim Jagielski */ 165*b1cdbd2cSJim Jagielski virtual void closePath(const ::rtl::OUString& sPath); 166*b1cdbd2cSJim Jagielski 167*b1cdbd2cSJim Jagielski //--------------------------------------- 168*b1cdbd2cSJim Jagielski /** @short TODO 169*b1cdbd2cSJim Jagielski */ 170*b1cdbd2cSJim Jagielski virtual void notifyPath(const ::rtl::OUString& sPath); 171*b1cdbd2cSJim Jagielski 172*b1cdbd2cSJim Jagielski //--------------------------------------- 173*b1cdbd2cSJim Jagielski /** @short TODO 174*b1cdbd2cSJim Jagielski */ 175*b1cdbd2cSJim Jagielski virtual void addStorageListener( IStorageListener* pListener, 176*b1cdbd2cSJim Jagielski const ::rtl::OUString& sPath ); 177*b1cdbd2cSJim Jagielski 178*b1cdbd2cSJim Jagielski //--------------------------------------- 179*b1cdbd2cSJim Jagielski /** @short TODO 180*b1cdbd2cSJim Jagielski */ 181*b1cdbd2cSJim Jagielski virtual void removeStorageListener( IStorageListener* pListener, 182*b1cdbd2cSJim Jagielski const ::rtl::OUString& sPath ); 183*b1cdbd2cSJim Jagielski 184*b1cdbd2cSJim Jagielski //--------------------------------------- 185*b1cdbd2cSJim Jagielski /** @short TODO 186*b1cdbd2cSJim Jagielski */ 187*b1cdbd2cSJim Jagielski virtual ::rtl::OUString getPathOfStorage(const css::uno::Reference< css::embed::XStorage >& xStorage); 188*b1cdbd2cSJim Jagielski 189*b1cdbd2cSJim Jagielski //--------------------------------------- 190*b1cdbd2cSJim Jagielski /** @short TODO 191*b1cdbd2cSJim Jagielski */ 192*b1cdbd2cSJim Jagielski virtual css::uno::Reference< css::embed::XStorage > getParentStorage(const css::uno::Reference< css::embed::XStorage >& xChild); 193*b1cdbd2cSJim Jagielski 194*b1cdbd2cSJim Jagielski //--------------------------------------- 195*b1cdbd2cSJim Jagielski /** @short TODO 196*b1cdbd2cSJim Jagielski */ 197*b1cdbd2cSJim Jagielski virtual css::uno::Reference< css::embed::XStorage > getParentStorage(const ::rtl::OUString& sChildPath); 198*b1cdbd2cSJim Jagielski 199*b1cdbd2cSJim Jagielski //--------------------------------------- 200*b1cdbd2cSJim Jagielski /** @short TODO 201*b1cdbd2cSJim Jagielski */ 202*b1cdbd2cSJim Jagielski virtual void operator=(const StorageHolder& rCopy); 203*b1cdbd2cSJim Jagielski 204*b1cdbd2cSJim Jagielski //--------------------------------------- 205*b1cdbd2cSJim Jagielski /** @short opens a sub element of the specified base storage. 206*b1cdbd2cSJim Jagielski 207*b1cdbd2cSJim Jagielski @descr First this method try to open the requested sub element 208*b1cdbd2cSJim Jagielski using the given open mode. If it failed there is second step, 209*b1cdbd2cSJim Jagielski which tries to do the same again ... but removing a might existing 210*b1cdbd2cSJim Jagielski WRITE flag from the open mode. The user can supress this fallback 211*b1cdbd2cSJim Jagielski handling by setting the parameter bAllowFallback to sal_False. 212*b1cdbd2cSJim Jagielski 213*b1cdbd2cSJim Jagielski @param xBaseStorage 214*b1cdbd2cSJim Jagielski the storage, where the sub element should be searched. 215*b1cdbd2cSJim Jagielski 216*b1cdbd2cSJim Jagielski @param sSubElement 217*b1cdbd2cSJim Jagielski the full name of the sub element. 218*b1cdbd2cSJim Jagielski e.g. "default.xml" 219*b1cdbd2cSJim Jagielski 220*b1cdbd2cSJim Jagielski @param eOpenMode 221*b1cdbd2cSJim Jagielski a flag field, which set the open mode for this operation. 222*b1cdbd2cSJim Jagielski 223*b1cdbd2cSJim Jagielski @param bAllowFallback 224*b1cdbd2cSJim Jagielski if eOpenMode contains an ELEMENT_WRITE flag this parameter 225*b1cdbd2cSJim Jagielski allow to remove it and try it with the rest of eOpenMode flags 226*b1cdbd2cSJim Jagielski again. 227*b1cdbd2cSJim Jagielski */ 228*b1cdbd2cSJim Jagielski static css::uno::Reference< css::embed::XStorage > openSubStorageWithFallback(const css::uno::Reference< css::embed::XStorage >& xBaseStorage , 229*b1cdbd2cSJim Jagielski const ::rtl::OUString& sSubStorage , 230*b1cdbd2cSJim Jagielski sal_Int32 eOpenMode , 231*b1cdbd2cSJim Jagielski sal_Bool bAllowFallback); 232*b1cdbd2cSJim Jagielski 233*b1cdbd2cSJim Jagielski static css::uno::Reference< css::io::XStream > openSubStreamWithFallback(const css::uno::Reference< css::embed::XStorage >& xBaseStorage , 234*b1cdbd2cSJim Jagielski const ::rtl::OUString& sSubStream , 235*b1cdbd2cSJim Jagielski sal_Int32 eOpenMode , 236*b1cdbd2cSJim Jagielski sal_Bool bAllowFallback); 237*b1cdbd2cSJim Jagielski 238*b1cdbd2cSJim Jagielski //--------------------------------------- 239*b1cdbd2cSJim Jagielski // helper 240*b1cdbd2cSJim Jagielski private: 241*b1cdbd2cSJim Jagielski 242*b1cdbd2cSJim Jagielski //----------------------------------- 243*b1cdbd2cSJim Jagielski /** @short TODO 244*b1cdbd2cSJim Jagielski */ 245*b1cdbd2cSJim Jagielski static ::rtl::OUString impl_st_normPath(const ::rtl::OUString& sPath); 246*b1cdbd2cSJim Jagielski 247*b1cdbd2cSJim Jagielski //----------------------------------- 248*b1cdbd2cSJim Jagielski /** @short TODO 249*b1cdbd2cSJim Jagielski */ 250*b1cdbd2cSJim Jagielski static OUStringList impl_st_parsePath(const ::rtl::OUString& sPath); 251*b1cdbd2cSJim Jagielski }; 252*b1cdbd2cSJim Jagielski 253*b1cdbd2cSJim Jagielski #undef css // dont let it out! 254*b1cdbd2cSJim Jagielski 255*b1cdbd2cSJim Jagielski } // namespace framework 256*b1cdbd2cSJim Jagielski 257*b1cdbd2cSJim Jagielski #endif // __FRAMEWORK_ACCELERATORS_STORAGEHOLDER_HXX_ 258