/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_dbaccess.hxx" #include "sdbcoretools.hxx" #include "dbastrings.hrc" /** === begin UNO includes === **/ #include #include #include #include #include #include #include #include /** === end UNO includes === **/ #include #include #include #include #include #include //......................................................................... namespace dbaccess { //......................................................................... using namespace ::com::sun::star::uno; using namespace ::com::sun::star::lang; using namespace ::com::sun::star::util; using namespace ::com::sun::star::io; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::sdb; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::task; using namespace ::com::sun::star::embed; using namespace ::com::sun::star::container; // ========================================================================= // ------------------------------------------------------------------------- void notifyDataSourceModified(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxObject,sal_Bool _bModified) { Reference< XInterface > xDs = getDataSource( _rxObject ); Reference xDocumentDataSource(xDs,UNO_QUERY); if ( xDocumentDataSource.is() ) xDs = xDocumentDataSource->getDatabaseDocument(); Reference< XModifiable > xModi( xDs, UNO_QUERY ); if ( xModi.is() ) xModi->setModified(_bModified); } // ------------------------------------------------------------------------- Reference< XInterface > getDataSource( const Reference< XInterface >& _rxDependentObject ) { Reference< XInterface > xParent = _rxDependentObject; Reference< XInterface > xReturn; while( xParent.is() ) { xReturn = xParent; Reference xChild(xParent,UNO_QUERY); xParent.set(xChild.is() ? xChild->getParent() : Reference< XInterface >(),UNO_QUERY); } return xReturn; } // ----------------------------------------------------------------------------- ::rtl::OUString extractExceptionMessage( const ::comphelper::ComponentContext& _rContext, const Any& _rError ) { ::rtl::OUString sDisplayMessage; try { Reference< XInteractionRequestStringResolver > xStringResolver; if ( _rContext.createComponent( "com.sun.star.task.InteractionRequestStringResolver", xStringResolver ) ) { ::rtl::Reference< ::comphelper::OInteractionRequest > pRequest( new ::comphelper::OInteractionRequest( _rError ) ); ::rtl::Reference< ::comphelper::OInteractionApprove > pApprove( new ::comphelper::OInteractionApprove ); pRequest->addContinuation( pApprove.get() ); Optional< ::rtl::OUString > aMessage = xStringResolver->getStringFromInformationalRequest( pRequest.get() ); if ( aMessage.IsPresent ) sDisplayMessage = aMessage.Value; } } catch( const Exception& ) { DBG_UNHANDLED_EXCEPTION(); } if ( !sDisplayMessage.getLength() ) { Exception aExcept; _rError >>= aExcept; ::rtl::OUStringBuffer aBuffer; aBuffer.append( _rError.getValueTypeName() ); aBuffer.appendAscii( ":\n" ); aBuffer.append( aExcept.Message ); sDisplayMessage = aBuffer.makeStringAndClear(); } return sDisplayMessage; } namespace tools { namespace stor { // ----------------------------------------------------------------------------- bool storageIsWritable_nothrow( const Reference< XStorage >& _rxStorage ) { if ( !_rxStorage.is() ) return false; sal_Int32 nMode = ElementModes::READ; try { Reference< XPropertySet > xStorageProps( _rxStorage, UNO_QUERY_THROW ); xStorageProps->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "OpenMode" ) ) ) >>= nMode; } catch( const Exception& ) { DBG_UNHANDLED_EXCEPTION(); } return ( nMode & ElementModes::WRITE ) != 0; } // ----------------------------------------------------------------------------- bool commitStorageIfWriteable( const Reference< XStorage >& _rxStorage ) SAL_THROW(( IOException, WrappedTargetException, RuntimeException )) { bool bSuccess = false; Reference< XTransactedObject > xTrans( _rxStorage, UNO_QUERY ); if ( xTrans.is() ) { if ( storageIsWritable_nothrow( _rxStorage ) ) xTrans->commit(); bSuccess = true; } return bSuccess; } } } // tools::stor //......................................................................... } // namespace dbaccess //.........................................................................