User: vg Date: 05/02/16 07:51:28 Modified: /dba/connectivity/source/drivers/hsqldb/ HStorageMap.cxx
Log: INTEGRATION: CWS hsqldb2 (1.2.20); FILE MERGED 2005/01/28 12:21:54 oj 1.2.20.3: #i39922# new interfaces in hsqldb and some debug info 2005/01/25 08:42:51 oj 1.2.20.2: #i39922# correct stream handling 2005/01/19 07:03:28 oj 1.2.20.1: #i39922# remove db from stream name File Changes: Directory: /dba/connectivity/source/drivers/hsqldb/ =================================================== File [changed]: HStorageMap.cxx Url: http://dba.openoffice.org/source/browse/dba/connectivity/source/drivers/hsqldb/HStorageMap.cxx?r1=1.3&r2=1.4 Delta lines: +87 -19 --------------------- --- HStorageMap.cxx 21 Jan 2005 16:40:13 -0000 1.3 +++ HStorageMap.cxx 16 Feb 2005 15:51:25 -0000 1.4 @@ -63,6 +63,16 @@ #ifndef _COMPHELPER_TYPES_HXX_ #include <comphelper/types.hxx> #endif +#ifndef _COM_SUN_STAR_EMBED_XTRANSACTIONBROADCASTER_HPP_ +#include <com/sun/star/embed/XTransactionBroadcaster.hpp> +#endif +#ifndef _COM_SUN_STAR_EMBED_XTRANSACTEDOBJECT_HPP_ +#include <com/sun/star/embed/XTransactedObject.hpp> +#endif +#ifndef _COM_SUN_STAR_LANG_DISPOSEDEXCEPTION_HPP_ +#include <com/sun/star/lang/DisposedException.hpp> +#endif + //........................................................................ namespace connectivity { @@ -88,6 +98,8 @@ { try { + m_xStream = NULL; + m_xSeek = NULL; if ( m_xInputStream.is() ) { m_xInputStream->closeInput(); @@ -100,6 +112,9 @@ { ::comphelper::disposeComponent(m_xOutputStream); } + catch(DisposedException&) + { + } catch(const Exception& e) { e; @@ -107,8 +122,6 @@ } m_xOutputStream = NULL; } - m_xStream = NULL; - m_xSeek = NULL; } catch(Exception& ) { @@ -154,7 +167,12 @@ return ::rtl::OUString::valueOf(s_nCount++); } // ----------------------------------------------------------------------------- - ::rtl::OUString StorageContainer::removeURLPrefix(const ::rtl::OUString& _sURL) + ::rtl::OUString StorageContainer::removeURLPrefix(const ::rtl::OUString& _sURL,const ::rtl::OUString& _sFileURL) + { + return _sURL.copy(_sFileURL.getLength()+1); + } + // ----------------------------------------------------------------------------- + ::rtl::OUString StorageContainer::removeOldURLPrefix(const ::rtl::OUString& _sURL) { ::rtl::OUString sRet = _sURL; #if defined(WIN) || defined(WNT) @@ -201,32 +219,67 @@ TStorages::iterator aFind = ::std::find_if(rMap.begin(),rMap.end(), ::std::compose1( ::std::bind2nd(::std::equal_to<Reference<XStorage> >(),_xStorage) - ,::std::compose1(::std::select1st<TStorages::mapped_type>(),::std::select2nd<TStorages::value_type>())) + ,::std::compose1(::std::select1st<TStorageURLPair>(),::std::compose1(::std::select1st<TStorages::mapped_type>(),::std::select2nd<TStorages::value_type>()))) ); if ( aFind == rMap.end() ) { - aFind = rMap.insert(TStorages::value_type(lcl_getNextCount(),TStorages::mapped_type(_xStorage,TStreamMap()))).first; + aFind = rMap.insert(TStorages::value_type(lcl_getNextCount(),TStorages::mapped_type(TStorageURLPair(_xStorage,_sURL),TStreamMap()))).first; } return aFind->first; } // ----------------------------------------------------------------------------- - Reference< XStorage> StorageContainer::getRegisteredStorage(const ::rtl::OUString& _sKey) + TStorages::mapped_type StorageContainer::getRegisteredStorage(const ::rtl::OUString& _sKey) { - Reference< XStorage> xReturn; + TStorages::mapped_type aRet; TStorages& rMap = lcl_getStorageMap(); TStorages::iterator aFind = rMap.find(_sKey); OSL_ENSURE(aFind != rMap.end(),"Storage could not be found in list!"); if ( aFind != rMap.end() ) - xReturn = aFind->second.first; + aRet = aFind->second; - return xReturn; + return aRet; } // ----------------------------------------------------------------------------- - void StorageContainer::revokeStorage(const ::rtl::OUString& _sKey) + ::rtl::OUString StorageContainer::getRegisteredKey(const Reference< XStorage>& _xStorage) { + ::rtl::OUString sKey; + OSL_ENSURE(_xStorage.is(),"Storage is NULL!"); TStorages& rMap = lcl_getStorageMap(); - rMap.erase(_sKey); + // check if the storage is already in our map + TStorages::iterator aFind = ::std::find_if(rMap.begin(),rMap.end(), + ::std::compose1( + ::std::bind2nd(::std::equal_to<Reference<XStorage> >(),_xStorage) + ,::std::compose1(::std::select1st<TStorageURLPair>(),::std::compose1(::std::select1st<TStorages::mapped_type>(),::std::select2nd<TStorages::value_type>()))) + ); + if ( aFind != rMap.end() ) + sKey = aFind->first; + return sKey; + } + // ----------------------------------------------------------------------------- + void StorageContainer::revokeStorage(const ::rtl::OUString& _sKey,const Reference<XTransactionListener>& _xListener) + { + TStorages& rMap = lcl_getStorageMap(); + TStorages::iterator aFind = rMap.find(_sKey); + if ( aFind != rMap.end() ) + { + try + { + if ( _xListener.is() ) + { + Reference<XTransactionBroadcaster> xBroad(aFind->second.first.first,UNO_QUERY); + if ( xBroad.is() ) + xBroad->removeTransactionListener(_xListener); + Reference<XTransactedObject> xTrans(aFind->second.first.first,UNO_QUERY); + if ( xTrans.is() ) + xTrans->commit(); + } + } + catch(Exception&) + { + } + rMap.erase(aFind); + } } // ----------------------------------------------------------------------------- TStreamMap::mapped_type StorageContainer::registerStream(JNIEnv * env,jstring name, jstring key,sal_Int32 _nMode) @@ -238,11 +291,12 @@ OSL_ENSURE(aFind != rMap.end(),"Storage could not be found in list!"); if ( aFind != rMap.end() ) { - Reference< XStorage> xStorage = StorageContainer::getRegisteredStorage(sKey); - OSL_ENSURE(xStorage.is(),"No Storage available!"); - if ( xStorage.is() ) + TStorages::mapped_type aStoragePair = StorageContainer::getRegisteredStorage(sKey); + OSL_ENSURE(aStoragePair.first.first.is(),"No Storage available!"); + if ( aStoragePair.first.first.is() ) { - ::rtl::OUString sName = removeURLPrefix(jstring2ustring(env,name)); + ::rtl::OUString sOrgName = StorageContainer::jstring2ustring(env,name); + ::rtl::OUString sName = removeURLPrefix(sOrgName,aStoragePair.first.second); TStreamMap::iterator aStreamFind = aFind->second.second.find(sName); OSL_ENSURE( aStreamFind == aFind->second.second.end(),"A Stream was already registered for this object!"); if ( aStreamFind != aFind->second.second.end() ) @@ -253,7 +307,15 @@ { try { - pHelper.reset(new StreamHelper(xStorage->openStreamElement(sName,_nMode))); + try + { + pHelper.reset(new StreamHelper(aStoragePair.first.first->openStreamElement(sName,_nMode))); + } + catch(Exception& ) + { + ::rtl::OUString sName = removeOldURLPrefix(sOrgName); + pHelper.reset(new StreamHelper(aStoragePair.first.first->openStreamElement(sName,_nMode))); + } aFind->second.second.insert(TStreamMap::value_type(sName,pHelper)); } catch(Exception& e) @@ -279,7 +341,7 @@ TStorages::iterator aFind = rMap.find(jstring2ustring(env,key)); OSL_ENSURE(aFind != rMap.end(),"Storage could not be found in list!"); if ( aFind != rMap.end() ) - aFind->second.second.erase(removeURLPrefix(jstring2ustring(env,name))); + aFind->second.second.erase(removeURLPrefix(jstring2ustring(env,name),aFind->second.first.second)); } // ----------------------------------------------------------------------------- TStreamMap::mapped_type StorageContainer::getRegisteredStream( JNIEnv * env,jstring name, jstring key) @@ -290,7 +352,7 @@ OSL_ENSURE(aFind != rMap.end(),"Storage could not be found in list!"); if ( aFind != rMap.end() ) { - TStreamMap::iterator aStreamFind = aFind->second.second.find(removeURLPrefix(jstring2ustring(env,name))); + TStreamMap::iterator aStreamFind = aFind->second.second.find(removeURLPrefix(jstring2ustring(env,name),aFind->second.first.second)); if ( aStreamFind != aFind->second.second.end() ) pRet = aStreamFind->second; } @@ -305,4 +367,10 @@ } // namespace connectivity //........................................................................ - +#if OSL_DEBUG_LEVEL > 1 +TDebugStreamMap& getStreams() +{ + static TDebugStreamMap streams; + return streams; +} +#endif --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
