Tag: cws_src680_dba26 User: fs Date: 05/03/11 05:37:22 Modified: /dba/dbaccess/source/core/dataaccess/ definitioncontainer.cxx
Log: #i44786# implAppend: ensure that the new object has the proper name File Changes: Directory: /dba/dbaccess/source/core/dataaccess/ ================================================ File [changed]: definitioncontainer.cxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/core/dataaccess/definitioncontainer.cxx?r1=1.17&r2=1.17.110.1 Delta lines: +66 -9 -------------------- --- definitioncontainer.cxx 2 Aug 2004 15:09:49 -0000 1.17 +++ definitioncontainer.cxx 11 Mar 2005 13:37:19 -0000 1.17.110.1 @@ -2,9 +2,9 @@ * * $RCSfile: definitioncontainer.cxx,v $ * - * $Revision: 1.17 $ + * $Revision: 1.17.110.1 $ * - * last change: $Author: hr $ $Date: 2004/08/02 15:09:49 $ + * last change: $Author: fs $ $Date: 2005/03/11 13:37:19 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -109,6 +109,7 @@ using namespace ::com::sun::star::util; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::container; +using namespace ::com::sun::star::sdbcx; using namespace ::osl; using namespace ::comphelper; using namespace ::cppu; @@ -476,6 +477,51 @@ } //-------------------------------------------------------------------------- +namespace +{ + bool lcl_ensureName( const Reference< XContent >& _rxContent, const ::rtl::OUString& _rName ) + { + if ( !_rxContent.is() ) + return true; + + // .......................................................... + // obtain the current name. If it's the same as the new one, + // don't do anything + try + { + Reference< XPropertySet > xProps( _rxContent, UNO_QUERY ); + if ( xProps.is() ) + { + ::rtl::OUString sCurrentName; + OSL_VERIFY( xProps->getPropertyValue( PROPERTY_NAME ) >>= sCurrentName ); + if ( sCurrentName.equals( _rName ) ) + return true; + } + } + catch( const Exception& ) + { + OSL_ENSURE( sal_False, "lcl_ensureName: caught an exception while obtaining the current name!" ); + } + + // .......................................................... + // set the new name + Reference< XRename > xRename( _rxContent, UNO_QUERY ); + OSL_ENSURE( xRename.is(), "lcl_ensureName: invalid content (not renameable)!" ); + if ( !xRename.is() ) + return false; + try + { + xRename->rename( _rName ); + return true; + } + catch( const Exception& ) + { + OSL_ENSURE( sal_False, "lcl_ensureName: caught an exception!" ); + } + return false; + } +} +//-------------------------------------------------------------------------- void ODefinitionContainer::implAppend(const ::rtl::OUString& _rName, const Reference< XContent >& _rxNewObject) { MutexGuard aGuard(m_aMutex); @@ -489,16 +535,27 @@ ODefinitionContainer_Impl::Documents::iterator aFind = pItem->m_aDocumentMap.find(_rName); if ( aFind == pItem->m_aDocumentMap.end() ) { + // ensure that the new object thas the proper name. + // Somebody could create an object with name "foo", and insert it as "bar" + // into a container. In this case, we need to ensure that the object name + // is also "bar" + // #i44786# / 2005-03-11 / [EMAIL PROTECTED] + lcl_ensureName( _rxNewObject, _rName ); + Reference<XUnoTunnel> xUnoTunnel(_rxNewObject,UNO_QUERY); ::rtl::Reference<OContentHelper> pContent = NULL; if ( xUnoTunnel.is() ) { pContent = reinterpret_cast<OContentHelper*>(xUnoTunnel->getSomething(OContentHelper::getUnoTunnelImplementationId())); TContentPtr pImpl = pContent->getImpl(); - ODefinitionContainer_Impl::Documents::iterator aIter = ::std::find_if(pItem->m_aDocumentMap.begin(),pItem->m_aDocumentMap.end(), + ODefinitionContainer_Impl::Documents::iterator aIter = + ::std::find_if( + pItem->m_aDocumentMap.begin(), + pItem->m_aDocumentMap.end(), ::std::compose1( ::std::bind2nd(::std::equal_to<TContentPtr>(), pImpl), - ::std::select2nd<ODefinitionContainer_Impl::Documents::value_type>()) + ::std::select2nd<ODefinitionContainer_Impl::Documents::value_type>() + ) ); if ( aIter != pItem->m_aDocumentMap.end() ) @@ -518,7 +575,7 @@ } catch(Exception&) { - DBG_ERROR("ODefinitionContainer::implAppend : catched something !"); + DBG_ERROR("ODefinitionContainer::implAppend: caught something !"); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
