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