diff options
59 files changed, 1676 insertions, 3025 deletions
diff --git a/connectivity/inc/connectivity/dbmetadata.hxx b/connectivity/inc/connectivity/dbmetadata.hxx index fce063231089..ea284efb2b86 100644 --- a/connectivity/inc/connectivity/dbmetadata.hxx +++ b/connectivity/inc/connectivity/dbmetadata.hxx @@ -38,6 +38,11 @@ #include <memory> #include "connectivity/dbtoolsdllapi.hxx" +namespace comphelper +{ + class ComponentContext; +} + //........................................................................ namespace dbtools { @@ -151,6 +156,17 @@ namespace dbtools */ bool supportsColumnAliasInOrderBy() const; + /** determines whether user administration is supported for the database + + User administration support is controlled by the availability of the XUsersSupplier + interface, and it returning a non-NULL users container. + + @param _rContext + the component context we operate in. Might be needed to create the + css.sdbc.DriverManager instance. + */ + bool supportsUserAdministration( const ::comphelper::ComponentContext& _rContext ) const; + /** determines whether in the application UI, empty table folders (aka catalogs/schemas) should be displayed */ bool displayEmptyTableFolders() const; diff --git a/connectivity/source/commontools/dbmetadata.cxx b/connectivity/source/commontools/dbmetadata.cxx index 0cc19b61e72d..c68fed6905ce 100644 --- a/connectivity/source/commontools/dbmetadata.cxx +++ b/connectivity/source/commontools/dbmetadata.cxx @@ -44,10 +44,14 @@ #include <com/sun/star/beans/XPropertySetInfo.hpp> #include <com/sun/star/sdb/BooleanComparisonMode.hpp> #include <com/sun/star/sdbc/XDatabaseMetaData2.hpp> +#include <com/sun/star/sdbcx/XUsersSupplier.hpp> +#include <com/sun/star/sdbcx/XDataDefinitionSupplier.hpp> +#include <com/sun/star/sdbc/XDriverAccess.hpp> /** === end UNO includes === **/ #include <tools/diagnose_ex.h> #include <comphelper/namedvaluecollection.hxx> +#include <comphelper/componentcontext.hxx> #include <boost/optional.hpp> @@ -72,6 +76,9 @@ namespace dbtools using ::com::sun::star::beans::PropertyValue; using ::com::sun::star::beans::XPropertySetInfo; using ::com::sun::star::uno::UNO_QUERY; + using ::com::sun::star::sdbcx::XUsersSupplier; + using ::com::sun::star::sdbcx::XDataDefinitionSupplier; + using ::com::sun::star::sdbc::XDriverAccess; using ::com::sun::star::uno::UNO_SET_THROW; /** === end UNO using === **/ namespace BooleanComparisonMode = ::com::sun::star::sdb::BooleanComparisonMode; @@ -306,6 +313,7 @@ namespace dbtools } return bSupport; } + //-------------------------------------------------------------------- bool DatabaseMetaData::supportsColumnAliasInOrderBy() const { @@ -317,6 +325,36 @@ namespace dbtools } //-------------------------------------------------------------------- + bool DatabaseMetaData::supportsUserAdministration( const ::comphelper::ComponentContext& _rContext ) const + { + lcl_checkConnected( *m_pImpl ); + + bool isSupported( false ); + try + { + // find the XUsersSupplier interface + // - either directly at the connection + Reference< XUsersSupplier > xUsersSupp( m_pImpl->xConnection, UNO_QUERY ); + if ( !xUsersSupp.is() ) + { + // - or at the driver manager + Reference< XDriverAccess > xDriverManager( + _rContext.createComponent( "com.sun.star.sdbc.DriverManager" ), UNO_QUERY_THROW ); + Reference< XDataDefinitionSupplier > xDriver( xDriverManager->getDriverByURL( m_pImpl->xConnectionMetaData->getURL() ), UNO_QUERY ); + if ( xDriver.is() ) + xUsersSupp.set( xDriver->getDataDefinitionByConnection( m_pImpl->xConnection ), UNO_QUERY ); + } + + isSupported = ( xUsersSupp.is() && xUsersSupp->getUsers().is() ); + } + catch( const Exception& ) + { + DBG_UNHANDLED_EXCEPTION(); + } + return isSupported; + } + + //-------------------------------------------------------------------- bool DatabaseMetaData::displayEmptyTableFolders() const { bool doDisplay( true ); diff --git a/connectivity/source/drivers/dbase/DIndex.cxx b/connectivity/source/drivers/dbase/DIndex.cxx index 8e4ef568aa62..96c33037524b 100644 --- a/connectivity/source/drivers/dbase/DIndex.cxx +++ b/connectivity/source/drivers/dbase/DIndex.cxx @@ -52,6 +52,7 @@ #include "diagnose_ex.h" #include <comphelper/types.hxx> #include "resource/dbase_res.hrc" +#include <unotools/sharedunocomponent.hxx> using namespace ::comphelper; // ------------------------------------------------------------------------- @@ -69,7 +70,7 @@ using namespace com::sun::star::lang; IMPLEMENT_SERVICE_INFO(ODbaseIndex,"com.sun.star.sdbcx.driver.dbase.Index","com.sun.star.sdbcx.Index"); // ------------------------------------------------------------------------- -ODbaseIndex::ODbaseIndex(ODbaseTable* _pTable) : OIndex(_pTable->getConnection()->getMetaData()->storesMixedCaseQuotedIdentifiers()) +ODbaseIndex::ODbaseIndex(ODbaseTable* _pTable) : OIndex(sal_True/*_pTable->getConnection()->getMetaData()->storesMixedCaseQuotedIdentifiers()*/) ,m_pFileStream(NULL) ,m_nCurNode(NODE_NOTFOUND) ,m_pTable(_pTable) @@ -82,7 +83,7 @@ ODbaseIndex::ODbaseIndex(ODbaseTable* _pTable) : OIndex(_pTable->getConnection() ODbaseIndex::ODbaseIndex( ODbaseTable* _pTable, const NDXHeader& _rHeader, const ::rtl::OUString& _rName) - :OIndex(_rName,::rtl::OUString(),_rHeader.db_unique,sal_False,sal_False,_pTable->getConnection()->getMetaData()->storesMixedCaseQuotedIdentifiers()) + :OIndex(_rName,::rtl::OUString(),_rHeader.db_unique,sal_False,sal_False,sal_True) // _pTable->getConnection()->getMetaData()->storesMixedCaseQuotedIdentifiers() ,m_pFileStream(NULL) ,m_aHeader(_rHeader) ,m_nCurNode(NODE_NOTFOUND) @@ -163,7 +164,7 @@ sal_Bool ODbaseIndex::openIndexFile() if(m_pFileStream) { m_pFileStream->SetNumberFormatInt(NUMBERFORMAT_INT_LITTLEENDIAN); - m_pFileStream->SetBufferSize(512); + m_pFileStream->SetBufferSize(PAGE_SIZE); (*m_pFileStream) >> *this; } } @@ -342,9 +343,9 @@ ONDXPage* ODbaseIndex::CreatePage(sal_uInt32 nPagePos, ONDXPage* pParent, BOOL b OSL_ENSURE(m_pFileStream,"FileStream is not opened!"); ONDXPage* pPage; - if (m_aCollector.size()) + if ( !m_aCollector.empty() ) { - pPage = *(m_aCollector.end() - 1); + pPage = *(m_aCollector.rbegin()); m_aCollector.pop_back(); pPage->SetPagePos(nPagePos); pPage->SetParent(pParent); @@ -362,7 +363,7 @@ ONDXPage* ODbaseIndex::CreatePage(sal_uInt32 nPagePos, ONDXPage* pParent, BOOL b SvStream& connectivity::dbase::operator >> (SvStream &rStream, ODbaseIndex& rIndex) { rStream.Seek(0); - rStream.Read(&rIndex.m_aHeader,512); + rStream.Read(&rIndex.m_aHeader,PAGE_SIZE); /* OJ: no longer needed // Text convertierung @@ -384,7 +385,7 @@ SvStream& connectivity::dbase::operator << (SvStream &rStream, ODbaseIndex& rInd // aText.Convert(m_pTable->getConnection()->getTextEncoding(), rIndex.m_pTable->getConnection()->GetCharacterSet()); strcpy(rIndex.m_aHeader.db_name,aText.GetBuffer()); */ - OSL_VERIFY_EQUALS( rStream.Write(&rIndex.m_aHeader,512), 512, "Write not successful: Wrong header size for dbase index!"); + OSL_VERIFY_EQUALS( rStream.Write(&rIndex.m_aHeader,PAGE_SIZE), PAGE_SIZE, "Write not successful: Wrong header size for dbase index!"); return rStream; } // ------------------------------------------------------------------------- @@ -480,11 +481,18 @@ BOOL ODbaseIndex::DropImpl() return TRUE; } // ------------------------------------------------------------------------- +void ODbaseIndex::impl_killFileAndthrowError_throw(sal_uInt16 _nErrorId,const ::rtl::OUString& _sFile) +{ + closeImpl(); + if(UCBContentHelper::Exists(_sFile)) + UCBContentHelper::Kill(_sFile); + m_pTable->getConnection()->throwGenericSQLException(_nErrorId,*this); +} //------------------------------------------------------------------ BOOL ODbaseIndex::CreateImpl() { // Anlegen des Index - ::rtl::OUString sFile = getCompletePath(); + const ::rtl::OUString sFile = getCompletePath(); if(UCBContentHelper::Exists(sFile)) { const ::rtl::OUString sError( m_pTable->getConnection()->getResources().getResourceStringWithSubstitution( @@ -525,20 +533,20 @@ BOOL ODbaseIndex::CreateImpl() } m_pFileStream->SetNumberFormatInt(NUMBERFORMAT_INT_LITTLEENDIAN); - m_pFileStream->SetBufferSize(512); + m_pFileStream->SetBufferSize(PAGE_SIZE); m_pFileStream->SetFiller('\0'); // Zunaechst muss das Ergebnis sortiert sein - Reference<XStatement> xStmt; - Reference<XResultSet> xSet; + utl::SharedUNOComponent<XStatement> xStmt; + utl::SharedUNOComponent<XResultSet> xSet; String aName; try { - xStmt = m_pTable->getConnection()->createStatement(); + xStmt.set( m_pTable->getConnection()->createStatement(), UNO_SET_THROW); aName = getString(xCol->getFastPropertyValue(PROPERTY_ID_NAME)); - String aQuote(m_pTable->getConnection()->getMetaData()->getIdentifierQuoteString()); + const String aQuote(m_pTable->getConnection()->getMetaData()->getIdentifierQuoteString()); String aStatement; aStatement.AssignAscii("SELECT "); aStatement += aQuote; @@ -561,38 +569,35 @@ BOOL ODbaseIndex::CreateImpl() // aStatement += aQuote; // } - xSet = xStmt->executeQuery(aStatement); + xSet.set( xStmt->executeQuery(aStatement),UNO_SET_THROW ); } catch(const Exception& ) { - closeImpl(); - if(UCBContentHelper::Exists(sFile)) - UCBContentHelper::Kill(sFile); - m_pTable->getConnection()->throwGenericSQLException(STR_COULD_NOT_CREATE_INDEX,*this); + impl_killFileAndthrowError_throw(STR_COULD_NOT_CREATE_INDEX,sFile); } if (!xSet.is()) { - - closeImpl(); - if(UCBContentHelper::Exists(sFile)) - UCBContentHelper::Kill(sFile); - m_pTable->getConnection()->throwGenericSQLException(STR_COULD_NOT_CREATE_INDEX,*this); + impl_killFileAndthrowError_throw(STR_COULD_NOT_CREATE_INDEX,sFile); } // Setzen der Headerinfo memset(&m_aHeader,0,sizeof(m_aHeader)); - m_pFileStream->SetStreamSize(512); - sal_Int32 nType = 0; ::vos::ORef<OSQLColumns> aCols = m_pTable->getTableColumns(); - - Reference< XPropertySet > xTableCol(*find(aCols->get().begin(),aCols->get().end(),aName,::comphelper::UStringMixEqual(isCaseSensitive()))); + const Reference< XPropertySet > xTableCol(*find(aCols->get().begin(),aCols->get().end(),aName,::comphelper::UStringMixEqual(isCaseSensitive()))); xTableCol->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE)) >>= nType; m_aHeader.db_keytype = (nType == DataType::VARCHAR || nType == DataType::CHAR) ? 0 : 1; m_aHeader.db_keylen = (m_aHeader.db_keytype) ? 8 : (USHORT)getINT32(xTableCol->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_PRECISION))); - m_aHeader.db_maxkeys = (512 - 8) / (8 + m_aHeader.db_keylen); + m_aHeader.db_keylen = (( m_aHeader.db_keylen - 1) / 4 + 1) * 4; + m_aHeader.db_maxkeys = (PAGE_SIZE - 4) / (8 + m_aHeader.db_keylen); + if ( m_aHeader.db_maxkeys < 3 ) + { + impl_killFileAndthrowError_throw(STR_COULD_NOT_CREATE_INDEX_KEYSIZE,sFile); + } + + m_pFileStream->SetStreamSize(PAGE_SIZE); ByteString aCol(aName,m_pTable->getConnection()->getTextEncoding()); strncpy(m_aHeader.db_name,aCol.GetBuffer(),std::min((USHORT)sizeof(m_aHeader.db_name), aCol.Len())); @@ -640,12 +645,7 @@ BOOL ODbaseIndex::CreateImpl() aKey.setValue(aValue); if (aKey == (*m_aCurLeaf)[m_nCurNode].GetKey()) { - ::comphelper::disposeComponent(xSet); - ::comphelper::disposeComponent(xStmt); - closeImpl(); - if(UCBContentHelper::Exists(sFile)) - UCBContentHelper::Kill(sFile); - m_pTable->getConnection()->throwGenericSQLException(STR_COULD_NOT_CREATE_INDEX_NOT_UNIQUE,*this); + impl_killFileAndthrowError_throw(STR_COULD_NOT_CREATE_INDEX_NOT_UNIQUE,sFile); } } aInsertKey.setValue(aValue); @@ -656,16 +656,10 @@ BOOL ODbaseIndex::CreateImpl() break; } } - xRow = NULL; - ::comphelper::disposeComponent(xSet); - ::comphelper::disposeComponent(xStmt); if(nRowsLeft) { - closeImpl(); - if(UCBContentHelper::Exists(sFile)) - UCBContentHelper::Kill(sFile); - m_pTable->getConnection()->throwGenericSQLException(STR_COULD_NOT_CREATE_INDEX,*this); + impl_killFileAndthrowError_throw(STR_COULD_NOT_CREATE_INDEX,sFile); } Release(); createINFEntry(); diff --git a/connectivity/source/drivers/dbase/DIndexes.cxx b/connectivity/source/drivers/dbase/DIndexes.cxx index a3f8003ac8fc..b9c41725ff4e 100644 --- a/connectivity/source/drivers/dbase/DIndexes.cxx +++ b/connectivity/source/drivers/dbase/DIndexes.cxx @@ -75,11 +75,11 @@ sdbcx::ObjectType ODbaseIndexes::createObject(const ::rtl::OUString& _rName) if(pFileStream) { pFileStream->SetNumberFormatInt(NUMBERFORMAT_INT_LITTLEENDIAN); - pFileStream->SetBufferSize(512); + pFileStream->SetBufferSize(PAGE_SIZE); ODbaseIndex::NDXHeader aHeader; pFileStream->Seek(0); - pFileStream->Read(&aHeader,512); + pFileStream->Read(&aHeader,PAGE_SIZE); delete pFileStream; ODbaseIndex* pIndex = new ODbaseIndex(m_pTable,aHeader,_rName); diff --git a/connectivity/source/drivers/dbase/DTable.cxx b/connectivity/source/drivers/dbase/DTable.cxx index e29581f820d1..78c818a46eb0 100644 --- a/connectivity/source/drivers/dbase/DTable.cxx +++ b/connectivity/source/drivers/dbase/DTable.cxx @@ -83,6 +83,27 @@ using namespace ::com::sun::star::lang; // stored as the Field Descriptor terminator #define FIELD_DESCRIPTOR_TERMINATOR 0x0D +#define DBF_EOL 0x1A + +//================================================================== +namespace +{ +//================================================================== +sal_Int32 lcl_getFileSize(SvStream& _rStream) +{ + sal_Int32 nFileSize = 0; + _rStream.Seek(STREAM_SEEK_TO_END); + _rStream.SeekRel(-1); + char cEOL; + _rStream >> cEOL; + nFileSize = _rStream.Tell(); + if ( cEOL == DBF_EOL ) + nFileSize -= 1; + return nFileSize; +} +//================================================================== +} +//================================================================== // ------------------------------------------------------------------------- void ODbaseTable::readHeader() @@ -373,8 +394,7 @@ void ODbaseTable::construct() // if(!m_pColumns && (!m_aColumns.isValid() || !m_aColumns->size())) fillColumns(); - m_pFileStream->Seek(STREAM_SEEK_TO_END); - UINT32 nFileSize = m_pFileStream->Tell(); + UINT32 nFileSize = lcl_getFileSize(*m_pFileStream); m_pFileStream->Seek(STREAM_SEEK_TO_BEGIN); if ( m_aHeader.db_anz == 0 && ((nFileSize-m_aHeader.db_kopf)/m_aHeader.db_slng) > 0) // seems to be empty or someone wrote bullshit into the dbase file m_aHeader.db_anz = ((nFileSize-m_aHeader.db_kopf)/m_aHeader.db_slng); @@ -1077,7 +1097,8 @@ BOOL ODbaseTable::CreateFile(const INetURLObject& aFile, BOOL& bCreateMemo) m_pFileStream->Write(aBuffer, 14); } - (*m_pFileStream) << (BYTE)0x0d; // kopf ende + (*m_pFileStream) << (BYTE)FIELD_DESCRIPTOR_TERMINATOR; // kopf ende + (*m_pFileStream) << (char)DBF_EOL; m_pFileStream->Seek(10L); (*m_pFileStream) << nRecLength; // Satzlaenge nachtraeglich eintragen @@ -1201,6 +1222,7 @@ BOOL ODbaseTable::DropImpl() } return bDropped; } + //------------------------------------------------------------------ BOOL ODbaseTable::InsertRow(OValueRefVector& rRow, BOOL bFlush,const Reference<XIndexAccess>& _xCols) { @@ -1218,8 +1240,7 @@ BOOL ODbaseTable::InsertRow(OValueRefVector& rRow, BOOL bFlush,const Reference<X BOOL bInsertRow = UpdateBuffer( rRow, NULL, _xCols ); if ( bInsertRow ) { - m_pFileStream->Seek(STREAM_SEEK_TO_END); - nFileSize = m_pFileStream->Tell(); + nFileSize = lcl_getFileSize(*m_pFileStream); if (HasMemoFields() && m_pMemoStream) { @@ -1237,6 +1258,7 @@ BOOL ODbaseTable::InsertRow(OValueRefVector& rRow, BOOL bFlush,const Reference<X } else { + (*m_pFileStream) << (char)DBF_EOL; // write EOL // Anzahl Datensaetze im Header erhoehen: m_pFileStream->Seek( 4L ); (*m_pFileStream) << (m_aHeader.db_anz + 1); @@ -1726,7 +1748,7 @@ BOOL ODbaseTable::WriteMemo(ORowSetValue& aVariable, ULONG& rBlockNr) { case MemodBaseIII: // dBase III-Memofeld, endet mit Ctrl-Z { - const char cEOF = (char) 0x1a; + const char cEOF = (char) DBF_EOL; nSize++; // if (pData) @@ -2322,7 +2344,7 @@ BOOL ODbaseTable::ReadMemo(ULONG nBlockNo, ORowSetValue& aVariable) { case MemodBaseIII: // dBase III-Memofeld, endet mit Ctrl-Z { - const char cEOF = (char) 0x1a; + const char cEOF = (char) DBF_EOL; ByteString aBStr; static char aBuf[514]; aBuf[512] = 0; // sonst kann der Zufall uebel mitspielen diff --git a/connectivity/source/drivers/dbase/dindexnode.cxx b/connectivity/source/drivers/dbase/dindexnode.cxx index 7f751ac0103e..68804753b9d0 100644 --- a/connectivity/source/drivers/dbase/dindexnode.cxx +++ b/connectivity/source/drivers/dbase/dindexnode.cxx @@ -889,7 +889,7 @@ static UINT32 nValue; //------------------------------------------------------------------ SvStream& connectivity::dbase::operator >> (SvStream &rStream, ONDXPage& rPage) { - rStream.Seek(rPage.GetPagePos() * 512); + rStream.Seek(rPage.GetPagePos() * PAGE_SIZE); rStream >> nValue >> rPage.aChild; rPage.nCount = USHORT(nValue); @@ -903,17 +903,17 @@ SvStream& connectivity::dbase::operator >> (SvStream &rStream, ONDXPage& rPage) SvStream& connectivity::dbase::operator << (SvStream &rStream, const ONDXPage& rPage) { // Seite existiert noch nicht - ULONG nSize = (rPage.GetPagePos() + 1) * 512; + ULONG nSize = (rPage.GetPagePos() + 1) * PAGE_SIZE; if (nSize > rStream.Seek(STREAM_SEEK_TO_END)) { rStream.SetStreamSize(nSize); - rStream.Seek(rPage.GetPagePos() * 512); + rStream.Seek(rPage.GetPagePos() * PAGE_SIZE); - char aEmptyData[512]; - memset(aEmptyData,0x00,512); - rStream.Write((BYTE*)aEmptyData,512); + char aEmptyData[PAGE_SIZE]; + memset(aEmptyData,0x00,PAGE_SIZE); + rStream.Write((BYTE*)aEmptyData,PAGE_SIZE); } - ULONG nCurrentPos = rStream.Seek(rPage.GetPagePos() * 512); + ULONG nCurrentPos = rStream.Seek(rPage.GetPagePos() * PAGE_SIZE); OSL_UNUSED( nCurrentPos ); nValue = rPage.nCount; @@ -926,7 +926,7 @@ SvStream& connectivity::dbase::operator << (SvStream &rStream, const ONDXPage& r // check if we have to fill the stream with '\0' if(i < rPage.rIndex.getHeader().db_maxkeys) { - ULONG nTell = rStream.Tell() % 512; + ULONG nTell = rStream.Tell() % PAGE_SIZE; USHORT nBufferSize = rStream.GetBufferSize(); ULONG nRemainSize = nBufferSize - nTell; char* pEmptyData = new char[nRemainSize]; @@ -990,7 +990,7 @@ BOOL ONDXPage::IsFull() const USHORT ONDXPage::Search(const ONDXKey& rSearch) { // binare Suche spaeter - USHORT i = 0xFFFF; + USHORT i = NODE_NOTFOUND; while (++i < Count()) if ((*this)[i].GetKey() == rSearch) break; @@ -1001,7 +1001,7 @@ USHORT ONDXPage::Search(const ONDXKey& rSearch) //------------------------------------------------------------------ USHORT ONDXPage::Search(const ONDXPage* pPage) { - USHORT i = 0xFFFF; + USHORT i = NODE_NOTFOUND; while (++i < Count()) if (((*this)[i]).GetChild() == pPage) break; @@ -1057,4 +1057,3 @@ void ONDXPage::Remove(USHORT nPos) } // ----------------------------------------------------------------------------- - diff --git a/connectivity/source/drivers/file/FTable.cxx b/connectivity/source/drivers/file/FTable.cxx index 5cb9742f25cc..af75570a1096 100644 --- a/connectivity/source/drivers/file/FTable.cxx +++ b/connectivity/source/drivers/file/FTable.cxx @@ -143,7 +143,6 @@ void SAL_CALL OFileTable::disposing(void) ::osl::MutexGuard aGuard(m_aMutex); FileClose(); - m_xMetaData = NULL; } //-------------------------------------------------------------------------- Sequence< sal_Int8 > OFileTable::getUnoTunnelImplementationId() @@ -227,7 +226,7 @@ void OFileTable::dropColumn(sal_Int32 /*_nPos*/) SvStream* OFileTable::createStream_simpleError( const String& _rFileName, StreamMode _eOpenMode) { utl::UcbLockBytesHandler* p_null_dummy=NULL; - SvStream* pReturn = ::utl::UcbStreamHelper::CreateStream( _rFileName, _eOpenMode, p_null_dummy); + SvStream* pReturn = ::utl::UcbStreamHelper::CreateStream( _rFileName, _eOpenMode, (_eOpenMode & STREAM_NOCREATE) == STREAM_NOCREATE ,p_null_dummy); if (pReturn && (ERRCODE_NONE != pReturn->GetErrorCode())) { delete pReturn; diff --git a/connectivity/source/drivers/jdbc/DatabaseMetaData.cxx b/connectivity/source/drivers/jdbc/DatabaseMetaData.cxx index 5c5b9951e031..765c8a5e2ffb 100644 --- a/connectivity/source/drivers/jdbc/DatabaseMetaData.cxx +++ b/connectivity/source/drivers/jdbc/DatabaseMetaData.cxx @@ -131,9 +131,10 @@ Reference< XResultSet > SAL_CALL java_sql_DatabaseMetaData::getColumns( static jmethodID mID = NULL; return impl_callResultSetMethodWithStrings( "getColumns", mID, catalog, schemaPattern, tableNamePattern, &columnNamePattern ); } + // ------------------------------------------------------------------------- Reference< XResultSet > SAL_CALL java_sql_DatabaseMetaData::getTables( - const Any& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& tableNamePattern, const Sequence< ::rtl::OUString >& types ) throw(SQLException, RuntimeException) + const Any& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& tableNamePattern, const Sequence< ::rtl::OUString >& _types ) throw(SQLException, RuntimeException) { static const char * cSignature = "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)Ljava/sql/ResultSet;"; static const char * cMethodName = "getTables"; @@ -147,64 +148,95 @@ Reference< XResultSet > SAL_CALL java_sql_DatabaseMetaData::getTables( // Java-Call absetzen static jmethodID mID = NULL; if ( !mID ) - mID = t.pEnv->GetMethodID( getMyClass(), cMethodName, cSignature );OSL_ENSURE(mID,"Unknown method id!"); - OSL_VERIFY_RES( !isExceptionOccured(t.pEnv,sal_True),"Exception occured!"); + { + mID = t.pEnv->GetMethodID( getMyClass(), cMethodName, cSignature ); + OSL_VERIFY_RES( !isExceptionOccured( t.pEnv, sal_True ), "Exception occured!" ); + } + OSL_ENSURE( mID, "Unknown method id!" ); if( mID ) { jvalue args[4]; - sal_Int32 len = types.getLength(); - if(len) + + args[3].l = 0; + sal_Int32 typeFilterCount = _types.getLength(); + if ( typeFilterCount ) { - jobjectArray pObjArray = static_cast<jobjectArray>(t.pEnv->NewObjectArray((jsize) len, java_lang_String::getMyClass(), 0)); - OSL_VERIFY_RES( !isExceptionOccured(t.pEnv,sal_True),"Exception occured!"); + jobjectArray pObjArray = static_cast< jobjectArray >( t.pEnv->NewObjectArray( (jsize)typeFilterCount, java_lang_String::getMyClass(), 0 ) ); + OSL_VERIFY_RES( !isExceptionOccured( t.pEnv, sal_True ), "Exception occured!" ); - const ::rtl::OUString* pBegin = types.getConstArray(); - for(sal_Int32 i=0;i<len;i++,++pBegin) + const ::rtl::OUString* typeFilter = _types.getConstArray(); + bool bIncludeAllTypes = false; + for ( sal_Int32 i=0; i<typeFilterCount; ++i, ++typeFilter ) { - jstring aT = convertwchar_tToJavaString(t.pEnv,*pBegin); - //jstring aT = t.pEnv->NewStringUTF(_par3.GetToken(i)); - t.pEnv->SetObjectArrayElement(pObjArray,(jsize)i,aT); - OSL_VERIFY_RES( !isExceptionOccured(t.pEnv,sal_True),"Exception occured!"); + if ( typeFilter->equalsAsciiL( "%", 1 ) ) + { + bIncludeAllTypes = true; + break; + } + jstring aT = convertwchar_tToJavaString( t.pEnv, *typeFilter ); + t.pEnv->SetObjectArrayElement( pObjArray, (jsize)i, aT ); + OSL_VERIFY_RES( !isExceptionOccured( t.pEnv, sal_True ), "Exception occured!" ); + } + if ( bIncludeAllTypes ) + { + // the SDBC API allows to pass "%" as table type filter, but in JDBC, "all table types" + // is represented by the table type being <null/> + t.pEnv->DeleteLocalRef( pObjArray ); + OSL_VERIFY_RES( !isExceptionOccured( t.pEnv, sal_True ), "Exception occured!" ); } - args[3].l = pObjArray; - }else - args[3].l = 0; - // temporaere Variable initialisieren - args[0].l = catalog.hasValue() ? convertwchar_tToJavaString(t.pEnv,comphelper::getString(catalog)) : 0; - args[1].l = schemaPattern.toChar() == '%' ? NULL : convertwchar_tToJavaString(t.pEnv,schemaPattern); + else + { + args[3].l = pObjArray; + } + } + + // if we are to display "all catalogs", then respect m_aCatalogRestriction + Any aCatalogFilter( catalog ); + if ( !aCatalogFilter.hasValue() ) + aCatalogFilter = m_pConnection->getCatalogRestriction(); + // similar for schema + Any aSchemaFilter; + if ( schemaPattern.equalsAsciiL( "%", 1 ) ) + aSchemaFilter = m_pConnection->getSchemaRestriction(); + else + aSchemaFilter <<= schemaPattern; + + args[0].l = aCatalogFilter.hasValue() ? convertwchar_tToJavaString( t.pEnv, ::comphelper::getString( aCatalogFilter ) ) : NULL; + args[1].l = aSchemaFilter.hasValue() ? convertwchar_tToJavaString( t.pEnv, ::comphelper::getString( aSchemaFilter ) ) : NULL; args[2].l = convertwchar_tToJavaString(t.pEnv,tableNamePattern); out = t.pEnv->CallObjectMethod( object, mID, args[0].l, args[1].l,args[2].l,args[3].l); jthrowable jThrow = t.pEnv->ExceptionOccurred(); if ( jThrow ) - t.pEnv->ExceptionClear();// we have to clear the exception here because we want to handle it itself + t.pEnv->ExceptionClear();// we have to clear the exception here because we want to handle it below - sal_Bool bExcepOccured; - - if(catalog.hasValue()) + if ( aCatalogFilter.hasValue() ) { t.pEnv->DeleteLocalRef((jstring)args[0].l); - bExcepOccured = isExceptionOccured(t.pEnv,sal_True); OSL_ENSURE(!bExcepOccured,"Exception occured!"); + OSL_VERIFY_RES( !isExceptionOccured( t.pEnv, sal_True ), "Exception occured!" ); } if(args[1].l) { t.pEnv->DeleteLocalRef((jstring)args[1].l); - bExcepOccured = isExceptionOccured(t.pEnv,sal_True); OSL_ENSURE(!bExcepOccured,"Exception occured!"); + OSL_VERIFY_RES( !isExceptionOccured( t.pEnv, sal_True ), "Exception occured!" ); } if(tableNamePattern.getLength()) { t.pEnv->DeleteLocalRef((jstring)args[2].l); - bExcepOccured = isExceptionOccured(t.pEnv,sal_True); OSL_ENSURE(!bExcepOccured,"Exception occured!"); + OSL_VERIFY_RES( !isExceptionOccured( t.pEnv, sal_True ), "Exception occured!" ); } //for(INT16 i=0;i<len;i++) - t.pEnv->DeleteLocalRef((jobjectArray)args[3].l); - bExcepOccured = isExceptionOccured(t.pEnv,sal_True); OSL_ENSURE(!bExcepOccured,"Exception occured!"); + if ( args[3].l ) + { + t.pEnv->DeleteLocalRef( (jobjectArray)args[3].l ); + OSL_VERIFY_RES( !isExceptionOccured( t.pEnv, sal_True ), "Exception occured!" ); + } if ( jThrow ) { - if(t.pEnv->IsInstanceOf(jThrow,java_sql_SQLException_BASE::getMyClass())) + if ( t.pEnv->IsInstanceOf( jThrow,java_sql_SQLException_BASE::getMyClass() ) ) { - java_sql_SQLException_BASE* pException = new java_sql_SQLException_BASE(t.pEnv,jThrow); + java_sql_SQLException_BASE* pException = new java_sql_SQLException_BASE( t.pEnv, jThrow ); SQLException e( pException->getMessage(), *this, pException->getSQLState(), @@ -215,7 +247,6 @@ Reference< XResultSet > SAL_CALL java_sql_DatabaseMetaData::getTables( throw e; } } - } } diff --git a/connectivity/source/drivers/jdbc/JConnection.cxx b/connectivity/source/drivers/jdbc/JConnection.cxx index 21efb72979bc..0730d6e9964d 100644 --- a/connectivity/source/drivers/jdbc/JConnection.cxx +++ b/connectivity/source/drivers/jdbc/JConnection.cxx @@ -1069,6 +1069,8 @@ sal_Bool java_sql_Connection::construct(const ::rtl::OUString& url, m_bIgnoreDriverPrivileges = aSettings.getOrDefault( "IgnoreDriverPrivileges", m_bIgnoreDriverPrivileges ); m_bIgnoreCurrency = aSettings.getOrDefault( "IgnoreCurrency", m_bIgnoreCurrency ); aSystemProperties = aSettings.getOrDefault( "SystemProperties", aSystemProperties ); + m_aCatalogRestriction = aSettings.getOrDefault( "ImplicitCatalogRestriction", Any() ); + m_aSchemaRestriction = aSettings.getOrDefault( "ImplicitSchemaRestriction", Any() ); loadDriverFromProperties( sDriverClass, sDriverClassPath, aSystemProperties ); diff --git a/connectivity/source/drivers/jdbc/JDriver.cxx b/connectivity/source/drivers/jdbc/JDriver.cxx index b184d7837c7a..b392a4b61a79 100644 --- a/connectivity/source/drivers/jdbc/JDriver.cxx +++ b/connectivity/source/drivers/jdbc/JDriver.cxx @@ -153,84 +153,91 @@ Sequence< DriverPropertyInfo > SAL_CALL java_sql_Driver::getPropertyInfo( const ,sal_True ,::rtl::OUString() ,Sequence< ::rtl::OUString >()) - ); - + ); aDriverInfo.push_back(DriverPropertyInfo( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JavaDriverClassPath")) ,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("The class path where to look for the JDBC driver.")) ,sal_True ,::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "" ) ) ,Sequence< ::rtl::OUString >()) - ); - + ); aDriverInfo.push_back(DriverPropertyInfo( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SystemProperties")) ,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Additional properties to set at java.lang.System before loading the driver.")) ,sal_True ,::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "" ) ) ,Sequence< ::rtl::OUString >()) - ); - + ); aDriverInfo.push_back(DriverPropertyInfo( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParameterNameSubstitution")) ,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Change named parameters with '?'.")) ,sal_False ,::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "false" ) ) ,aBooleanValues) - ); - + ); aDriverInfo.push_back(DriverPropertyInfo( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IgnoreDriverPrivileges")) ,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Ignore the privileges from the database driver.")) ,sal_False ,::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "false" ) ) ,aBooleanValues) - ); - + ); aDriverInfo.push_back(DriverPropertyInfo( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IsAutoRetrievingEnabled")) ,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Retrieve generated values.")) ,sal_False ,::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "false" ) ) ,aBooleanValues) - ); - + ); aDriverInfo.push_back(DriverPropertyInfo( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AutoRetrievingStatement")) ,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Auto-increment statement.")) ,sal_False ,::rtl::OUString() ,Sequence< ::rtl::OUString >()) - ); - + ); aDriverInfo.push_back(DriverPropertyInfo( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GenerateASBeforeCorrelationName")) ,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Generate AS before table correlation names.")) ,sal_False ,::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "true" ) ) ,aBooleanValues) - ); + ); aDriverInfo.push_back(DriverPropertyInfo( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IgnoreCurrency")) ,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Ignore the currency field from the ResultsetMetaData.")) ,sal_False ,::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "false" ) ) ,aBooleanValues) - ); + ); aDriverInfo.push_back(DriverPropertyInfo( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("EscapeDateTime")) ,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Escape date time format.")) ,sal_False ,::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "true" ) ) ,aBooleanValues) - ); + ); aDriverInfo.push_back(DriverPropertyInfo( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TypeInfoSettings")) ,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Defines how the type info of the database metadata should be manipulated.")) ,sal_False ,::rtl::OUString( ) ,Sequence< ::rtl::OUString > ()) - ); + ); + aDriverInfo.push_back(DriverPropertyInfo( + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ImplicitCatalogRestriction")) + ,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("The catalog which should be used in getTables calls, when the caller passed NULL.")) + ,sal_False + ,::rtl::OUString( ) + ,Sequence< ::rtl::OUString > ()) + ); + aDriverInfo.push_back(DriverPropertyInfo( + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ImplicitSchemaRestriction")) + ,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("The schema which should be used in getTables calls, when the caller passed NULL.")) + ,sal_False + ,::rtl::OUString( ) + ,Sequence< ::rtl::OUString > ()) + ); return Sequence< DriverPropertyInfo >(&aDriverInfo[0],aDriverInfo.size()); } ::connectivity::SharedResources aResources; diff --git a/connectivity/source/drivers/jdbc/tools.cxx b/connectivity/source/drivers/jdbc/tools.cxx index 6518b8db1bd3..9888bb6f683d 100644 --- a/connectivity/source/drivers/jdbc/tools.cxx +++ b/connectivity/source/drivers/jdbc/tools.cxx @@ -142,28 +142,33 @@ java_util_Properties* connectivity::createStringPropertyArray(const Sequence< Pr for(;pBegin != pEnd;++pBegin) { // this is a special property to find the jdbc driver - if( pBegin->Name.compareToAscii("JavaDriverClass") && - pBegin->Name.compareToAscii("JavaDriverClassPath") && - pBegin->Name.compareToAscii("SystemProperties") && - pBegin->Name.compareToAscii("CharSet") && - pBegin->Name.compareToAscii("AppendTableAlias") && - pBegin->Name.compareToAscii("GenerateASBeforeCorrelationName") && - pBegin->Name.compareToAscii("EscapeDateTime") && - pBegin->Name.compareToAscii("ParameterNameSubstitution") && - pBegin->Name.compareToAscii("IsPasswordRequired") && - pBegin->Name.compareToAscii("IsAutoRetrievingEnabled") && - pBegin->Name.compareToAscii("AutoRetrievingStatement") && - pBegin->Name.compareToAscii("UseCatalogInSelect") && - pBegin->Name.compareToAscii("UseSchemaInSelect") && - pBegin->Name.compareToAscii("AutoIncrementCreation") && - pBegin->Name.compareToAscii("Extension") && - pBegin->Name.compareToAscii("NoNameLengthLimit") && - pBegin->Name.compareToAscii("EnableSQL92Check") && - pBegin->Name.compareToAscii("EnableOuterJoinEscape") && - pBegin->Name.compareToAscii("BooleanComparisonMode") && - pBegin->Name.compareToAscii("IgnoreCurrency") && - pBegin->Name.compareToAscii("TypeInfoSettings") && - pBegin->Name.compareToAscii("IgnoreDriverPrivileges")) + if ( pBegin->Name.compareToAscii( "JavaDriverClass" ) + && pBegin->Name.compareToAscii( "JavaDriverClassPath" ) + && pBegin->Name.compareToAscii( "SystemProperties" ) + && pBegin->Name.compareToAscii( "CharSet" ) + && pBegin->Name.compareToAscii( "AppendTableAliasName" ) + && pBegin->Name.compareToAscii( "AddIndexAppendix" ) + && pBegin->Name.compareToAscii( "FormsCheckRequiredFields" ) + && pBegin->Name.compareToAscii( "GenerateASBeforeCorrelationName" ) + && pBegin->Name.compareToAscii( "EscapeDateTime" ) + && pBegin->Name.compareToAscii( "ParameterNameSubstitution" ) + && pBegin->Name.compareToAscii( "IsPasswordRequired" ) + && pBegin->Name.compareToAscii( "IsAutoRetrievingEnabled" ) + && pBegin->Name.compareToAscii( "AutoRetrievingStatement" ) + && pBegin->Name.compareToAscii( "UseCatalogInSelect" ) + && pBegin->Name.compareToAscii( "UseSchemaInSelect" ) + && pBegin->Name.compareToAscii( "AutoIncrementCreation" ) + && pBegin->Name.compareToAscii( "Extension" ) + && pBegin->Name.compareToAscii( "NoNameLengthLimit" ) + && pBegin->Name.compareToAscii( "EnableSQL92Check" ) + && pBegin->Name.compareToAscii( "EnableOuterJoinEscape" ) + && pBegin->Name.compareToAscii( "BooleanComparisonMode" ) + && pBegin->Name.compareToAscii( "IgnoreCurrency" ) + && pBegin->Name.compareToAscii( "TypeInfoSettings" ) + && pBegin->Name.compareToAscii( "IgnoreDriverPrivileges" ) + && pBegin->Name.compareToAscii( "ImplicitCatalogRestriction" ) + && pBegin->Name.compareToAscii( "ImplicitSchemaRestriction" ) + ) { ::rtl::OUString aStr; OSL_VERIFY( pBegin->Value >>= aStr ); diff --git a/connectivity/source/inc/dbase/DIndex.hxx b/connectivity/source/inc/dbase/DIndex.hxx index 02bf64192d52..bba25dd75cc1 100644 --- a/connectivity/source/inc/dbase/DIndex.hxx +++ b/connectivity/source/inc/dbase/DIndex.hxx @@ -96,6 +96,9 @@ namespace connectivity ::rtl::OUString getCompletePath(); void closeImpl(); + /* closes and kill the index file and throws an error. + */ + void impl_killFileAndthrowError_throw(sal_uInt16 _nErrorId,const ::rtl::OUString& _sFile); protected: virtual ~ODbaseIndex(); public: diff --git a/connectivity/source/inc/dbase/dindexnode.hxx b/connectivity/source/inc/dbase/dindexnode.hxx index 01f213d3fbd2..2e6cf957b647 100644 --- a/connectivity/source/inc/dbase/dindexnode.hxx +++ b/connectivity/source/inc/dbase/dindexnode.hxx @@ -36,6 +36,9 @@ #include "connectivity/FValue.hxx" #include <tools/ref.hxx> +#define NODE_NOTFOUND 0xFFFF +#define PAGE_SIZE 512 + namespace connectivity { namespace dbase @@ -86,7 +89,7 @@ namespace connectivity StringCompare Compare(const ONDXKey& rKey) const; }; - #define NODE_NOTFOUND 0xFFFF + //================================================================== diff --git a/connectivity/source/inc/file/FTable.hxx b/connectivity/source/inc/file/FTable.hxx index 4a0fb999bf53..8840482a84b0 100644 --- a/connectivity/source/inc/file/FTable.hxx +++ b/connectivity/source/inc/file/FTable.hxx @@ -51,7 +51,6 @@ namespace connectivity class OOO_DLLPUBLIC_FILE OFileTable : public OTable_TYPEDEF { protected: - ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData > m_xMetaData; OConnection* m_pConnection; SvStream* m_pFileStream; ::vos::ORef<OSQLColumns> m_aColumns; diff --git a/connectivity/source/inc/java/sql/Connection.hxx b/connectivity/source/inc/java/sql/Connection.hxx index 28b6c01212be..6cda6e248ca4 100644 --- a/connectivity/source/inc/java/sql/Connection.hxx +++ b/connectivity/source/inc/java/sql/Connection.hxx @@ -65,6 +65,8 @@ namespace connectivity sal_Bool m_bParameterSubstitution; sal_Bool m_bIgnoreDriverPrivileges; sal_Bool m_bIgnoreCurrency; + ::com::sun::star::uno::Any m_aCatalogRestriction; + ::com::sun::star::uno::Any m_aSchemaRestriction; /** transform named parameter into unnamed one. @param _sSQL @@ -101,6 +103,8 @@ namespace connectivity inline sal_Bool isIgnoreDriverPrivilegesEnabled() const { return m_bIgnoreDriverPrivileges;} inline sal_Bool isIgnoreCurrencyEnabled() const { return m_bIgnoreCurrency; } + inline const ::com::sun::star::uno::Any& getCatalogRestriction() const { return m_aCatalogRestriction; } + inline const ::com::sun::star::uno::Any& getSchemaRestriction() const { return m_aSchemaRestriction; } /** returns the instance used for logging events related to this connection */ diff --git a/connectivity/source/inc/mozaddressbook/MABCatalog.hxx b/connectivity/source/inc/mozaddressbook/MABCatalog.hxx deleted file mode 100644 index 064c8926da31..000000000000 --- a/connectivity/source/inc/mozaddressbook/MABCatalog.hxx +++ /dev/null @@ -1,53 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: MABCatalog.hxx,v $ - * $Revision: 1.5 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _CONNECTIVITY_MAB_CATALOG_HXX_ -#define _CONNECTIVITY_MAB_CATALOG_HXX_ - -#include "file/FCatalog.hxx" - -namespace connectivity -{ - namespace mozaddressbook - { - class OMozabConnection; - class OMozabCatalog : public file::OFileCatalog - { - public: - virtual void refreshTables(); - - public: - OMozabCatalog(OMozabConnection* _pCon); - }; - } -} - -#endif // _CONNECTIVITY_MAB_CATALOG_HXX_ - diff --git a/connectivity/source/inc/mozaddressbook/MABColumnAlias.hxx b/connectivity/source/inc/mozaddressbook/MABColumnAlias.hxx deleted file mode 100644 index 92afe47f98f3..000000000000 --- a/connectivity/source/inc/mozaddressbook/MABColumnAlias.hxx +++ /dev/null @@ -1,120 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: MABColumnAlias.hxx,v $ - * $Revision: 1.3 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -#ifndef _CONNECTIVITY_MAB_COLUMNALIAS_HXX_ -#define _CONNECTIVITY_MAB_COLUMNALIAS_HXX_ - -#include <unotools/confignode.hxx> - -#include <osl/mutex.hxx> -#include <vector> -#include <map> - -namespace connectivity -{ - namespace mozaddressbook - { - typedef enum { - FIRSTNAME = 0, - LASTNAME, - DISPLAYNAME, - NICKNAME, - PRIMARYEMAIL, - SECONDEMAIL, - PREFERMAILFORMAT, - WORKPHONE, - HOMEPHONE, - FAXNUMBER, - PAGERNUMBER, - CELLULARNUMBER, - HOMEADDRESS, - HOMEADDRESS2, - HOMECITY, - HOMESTATE, - HOMEZIPCODE, - HOMECOUNTRY, - WORKADDRESS, - WORKADDRESS2, - WORKCITY, - WORKSTATE, - WORKZIPCODE, - WORKCOUNTRY, - JOBTITLE, - DEPARTMENT, - COMPANY, - WEBPAGE1, - WEBPAGE2, - BIRTHYEAR, - BIRTHMONTH, - BIRTHDAY, - CUSTOM1, - CUSTOM2, - CUSTOM3, - CUSTOM4, - NOTES, - END - } ProgrammaticName; - - class OMozabColumnAlias - { - /** - * m_Alias holds aliases for the mozilla addressbook - * column names. This member gets initialised during - * creation of the connection to the driver. - * m_aAlias initialises m_aAliasMap which then can be - * used to find the corresponding programmatic name - * when an alias is used as a query attribute. Mozilla - * expects programmatic names from its clients. - * - * m_aAlias: vector of aliases used to initialise m_aAliasMap. - * m_AliasMap: map of {alias, programmaticname} pairs. - * - */ - private: - ::std::vector< ::rtl::OUString> m_aAlias; - ::std::map< ::rtl::OUString, ::rtl::OUString> m_aAliasMap; - protected: - ::osl::Mutex m_aMutex; - public: - void initialise(void); - const ::std::vector< ::rtl::OUString> & getAlias(void) const; - const ::std::map< ::rtl::OUString, ::rtl::OUString> & getAliasMap(void) const; - void setAlias(const ::com::sun::star::uno::Reference< - ::com::sun::star::lang::XMultiServiceFactory > &); - private: - void setAliasMap(void); - public: - OMozabColumnAlias(void); - ~OMozabColumnAlias(void); - }; - } -} -#endif // _CONNECTIVITY_MAB_COLUMNALIAS_HXX_ diff --git a/connectivity/source/inc/mozaddressbook/MABColumns.hxx b/connectivity/source/inc/mozaddressbook/MABColumns.hxx deleted file mode 100644 index 0f8ea0d2616e..000000000000 --- a/connectivity/source/inc/mozaddressbook/MABColumns.hxx +++ /dev/null @@ -1,56 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: MABColumns.hxx,v $ - * $Revision: 1.7 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _CONNECTIVITY_MAB_COLUMNS_HXX_ -#define _CONNECTIVITY_MAB_COLUMNS_HXX_ - -#include "file/FColumns.hxx" - -namespace connectivity -{ - namespace mozaddressbook - { - class OMozabColumns : public file::OColumns - { - protected: - virtual sdbcx::ObjectType createObject(const ::rtl::OUString& _rName); - public: - OMozabColumns(file::OFileTable* _pTable, - ::osl::Mutex& _rMutex, - const ::std::vector< ::rtl::OUString> &_rVector - ) : file::OColumns(_pTable,_rMutex,_rVector) - {} - - }; - } -} - -#endif // _CONNECTIVITY_MAB_COLUMNS_HXX_ - diff --git a/connectivity/source/inc/mozaddressbook/MABConnection.hxx b/connectivity/source/inc/mozaddressbook/MABConnection.hxx deleted file mode 100644 index e1241e434eb8..000000000000 --- a/connectivity/source/inc/mozaddressbook/MABConnection.hxx +++ /dev/null @@ -1,107 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: MABConnection.hxx,v $ - * $Revision: 1.12 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _CONNECTIVITY_MAB_CONNECTION_HXX_ -#define _CONNECTIVITY_MAB_CONNECTION_HXX_ - -#include "file/FConnection.hxx" - -#ifndef _CONNECTIVITY_MAB_COLUMNALIAS_HXX_ -#include "MABColumnAlias.hxx" -#endif - -namespace com { namespace sun { namespace star { namespace sheet { - class XSpreadsheetDocument; -} } } } - - -namespace connectivity -{ - namespace mozaddressbook - { - class OMozabDriver; - class OMozabConnection : public file::OConnection - { - OMozabColumnAlias m_aColumnAlias; - ::rtl::OUString m_sURL; // contains the real url set by construct - rtl::OUString m_sMozillaURI; - sal_Int32 m_nAnonABCount; - sal_Int32 m_nMaxResultRecords; - sal_Bool m_UsesFactory ; - sal_Bool m_IsLDAP ; - sal_Bool m_bOutlookExpress; - - public: - OMozabConnection(OMozabDriver* _pDriver); - virtual ~OMozabConnection(); - - virtual void construct(const ::rtl::OUString& _rUrl, - const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& _rInfo ) - throw( ::com::sun::star::sdbc::SQLException); - - // XServiceInfo - DECLARE_SERVICE_INFO(); - - // OComponentHelper - virtual void SAL_CALL disposing(void); - - // XConnection - virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData > SAL_CALL getMetaData( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XTablesSupplier > createCatalog(); - virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XStatement > SAL_CALL createStatement( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XPreparedStatement > SAL_CALL prepareStatement( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XPreparedStatement > SAL_CALL prepareCall( const ::rtl::OUString& sql ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - - // no interface methods - rtl::OUString getMozURI() const - { return m_sMozillaURI; } - - ::rtl::OUString getConnectionURL() const { return m_sURL; } - - sal_Bool usesFactory(void) const { return m_UsesFactory ; } - sal_Bool isLDAP(void) const { return m_IsLDAP ; } - - sal_Bool isOutlookExpress() const { return m_bOutlookExpress;} - sal_Int32 getNextAnonymousAB() { return (++m_nAnonABCount); } - sal_Int32 getMaxResultRecords() const { return m_nMaxResultRecords; } - const OMozabColumnAlias & getColumnAlias() const - { return (m_aColumnAlias); } - - // static methods to return the names of the uri - static const sal_Char* getSDBC_SCHEME_MOZILLA(); - static const sal_Char* getSDBC_SCHEME_LDAP(); - static const sal_Char* getSDBC_SCHEME_OUTLOOK_MAPI(); - static const sal_Char* getSDBC_SCHEME_OUTLOOK_EXPRESS(); - }; - } -} - -#endif // _CONNECTIVITY_MAB_CONNECTION_HXX_ - diff --git a/connectivity/source/inc/mozaddressbook/MABDatabaseMetaData.hxx b/connectivity/source/inc/mozaddressbook/MABDatabaseMetaData.hxx deleted file mode 100644 index 1d520c10e2bf..000000000000 --- a/connectivity/source/inc/mozaddressbook/MABDatabaseMetaData.hxx +++ /dev/null @@ -1,322 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: MABDatabaseMetaData.hxx,v $ - * $Revision: 1.9 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _CONNECTIVITY_MAB_DATABASEMETADATA_HXX_ -#define _CONNECTIVITY_MAB_DATABASEMETADATA_HXX_ - -#ifndef _CONNECTIVITY_FILE_ODATABASEMETADATABASE_HXX_ -#include "file/FDatabaseMetaData.hxx" -#endif -#include <mozaddressbook/MABConnection.hxx> - -namespace connectivity -{ - namespace mozaddressbook - { - class OMozabDatabaseMetaData : public file::ODatabaseMetaData - { - private: - OMozabConnection* m_pMozConnection; - - public: - OMozabDatabaseMetaData(OMozabConnection* _pCon); - ~OMozabDatabaseMetaData(); - // XDatabaseMetaData methods. - virtual sal_Bool SAL_CALL allProceduresAreCallable() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL allTablesAreSelectable() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getURL() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getUserName() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL isReadOnly() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL nullsAreSortedHigh() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL nullsAreSortedLow() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL nullsAreSortedAtStart() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL nullsAreSortedAtEnd() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getDatabaseProductName() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getDatabaseProductVersion() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getDriverName() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getDriverVersion() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL getDriverMajorVersion() - throw(::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL getDriverMinorVersion() - throw(::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL usesLocalFiles() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL usesLocalFilePerTable() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsMixedCaseIdentifiers() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL storesUpperCaseIdentifiers() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL storesLowerCaseIdentifiers() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL storesMixedCaseIdentifiers() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsMixedCaseQuotedIdentifiers() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL storesUpperCaseQuotedIdentifiers() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL storesLowerCaseQuotedIdentifiers() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL storesMixedCaseQuotedIdentifiers() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getIdentifierQuoteString() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getSQLKeywords() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getNumericFunctions() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getStringFunctions() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getSystemFunctions() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getTimeDateFunctions() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getSearchStringEscape() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getExtraNameCharacters() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsAlterTableWithAddColumn() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsAlterTableWithDropColumn() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsColumnAliasing() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL nullPlusNonNullIsNull() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsTypeConversion() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsConvert( sal_Int32 fromType, sal_Int32 toType ) - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsTableCorrelationNames() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsDifferentTableCorrelationNames() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsExpressionsInOrderBy() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsOrderByUnrelated() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsGroupBy() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsGroupByUnrelated() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsGroupByBeyondSelect() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsLikeEscapeClause() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsMultipleResultSets() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsMultipleTransactions() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsNonNullableColumns() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsMinimumSQLGrammar() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsCoreSQLGrammar() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsExtendedSQLGrammar() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsANSI92EntryLevelSQL() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsANSI92IntermediateSQL() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsANSI92FullSQL() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsIntegrityEnhancementFacility() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsOuterJoins() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsFullOuterJoins() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsLimitedOuterJoins() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getSchemaTerm() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getProcedureTerm() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getCatalogTerm() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL isCatalogAtStart() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getCatalogSeparator() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsSchemasInDataManipulation() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsSchemasInProcedureCalls() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsSchemasInTableDefinitions() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsSchemasInIndexDefinitions() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsSchemasInPrivilegeDefinitions() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsCatalogsInDataManipulation() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsCatalogsInProcedureCalls() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsCatalogsInTableDefinitions() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsCatalogsInIndexDefinitions() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsCatalogsInPrivilegeDefinitions() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsPositionedDelete() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsPositionedUpdate() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsSelectForUpdate() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsStoredProcedures() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsSubqueriesInComparisons() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsSubqueriesInExists() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsSubqueriesInIns() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsSubqueriesInQuantifieds() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsCorrelatedSubqueries() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsUnion() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsUnionAll() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsOpenCursorsAcrossCommit() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsOpenCursorsAcrossRollback() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsOpenStatementsAcrossCommit() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsOpenStatementsAcrossRollback() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL getMaxBinaryLiteralLength() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL getMaxCharLiteralLength() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL getMaxColumnNameLength() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL getMaxColumnsInGroupBy() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL getMaxColumnsInIndex() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL getMaxColumnsInOrderBy() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL getMaxColumnsInSelect() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL getMaxColumnsInTable() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL getMaxConnections() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL getMaxCursorNameLength() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL getMaxIndexLength() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL getMaxSchemaNameLength() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL getMaxProcedureNameLength() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL getMaxCatalogNameLength() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL getMaxRowSize() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL doesMaxRowSizeIncludeBlobs() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL getMaxStatementLength() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL getMaxStatements() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL getMaxTableNameLength() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL getMaxTablesInSelect() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL getMaxUserNameLength() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL getDefaultTransactionIsolation() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsTransactions() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsTransactionIsolationLevel( sal_Int32 level ) - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsDataDefinitionAndDataManipulationTransactions() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsDataManipulationTransactionsOnly() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL dataDefinitionCausesTransactionCommit() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL dataDefinitionIgnoredInTransactions() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getTables( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& tableNamePattern, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& types ) - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getColumns( const ::com::sun::star::uno::Any& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& tableNamePattern, const ::rtl::OUString& columnNamePattern ) - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > SAL_CALL getTypeInfo() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsResultSetType( sal_Int32 setType ) - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsResultSetConcurrency( sal_Int32 setType, sal_Int32 concurrency ) - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL ownUpdatesAreVisible( sal_Int32 setType ) - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL ownDeletesAreVisible( sal_Int32 setType ) - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL ownInsertsAreVisible( sal_Int32 setType ) - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL othersUpdatesAreVisible( sal_Int32 setType ) - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL othersDeletesAreVisible( sal_Int32 setType ) - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL othersInsertsAreVisible( sal_Int32 setType ) - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL updatesAreDetected( sal_Int32 setType ) - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL deletesAreDetected( sal_Int32 setType ) - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL insertsAreDetected( sal_Int32 setType ) - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL supportsBatchUpdates() - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - }; - } -} -#endif // _CONNECTIVITY_MAB_DATABASEMETADATA_HXX_ - diff --git a/connectivity/source/inc/mozaddressbook/MABDatabaseMetaDataHelper.hxx b/connectivity/source/inc/mozaddressbook/MABDatabaseMetaDataHelper.hxx deleted file mode 100644 index fbe1a3a38beb..000000000000 --- a/connectivity/source/inc/mozaddressbook/MABDatabaseMetaDataHelper.hxx +++ /dev/null @@ -1,75 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: MABDatabaseMetaDataHelper.hxx,v $ - * $Revision: 1.8 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _CONNECTIVITY_MAB_DATABASEMETADATAHELPER_HXX_ -#define _CONNECTIVITY_MAB_DATABASEMETADATAHELPER_HXX_ - - /* -#include <com/sun/star/sdbc/XResultSet.hpp> -#include <com/sun/star/sdbc/XRow.hpp> -#include <com/sun/star/sdbc/XResultSetMetaDataSupplier.hpp> -#include <com/sun/star/sdbc/XCloseable.hpp> -#include <com/sun/star/sdbc/XColumnLocate.hpp> -#include <com/sun/star/util/XCancellable.hpp> -#include <com/sun/star/sdbc/XWarningsSupplier.hpp> -#include <com/sun/star/sdbc/XResultSetUpdate.hpp> -#include <com/sun/star/sdbc/XRowUpdate.hpp> -#include <cppuhelper/compbase7.hxx> -*/ -#include <comphelper/proparrhlp.hxx> - /* -#ifndef _CONNECTIVITY_FILE_ASTATEMENT_HXX_ -#include "file/FStatement.hxx" -#endif -#include "connectivity/CommonTools.hxx" -*/ -#include <comphelper/propertycontainer.hxx> -#include "FDatabaseMetaDataResultSet.hxx" -#include <mozaddressbook/MABConnection.hxx> - - -namespace connectivity -{ - namespace mozaddressbook - { - class OMozabDatabaseMetaDataHelper - { - public: - OMozabDatabaseMetaDataHelper( ); - ~OMozabDatabaseMetaDataHelper(); - ODatabaseMetaDataResultSet::ORows& getTables( OMozabConnection* _pCon ); - private: - sal_Bool m_bProfileExists ; - }; - } - -} -#endif // _CONNECTIVITY_MAB_DATABASEMETADATAHELPER_HXX_ - diff --git a/connectivity/source/inc/mozaddressbook/MABDriver.hxx b/connectivity/source/inc/mozaddressbook/MABDriver.hxx deleted file mode 100644 index 00756818dc83..000000000000 --- a/connectivity/source/inc/mozaddressbook/MABDriver.hxx +++ /dev/null @@ -1,74 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: MABDriver.hxx,v $ - * $Revision: 1.7 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _CONNECTIVITY_MAB_DRIVER_HXX_ -#define _CONNECTIVITY_MAB_DRIVER_HXX_ - -#include "file/FDriver.hxx" - -namespace connectivity -{ - namespace mozaddressbook - { - ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL - OMozabDriver_CreateInstance(const ::com::sun::star::uno::Reference< - ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory) - throw( ::com::sun::star::uno::Exception ); - - class OMozabDriver : public file::OFileDriver - { - public: - OMozabDriver(const ::com::sun::star::uno::Reference< - ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory) : - file::OFileDriver(_rxFactory), m_xMSFactory(_rxFactory){} - - static ::rtl::OUString getImplementationName_Static( ) throw(::com::sun::star::uno::RuntimeException); - ::rtl::OUString SAL_CALL getImplementationName( ) throw(::com::sun::star::uno::RuntimeException); - - // XDriver - virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection > SAL_CALL - connect( const ::rtl::OUString& url, const ::com::sun::star::uno::Sequence< - ::com::sun::star::beans::PropertyValue >& info ) - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL acceptsURL( const ::rtl::OUString& url ) - throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > - & getMSFactory(void) const - { return m_xMSFactory; } - static sal_Bool acceptsURL_Stat( const ::rtl::OUString& url ); - private: - const ::com::sun::star::uno::Reference< - ::com::sun::star::lang::XMultiServiceFactory > m_xMSFactory; - }; - } -} - -#endif //_CONNECTIVITY_MAB_DRIVER_HXX_ - diff --git a/connectivity/source/inc/mozaddressbook/MABNSInit.hxx b/connectivity/source/inc/mozaddressbook/MABNSInit.hxx deleted file mode 100644 index 063c024631a1..000000000000 --- a/connectivity/source/inc/mozaddressbook/MABNSInit.hxx +++ /dev/null @@ -1,41 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: MABNSInit.hxx,v $ - * $Revision: 1.6 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _CONNECTIVITY_MAB_NS_INIT_HXX_ -#define _CONNECTIVITY_MAB_NS_INIT_HXX_ 1 - -#include <sal/types.h> - -sal_Bool MAB_NS_Init(sal_Bool& aProfileExists); - -sal_Bool MAB_NS_Term(); - -#endif // _CONNECTIVITY_MAB_NS_INIT_HXX_ 1 - diff --git a/connectivity/source/inc/mozaddressbook/MABNameMapper.hxx b/connectivity/source/inc/mozaddressbook/MABNameMapper.hxx deleted file mode 100644 index 1e8cdcc8867c..000000000000 --- a/connectivity/source/inc/mozaddressbook/MABNameMapper.hxx +++ /dev/null @@ -1,81 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: MABNameMapper.hxx,v $ - * $Revision: 1.3 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _CONNECTIVITY_MAB_NAMEMAPPER_HXX_ -#define _CONNECTIVITY_MAB_NAMEMAPPER_HXX_ 1 - -#include <map> - -// Mozilla includes -#include <MABNSInclude.hxx> - -// StarOffice Includes -#include <rtl/ustring.hxx> - -namespace connectivity -{ - namespace mozaddressbook - { - class OMozabNameMapper - { - private: - - struct ltstr - { - bool operator()( const ::rtl::OUString &s1, const ::rtl::OUString &s2) const; - }; - - - typedef ::std::multimap< ::rtl::OUString, nsIAbDirectory *, ltstr > dirMap; - - static OMozabNameMapper *instance; - dirMap *mDirMap; - - public: - static OMozabNameMapper* getInstance(); - - OMozabNameMapper(); - ~OMozabNameMapper(); - - // May modify the name passed in so that it's unique - void add( ::rtl::OUString& str, nsIAbDirectory* abook ); - - // Will replace the given dir - void replace( const ::rtl::OUString& str, nsIAbDirectory* abook ); - - // Get the directory corresponding to str - bool getDir( const ::rtl::OUString& str, nsIAbDirectory* *abook ); - - }; - - } -} - -#endif //_CONNECTIVITY_MAB_NAMEMAPPER_HXX_ diff --git a/connectivity/source/inc/mozaddressbook/MABPreparedStatement.hxx b/connectivity/source/inc/mozaddressbook/MABPreparedStatement.hxx deleted file mode 100644 index b62036f8fa4d..000000000000 --- a/connectivity/source/inc/mozaddressbook/MABPreparedStatement.hxx +++ /dev/null @@ -1,57 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: MABPreparedStatement.hxx,v $ - * $Revision: 1.8 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _CONNECTIVITY_MAB_PREPAREDSTATEMENT_HXX_ -#define _CONNECTIVITY_MAB_PREPAREDSTATEMENT_HXX_ - -#include "file/FPreparedStatement.hxx" - -namespace connectivity -{ - namespace mozaddressbook - { - class OConnection; - class OMozabPreparedStatement : public file::OPreparedStatement - { - protected: - virtual file::OResultSet* createResultSet(); - // here we create a SQL analyzer which doesn't support any restrictions - // these are already done by the server side - virtual file::OSQLAnalyzer* createAnalyzer(); - public: - // DECLARE_CTY_DEFAULTS(file::OStatement); - OMozabPreparedStatement( file::OConnection* _pConnection ) : file::OPreparedStatement( _pConnection ){} - DECLARE_SERVICE_INFO(); - }; - } -} - -#endif //_CONNECTIVITY_MAB_PREPAREDSTATEMENT_HXX_ - diff --git a/connectivity/source/inc/mozaddressbook/MABQuery.hxx b/connectivity/source/inc/mozaddressbook/MABQuery.hxx deleted file mode 100644 index 3e73bba5d16d..000000000000 --- a/connectivity/source/inc/mozaddressbook/MABQuery.hxx +++ /dev/null @@ -1,167 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: MABQuery.hxx,v $ - * $Revision: 1.8 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -#ifndef _CONNECTIVITY_MAB_QUERY_HXX_ -#define _CONNECTIVITY_MAB_QUERY_HXX_ - -#ifndef _CONNECTIVITY_FILE_QUERY_HXX_ -#include "file/FTable.hxx" -#endif -#include <tools/date.hxx> - -#ifndef _CONNECTIVITY_MAB_COLUMNALIAS_HXX_ -#include "MABColumnAlias.hxx" -#endif - -namespace connectivity -{ - namespace mozaddressbook - { - - class OMozabQueryHelper; - - //class OMozabQuery : public nsIAbDirectoryQueryResultListener - class OMozabQuery - { - /* - * A query resultset with a maximum limit of - * m_nMaxNrOfReturns return items, is created from - * the following SQL statement: - * - * ------------------------------------------------- - * SELECT m_aAttributes FROM m_aAddressbook - * WHERE m_aMatchItems SQL_OPR m_aMatchValue - * ------------------------------------------------- - * - * We are\are not, depending on boolean m_bQuerySubDirs, - * interested in querying the sub-directories of the - * addressbook directory, if any. - * - * SQL_OPR: - * m_aSqlOppr contains the SQL operations for every - * attribute in m_aAttributes. - * This member must be initialised together with - * m_aAttributes. - * - * The SQL operations defined for 'SQL_OPR' are: - * matchExists = 0, - * matchDoesNotExist = 1, - * matchContains = 2, - * matchDoesNotContain = 3, - * matchIs = 4, - * matchIsNot = 5, - * matchBeginsWith = 6, - * matchEndsWith = 7, - * matchSoundsLike = 8, - * matchRegExp = 9. - * There must be mapping to one of these values. - * - * The following members MUST be initialised before - * a query is executed: - * m_Attributes, m_aMapAttrOppr, m_aAddressbook, - * m_aMatchItems and m_aMatchValue. - * - * m_bQuerySubDirs and m_nMaxNrReturns are set to a - * default value in the constructor which can be - * overridden. If (element of) m_aSqlOppr is not set, - * the default SQL operation is 'matchIs'. - * - */ - public: - typedef enum { - matchExists = 0, - matchDoesNotExist = 1, - matchContains = 2, - matchDoesNotContain = 3, - matchIs = 4, - matchIsNot = 5, - matchBeginsWith = 6, - matchEndsWith = 7, - matchSoundsLike = 8, - matchRegExp = 9 - } eSqlOppr; - - private: - OMozabQueryHelper *m_aQueryHelper; - ::std::vector< ::rtl::OUString> m_aAttributes; - ::rtl::OUString m_aAddressbook; - ::std::vector< ::rtl::OUString> m_aMatchItems; - ::std::vector< ::rtl::OUString> m_aMatchValues; - sal_Int32 m_nMaxNrOfReturns; - sal_Bool m_bQuerySubDirs; - ::std::vector<eSqlOppr> m_aSqlOppr; - ::std::map< ::rtl::OUString, - ::rtl::OUString> m_aColumnAliasMap; - protected: - ::osl::Mutex m_aMutex; - public: - /* - * - Contains accessors to the members of this class. - * - executeQuery() initiates a non-blocking query. - */ - void setAttributes( ::std::vector< ::rtl::OUString>&); - const ::std::vector< ::rtl::OUString> &getAttributes(void) const; - void setAddressbook( ::rtl::OUString&); - ::rtl::OUString getAddressbook(void) const; - void setMatchItems( ::std::vector< ::rtl::OUString>&); - const ::std::vector< ::rtl::OUString> &getMatchItems(void) const; - void setMatchValues( ::std::vector< ::rtl::OUString>&); - const ::std::vector< ::rtl::OUString> &getMatchValues(void) const; - void setMaxNrOfReturns( const sal_Int32); - sal_Int32 getMaxNrOfReturns(void) const; - void setQuerySubDirs( sal_Bool&); - sal_Bool getQuerySubDirs(void) const; - void setSqlOppr( ::std::vector< eSqlOppr >&); - const ::std::vector< eSqlOppr > &getSqlOppr(void) const; - sal_Int32 executeQuery(sal_Bool _bIsOutlookExpress); - - sal_Int32 getRowCount( void ); - - sal_Int32 getRealRowCount( void ); - - sal_Bool queryComplete( void ); - - sal_Bool checkRowAvailable( sal_Int32 nDBRow ); - - void getRowValue( connectivity::ORowSetValue& rValue, - sal_Int32 nDBRow, rtl::OUString& aDBColumnName, - sal_Int32 nType ); - - public: - OMozabQuery(); - OMozabQuery(const ::std::map< ::rtl::OUString, ::rtl::OUString> &); - virtual ~OMozabQuery(); - }; - } -} - -#endif // _CONNECTIVITY_MAB_QUERY_HXX_ - diff --git a/connectivity/source/inc/mozaddressbook/MABQueryHelper.hxx b/connectivity/source/inc/mozaddressbook/MABQueryHelper.hxx deleted file mode 100644 index c152a01cfc0a..000000000000 --- a/connectivity/source/inc/mozaddressbook/MABQueryHelper.hxx +++ /dev/null @@ -1,120 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: MABQueryHelper.hxx,v $ - * $Revision: 1.8 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _CONNECTIVITY_MAB_QUERYHELPER_HXX_ -#define _CONNECTIVITY_MAB_QUERYHELPER_HXX_ - -#include <MABNSInclude.hxx> -#include <sal/types.h> -#include <rtl/ustring.hxx> -#include <osl/mutex.hxx> -#include <osl/conditn.hxx> -#include <comphelper/stl_types.hxx> - - -namespace connectivity -{ - namespace mozaddressbook - { - class OMozabQueryHelperResultEntry - { - private: - mutable ::osl::Mutex m_aMutex; - - DECLARE_STL_USTRINGACCESS_MAP(::rtl::OUString,fieldMap); - - fieldMap m_Fields; - - public: - OMozabQueryHelperResultEntry(); - ~OMozabQueryHelperResultEntry(); - - void insert( rtl::OUString &key, rtl::OUString &value ); - rtl::OUString getValue( const rtl::OUString &key ) const; - }; - - class OMozabQueryHelper : public nsIAbDirectoryQueryResultListener - { - private: - typedef std::vector< OMozabQueryHelperResultEntry* > resultsArray; - - mutable ::osl::Mutex m_aMutex; - ::osl::Condition m_aCondition; - resultsArray m_aResults; - sal_Int32 m_nIndex; - sal_Bool m_bHasMore; - sal_Bool m_bAtEnd; - sal_Bool m_bQueryComplete; - - void append(OMozabQueryHelperResultEntry* resEnt ); - - void clear_results(); - - void clearResultOrComplete(); - void notifyResultOrComplete(); - void waitForResultOrComplete(); - - - public: - - NS_DECL_ISUPPORTS - NS_DECL_NSIABDIRECTORYQUERYRESULTLISTENER - - OMozabQueryHelper(); - - ~OMozabQueryHelper(); - - void reset(); - - void rewind(); - - OMozabQueryHelperResultEntry* next(); - - OMozabQueryHelperResultEntry* getByIndex( sal_Int32 nRow ); - - sal_Bool hasMore() const; - - sal_Bool atEnd() const; - - sal_Bool queryComplete() const; - - void waitForRow( sal_Int32 rowNum ); - - sal_Int32 getResultCount() const; - - sal_Int32 getRealCount() const; - - void notifyQueryError() ; - - }; - } -} -#endif // _CONNECTIVITY_MAB_QUERYHELPER_HXX_ - diff --git a/connectivity/source/inc/mozaddressbook/MABResultSet.hxx b/connectivity/source/inc/mozaddressbook/MABResultSet.hxx deleted file mode 100644 index 7327f8688ae2..000000000000 --- a/connectivity/source/inc/mozaddressbook/MABResultSet.hxx +++ /dev/null @@ -1,97 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: MABResultSet.hxx,v $ - * $Revision: 1.10 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -#ifndef _CONNECTIVITY_MAB_RESULTSET_HXX_ -#define _CONNECTIVITY_MAB_RESULTSET_HXX_ - -#include "file/FResultSet.hxx" -#include "mozaddressbook/MABTable.hxx" -#include <com/sun/star/sdbcx/XRowLocate.hpp> -#include <com/sun/star/sdbcx/XDeleteRows.hpp> -#include <cppuhelper/implbase2.hxx> - -namespace connectivity -{ - namespace mozaddressbook - { - class OMozabResultSet; - // these typedef's are only necessary for the compiler - typedef ::cppu::ImplHelper2< ::com::sun::star::sdbcx::XRowLocate, - ::com::sun::star::sdbcx::XDeleteRows> OMozabResultSet_BASE; - typedef file::OResultSet OMozabResultSet_BASE2; - typedef ::comphelper::OPropertyArrayUsageHelper<OMozabResultSet> OMozabResultSet_BASE3; - - - class OMozabResultSet : public OMozabResultSet_BASE2, - public OMozabResultSet_BASE, - public OMozabResultSet_BASE3 - { - sal_Bool m_bBookmarkable; - protected: - OMozabTable *m_pMozTable; - - // OPropertyArrayUsageHelper - virtual ::cppu::IPropertyArrayHelper* createArrayHelper() const; - // OPropertySetHelper - virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper(); - virtual sal_Bool fillIndexValues(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XColumnsSupplier> &_xIndex); - - public: - DECLARE_SERVICE_INFO(); - - OMozabResultSet( file::OStatement_Base* pStmt,connectivity::OSQLParseTreeIterator& _aSQLIterator); - - // XInterface - virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL acquire() throw(); - virtual void SAL_CALL release() throw(); - //XTypeProvider - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException); - // XPropertySet - virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw(::com::sun::star::uno::RuntimeException); - - // XRowLocate - virtual ::com::sun::star::uno::Any SAL_CALL getBookmark( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL moveToBookmark( const ::com::sun::star::uno::Any& bookmark ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL moveRelativeToBookmark( const ::com::sun::star::uno::Any& bookmark, sal_Int32 rows ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL compareBookmarks( const ::com::sun::star::uno::Any& first, const ::com::sun::star::uno::Any& second ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL hasOrderedBookmarks( ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL hashBookmark( const ::com::sun::star::uno::Any& bookmark ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - // XDeleteRows - virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL deleteRows( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& rows ) throw(::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException); - - // special methods - // virtual BOOL OpenImpl(); - virtual void doTableSpecials(const OSQLTable& _xTable); - }; - } -} - -#endif //_CONNECTIVITY_MAB_RESULTSET_HXX_ - diff --git a/connectivity/source/inc/mozaddressbook/MABStatement.hxx b/connectivity/source/inc/mozaddressbook/MABStatement.hxx deleted file mode 100644 index 8a801c314f07..000000000000 --- a/connectivity/source/inc/mozaddressbook/MABStatement.hxx +++ /dev/null @@ -1,71 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: MABStatement.hxx,v $ - * $Revision: 1.6 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _CONNECTIVITY_MAB_STATEMENT_HXX_ -#define _CONNECTIVITY_MAB_STATEMENT_HXX_ - -#include "file/FStatement.hxx" -#include "file/fanalyzer.hxx" - -namespace connectivity -{ - namespace mozaddressbook - { - // ----------------------------------------------------------------------------- - typedef ::connectivity::file::OSQLAnalyzer OMozabAnalyzer_BASE; - /** little helper class to avoid filtering by the file resultset - this analyzer doesn't soppurt restrictions - */ - - class OMozabAnalyzer : public OMozabAnalyzer_BASE - { - public: - OMozabAnalyzer(){} - virtual BOOL hasRestriction() const; - }; - - class OConnection; - class OMozabStatement : public file::OStatement - { - protected: - virtual file::OResultSet* createResultSet(); - // here we create a SQL analyzer which doesn't support any restrictions - // these are already done by the server side - virtual file::OSQLAnalyzer* createAnalyzer(); - public: - // DECLARE_CTY_DEFAULTS(file::OStatement); - OMozabStatement( file::OConnection* _pConnection) : file::OStatement( _pConnection){} - DECLARE_SERVICE_INFO(); - }; - } -} - -#endif //_CONNECTIVITY_MAB_STATEMENT_HXX_ - diff --git a/connectivity/source/inc/mozaddressbook/MABTable.hxx b/connectivity/source/inc/mozaddressbook/MABTable.hxx deleted file mode 100644 index 561460f05efc..000000000000 --- a/connectivity/source/inc/mozaddressbook/MABTable.hxx +++ /dev/null @@ -1,154 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: MABTable.hxx,v $ - * $Revision: 1.11 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _CONNECTIVITY_MAB_TABLE_HXX_ -#define _CONNECTIVITY_MAB_TABLE_HXX_ - -#include "file/FTable.hxx" -#include <tools/date.hxx> - -#include <mozaddressbook/MABQuery.hxx> - -#ifdef DARREN_WORK -namespace com { namespace sun { namespace star { namespace sheet { - class XSpreadsheet; -} } } } - -namespace com { namespace sun { namespace star { namespace util { - class XNumberFormats; -} } } } - -#endif /* DARREN_WORK */ - -namespace connectivity -{ - namespace mozaddressbook - { - typedef file::OFileTable OMozabTable_BASE; - class OMozabConnection; - - typedef ::std::map< ::rtl::OUString, - ::com::sun::star::uno::Reference< ::com::sun::star::container::XNamed>, - comphelper::UStringMixLess > OContainer; - static sal_Int32 const m_nNR_OF_FIELDS = 37; - - class OMozabTable : public OMozabTable_BASE - { - private: - //static sal_Int32 const m_nNR_OF_FIELDS = 37; - const OMozabColumnAlias & m_aColumnAlias; - OMozabQuery *m_xQuery; - ::std::vector<sal_Int32> m_aTypes; // holds all type for columns just to avoid to ask the propertyset - ::std::vector<sal_Int32> m_aPrecisions; // same as aboth - ::std::vector<sal_Int32> m_aScales; -#ifdef DARREN_WORK - ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSpreadsheet > m_xSheet; - ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormats > m_xFormats; - ::Date m_aNullDate; -#endif /* DARREN_WORK */ - ::std::vector< ::rtl::OUString> m_aAttributeStrings; - - void fillColumns(); - - BOOL WriteBuffer(); - BOOL UpdateBuffer(connectivity::OValueVector& rRow, connectivity::OValueRow pOrgRow,const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess>& _xCols); - ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet> isUniqueByColumnName(const ::rtl::OUString& _rColName); - OValueRow m_aParameterRow; - - sal_Int32 sParamIndex; - - inline void resetParameters() - { sParamIndex = 0; } - - void parseParameter( const OSQLParseNode* pNode, rtl::OUString& rMatchString ); - - protected: - virtual void FileClose(); - - // special ctor is needed for clone - OMozabTable(const OMozabTable* _pTable); - public: - virtual void refreshColumns(); - virtual void refreshIndexes(); - - public: - // DECLARE_CTY_DEFAULTS( OMozabTable_BASE); - OMozabTable( sdbcx::OCollection* _pTables,OMozabConnection* _pConnection); - OMozabTable( sdbcx::OCollection* _pTables,OMozabConnection* _pConnection, - const ::rtl::OUString& _Name, - const ::rtl::OUString& _Type, - const ::rtl::OUString& _Description = ::rtl::OUString(), - const ::rtl::OUString& _SchemaName = ::rtl::OUString(), - const ::rtl::OUString& _CatalogName = ::rtl::OUString() - ); - ~OMozabTable( ); - - virtual sal_Int32 getCurrentLastPos() const; - virtual sal_Bool seekRow(IResultSetHelper::Movement eCursorPosition, sal_Int32 nOffset, sal_Int32& nCurPos); - virtual sal_Bool fetchRow(connectivity::OValueRow _rRow,const OSQLColumns& _rCols, sal_Bool _bUseTableDefs,sal_Bool bRetrieveData); - - virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); - //XTypeProvider - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL disposing(void); - - // com::sun::star::lang::XUnoTunnel - virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& aIdentifier ) throw(::com::sun::star::uno::RuntimeException); - static ::com::sun::star::uno::Sequence< sal_Int8 > getUnoTunnelImplementationId(); - - BOOL DropImpl(); - BOOL CreateImpl(); - - virtual BOOL InsertRow(connectivity::OValueVector& rRow, BOOL bFlush,const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess>& _xCols); - virtual BOOL DeleteRow(const OSQLColumns& _rCols); - virtual BOOL UpdateRow(connectivity::OValueVector& rRow, connectivity::OValueRow pOrgRow,const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess>& _xCols); - - void fillRowData( connectivity::OSQLParseTreeIterator& _aSQLIterator ); - - void analyseWhereClause( const OSQLParseNode* parseTree, - ::std::vector< ::rtl::OUString > &matchItems, - ::std::vector< OMozabQuery::eSqlOppr > &matchOper, - ::std::vector< ::rtl::OUString > &matchValues, - connectivity::OSQLParseTreeIterator& aSQLIterator); - - // returns a copy of this object - OMozabTable* clone() const; - const OMozabColumnAlias & getColumnAlias() const - { return (m_aColumnAlias); } - - void setParameterRow(const OValueRow& _rParaRow) - { m_aParameterRow = _rParaRow; } - - }; - } -} - -#endif // _CONNECTIVITY_MAB_TABLE_HXX_ - diff --git a/connectivity/source/inc/mozaddressbook/MABTables.hxx b/connectivity/source/inc/mozaddressbook/MABTables.hxx deleted file mode 100644 index 3be8cd14edd2..000000000000 --- a/connectivity/source/inc/mozaddressbook/MABTables.hxx +++ /dev/null @@ -1,55 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: MABTables.hxx,v $ - * $Revision: 1.7 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _CONNECTIVITY_MAB_TABLES_HXX_ -#define _CONNECTIVITY_MAB_TABLES_HXX_ - -#include "file/FTables.hxx" - -namespace connectivity -{ - namespace mozaddressbook - { - typedef file::OTables OMozabTables_BASE; - - class OMozabTables : public OMozabTables_BASE - { - protected: - virtual sdbcx::ObjectType createObject(const ::rtl::OUString& _rName); - public: - OMozabTables(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData >& _rMetaData,::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex, - const ::std::vector< ::rtl::OUString> &_rVector) : OMozabTables_BASE(_rMetaData,_rParent,_rMutex,_rVector) - {} - }; - } -} - -#endif // _CONNECTIVITY_MAB_TABLES_HXX_ - diff --git a/connectivity/source/inc/mozaddressbook/MABTypeConverter.hxx b/connectivity/source/inc/mozaddressbook/MABTypeConverter.hxx deleted file mode 100644 index 9cb055eb4d6a..000000000000 --- a/connectivity/source/inc/mozaddressbook/MABTypeConverter.hxx +++ /dev/null @@ -1,63 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: MABTypeConverter.hxx,v $ - * $Revision: 1.4 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -#ifndef _CONNECTIVITY_MAB_TYPECONVERTER_HXX_ -#define _CONNECTIVITY_MAB_TYPECONVERTER_HXX_ - -#ifndef _CONNECTIVITY_FILE_TYPECONVERTER_HXX_ -#include "file/FTable.hxx" -#endif - -#include <string> - -namespace connectivity -{ - namespace mozaddressbook - { - class OMozabTypeConverter - { - public: - static void ouStringToNsString(const ::rtl::OUString&, nsString&); - static void nsStringToOUString(const nsString&, ::rtl::OUString&); - static void prUnicharToOUString(const PRUnichar*, ::rtl::OUString&); - // Use free() for the following 3 calls. - static char *ouStringToCCharStringAscii(const ::rtl::OUString&); - static char *nsStringToCCharStringAscii(const nsString&); - static char *ouStringToCCharStringUtf8(const ::rtl::OUString&); - // Convert to stl-string. - static ::std::string ouStringToStlString(const ::rtl::OUString&); - static ::std::string nsStringToStlString(const nsString&); - }; - } -} - -#endif // _CONNECTIVITY_MAB_TYPECONVERTER_HXX_ - diff --git a/connectivity/source/inc/resource/dbase_res.hrc b/connectivity/source/inc/resource/dbase_res.hrc index 42e93a6fb906..b462982c6b06 100644 --- a/connectivity/source/inc/resource/dbase_res.hrc +++ b/connectivity/source/inc/resource/dbase_res.hrc @@ -58,7 +58,7 @@ #define STR_COULD_NOT_CREATE_INDEX_NAME ( STR_DBASE_BASE + 17 ) #define STR_INVALID_COLUMN_VALUE ( STR_DBASE_BASE + 18 ) #define STR_TABLE_NOT_DROP ( STR_DBASE_BASE + 19 ) - +#define STR_COULD_NOT_CREATE_INDEX_KEYSIZE ( STR_DBASE_BASE + 20 ) #endif // CONNECTIVITY_RESOURCE_DBASE_HRC diff --git a/connectivity/source/resource/conn_shared_res.src b/connectivity/source/resource/conn_shared_res.src index 5a66a005d8a7..bc96fab7d51c 100644 --- a/connectivity/source/resource/conn_shared_res.src +++ b/connectivity/source/resource/conn_shared_res.src @@ -399,6 +399,10 @@ String STR_COULD_NOT_CREATE_INDEX_NAME { Text [ en-US ] = "The index could not be created. The file '$filename$' is used by an other index."; }; +String STR_COULD_NOT_CREATE_INDEX_KEYSIZE +{ + Text [ en-US ] = "The index could not be created. The size of the choosen column is to big."; +}; String STR_SQL_NAME_ERROR { diff --git a/sfx2/source/dialog/filtergrouping.cxx b/sfx2/source/dialog/filtergrouping.cxx index ddca581b2d79..4809462b70ca 100644 --- a/sfx2/source/dialog/filtergrouping.cxx +++ b/sfx2/source/dialog/filtergrouping.cxx @@ -34,6 +34,7 @@ #include <sfx2/fcontnr.hxx> #include <sfx2/filedlghelper.hxx> #include <sfx2/sfx.hrc> +#include <sfx2/docfac.hxx> #include "sfxresid.hxx" #include <osl/thread.h> #include <com/sun/star/ui/dialogs/XFilterGroupManager.hpp> @@ -43,20 +44,12 @@ #include <comphelper/processfactory.hxx> #include <comphelper/sequenceashashmap.hxx> #include <tools/wldcrd.hxx> +#include <tools/diagnose_ex.h> -#ifndef _LIST_ #include <list> -#endif -#ifndef _VECTOR_ #include <vector> -#endif -#ifndef _MAP_ #include <map> -#endif -#ifndef _ALGORITHM_ #include <algorithm> -#endif -#include <sfx2/docfac.hxx> //........................................................................ namespace sfx2 @@ -906,7 +899,7 @@ namespace sfx2 } catch( const Exception& ) { - DBG_ERROR( "AppendFilterGroup::operator(): caught an exception while adding filters!" ); + DBG_UNHANDLED_EXCEPTION(); } } diff --git a/svx/source/dialog/macropg.src b/svx/source/dialog/macropg.src index 7bcd35a13948..84fdb5c1af7f 100644 --- a/svx/source/dialog/macropg.src +++ b/svx/source/dialog/macropg.src @@ -246,7 +246,7 @@ String RID_SVXSTR_EVENT_APPROVEPARAMETER }; String RID_SVXSTR_EVENT_ACTIONPERFORMED { - Text [ en-US ] = "When initiating" ; + Text [ en-US ] = "Execute action" ; }; String RID_SVXSTR_EVENT_AFTERUPDATE { @@ -350,7 +350,7 @@ String RID_SVXSTR_EVENT_APPROVERESETTED }; String RID_SVXSTR_EVENT_APPROVEACTIONPERFORMED { - Text [ en-US ] = "Before commencing" ; + Text [ en-US ] = "Approve action" ; }; String RID_SVXSTR_EVENT_SUBMITTED { diff --git a/svx/source/fmcomp/fmgridcl.cxx b/svx/source/fmcomp/fmgridcl.cxx index cbb5cd5b48f2..479cc76d4e7c 100644 --- a/svx/source/fmcomp/fmgridcl.cxx +++ b/svx/source/fmcomp/fmgridcl.cxx @@ -85,6 +85,7 @@ #include <svtools/numuno.hxx> #include <tools/multisel.hxx> #include <tools/shl.hxx> +#include <tools/diagnose_ex.h> #include <vcl/help.hxx> #include <vcl/image.hxx> #include <vcl/longcurr.hxx> @@ -812,6 +813,9 @@ void FmGridHeader::PostExecuteColumnContextMenu(sal_uInt16 nColId, const PopupMe ::rtl::OUString aFieldType; sal_Bool bReplace = sal_False; + enum InspectorAction { eOpenInspector, eCloseInspector, eUpdateInspector, eNone }; + InspectorAction eInspectorAction = eNone; + Reference< XPropertySet > xColumnToInspect; switch (nExecutionResult) { case SID_FM_DELETECOL: @@ -822,22 +826,9 @@ void FmGridHeader::PostExecuteColumnContextMenu(sal_uInt16 nColId, const PopupMe ::comphelper::disposeComponent(xCol); } break; case SID_FM_SHOW_PROPERTY_BROWSER: - { - Reference< XInterface > xCol; - ::cppu::extractInterface(xCol, xCols->getByIndex(nPos)); - FmInterfaceItem aIFaceItem(SID_FM_SHOW_PROPERTY_BROWSER, xCol); - SfxBoolItem aShowItem(SID_FM_SHOW_PROPERTIES, !rMenu.IsItemChecked(SID_FM_SHOW_PROPERTY_BROWSER)); - - // execute the slot, use the dispatcher of the current view frame (which should be the one we're residing in) - SfxViewFrame* pCurrentFrame = SfxViewFrame::Current(); - if (pCurrentFrame) - pCurrentFrame->GetBindings().GetDispatcher()->Execute( SID_FM_SHOW_PROPERTY_BROWSER, SFX_CALLMODE_ASYNCHRON, - &aIFaceItem, &aShowItem, 0L ); - else - { - DBG_ERROR("FmGridHeader::PostExecuteColumnContextMenu : no current view frame -> no bindings !"); - } - } break; + eInspectorAction = rMenu.IsItemChecked( SID_FM_SHOW_PROPERTY_BROWSER ) ? eOpenInspector : eCloseInspector; + xColumnToInspect.set( xCols->getByIndex( nPos ), UNO_QUERY ); + break; case SID_FM_EDIT + nChangeTypeOffset: bReplace = sal_True; case SID_FM_EDIT: @@ -945,50 +936,74 @@ void FmGridHeader::PostExecuteColumnContextMenu(sal_uInt16 nColId, const PopupMe break; } - if (aFieldType.getLength()) + if ( aFieldType.getLength() ) { - Reference< ::com::sun::star::form::XGridColumnFactory > xFactory(xCols, UNO_QUERY); - Reference< ::com::sun::star::beans::XPropertySet > xCol = xFactory->createColumn(aFieldType); - if (xCol.is()) + try { - if (bReplace) + Reference< XGridColumnFactory > xFactory( xCols, UNO_QUERY_THROW ); + Reference< XPropertySet > xNewCol( xFactory->createColumn( aFieldType ), UNO_SET_THROW ); + + if ( bReplace ) { // ein paar Properties hinueberretten - Reference< ::com::sun::star::beans::XPropertySet > xReplaced; - ::cppu::extractInterface(xReplaced, xCols->getByIndex(nPos)); + Reference< XPropertySet > xReplaced( xCols->getByIndex( nPos ), UNO_QUERY ); - // the application locale - ::com::sun::star::lang::Locale aAppLocale = Application::GetSettings().GetUILocale(); + OStaticDataAccessTools().TransferFormComponentProperties( + xReplaced, xNewCol, Application::GetSettings().GetUILocale() ); - OStaticDataAccessTools().TransferFormComponentProperties(xReplaced, xCol, aAppLocale); + xCols->replaceByIndex( nPos, makeAny( xNewCol ) ); + ::comphelper::disposeComponent( xReplaced ); - xCols->replaceByIndex( nPos, makeAny( xCol ) ); - ::comphelper::disposeComponent(xReplaced); + eInspectorAction = eUpdateInspector; + xColumnToInspect = xNewCol; } else { // Standardlabel setzen - ::rtl::OUString sLabelBase = String(SVX_RES(RID_STR_COLUMN)); + ::rtl::OUString sLabelBase = String( SVX_RES( RID_STR_COLUMN ) ); // disambiguate the name - Reference< XNameAccess > xColNames(xCols, UNO_QUERY); + Reference< XNameAccess > xColNames( xCols, UNO_QUERY ); ::rtl::OUString sLabel; - for (sal_Int32 i=1; i<65535; ++i) + for ( sal_Int32 i=1; i<65535; ++i ) { sLabel = sLabelBase; - sLabel += ::rtl::OUString::valueOf((sal_Int32)i); - if (!xColNames->hasByName(sLabel)) + sLabel += ::rtl::OUString::valueOf( (sal_Int32)i ); + if ( !xColNames->hasByName( sLabel ) ) break; } // no fallback in case the name is not unique (which is rather improbable) .... - xCol->setPropertyValue(FM_PROP_LABEL, makeAny(sLabel)); - xCol->setPropertyValue(FM_PROP_NAME, makeAny(sLabel)); + xNewCol->setPropertyValue( FM_PROP_LABEL, makeAny( sLabel ) ); + xNewCol->setPropertyValue( FM_PROP_NAME, makeAny( sLabel ) ); FormControlFactory determine( ::comphelper::getProcessServiceFactory() ); - determine.initializeControlModel( DocumentClassification::classifyHostDocument( xCols ), xCol ); + determine.initializeControlModel( DocumentClassification::classifyHostDocument( xCols ), xNewCol ); - xCols->insertByIndex( nPos, makeAny( xCol ) ); + xCols->insertByIndex( nPos, makeAny( xNewCol ) ); } + } + catch( const Exception& ) + { + DBG_UNHANDLED_EXCEPTION(); + } + } + + SfxViewFrame* pCurrentFrame = SfxViewFrame::Current(); + OSL_ENSURE( pCurrentFrame, "FmGridHeader::PostExecuteColumnContextMenu: no view frame -> no bindings -> no property browser!" ); + if ( pCurrentFrame ) + { + if ( eInspectorAction == eUpdateInspector ) + { + if ( !pCurrentFrame->HasChildWindow( SID_FM_SHOW_PROPERTIES ) ) + eInspectorAction = eNone; + } + + if ( eInspectorAction != eNone ) + { + FmInterfaceItem aIFaceItem( SID_FM_SHOW_PROPERTY_BROWSER, xColumnToInspect ); + SfxBoolItem aShowItem( SID_FM_SHOW_PROPERTIES, eInspectorAction == eCloseInspector ? FALSE : TRUE ); + pCurrentFrame->GetBindings().GetDispatcher()->Execute( SID_FM_SHOW_PROPERTY_BROWSER, SFX_CALLMODE_ASYNCHRON, + &aIFaceItem, &aShowItem, 0L ); } } } @@ -1597,7 +1612,7 @@ void FmGridControl::ColumnMoved(sal_uInt16 nId) DbGridColumn* pCol = DbGridControl::GetColumns().GetObject(GetModelColumnPos(nId)); Reference< ::com::sun::star::beans::XPropertySet > xCol; - // Einfuegen mu� sich an den Column Positionen orientieren + // Einfuegen muß sich an den Column Positionen orientieren sal_Int32 i; Reference< XInterface > xCurrent; for (i = 0; !xCol.is() && i < xColumns->getCount(); i++) diff --git a/svx/source/fmcomp/gridctrl.src b/svx/source/fmcomp/gridctrl.src index cec6bf7500fd..0a3c3380e8ae 100644 --- a/svx/source/fmcomp/gridctrl.src +++ b/svx/source/fmcomp/gridctrl.src @@ -156,7 +156,7 @@ Menu RID_SVXMNU_COLS { Identifier = SID_FM_HIDECOL ; HelpID = SID_FM_HIDECOL ; - Text [ en-US ] = "~Hide Columns"; + Text [ en-US ] = "~Hide Column"; }; MenuItem { diff --git a/svx/source/form/fmcontrolbordermanager.cxx b/svx/source/form/fmcontrolbordermanager.cxx index 53e71f5bb134..17bd10346302 100644 --- a/svx/source/form/fmcontrolbordermanager.cxx +++ b/svx/source/form/fmcontrolbordermanager.cxx @@ -381,10 +381,10 @@ namespace svxform { try { - Reference< XVclWindowPeer > xPeer( _rxControl.is() ? _rxControl->getPeer() : Reference< XWindowPeer >(), UNO_QUERY ); - OSL_ENSURE( xPeer.is(), "ControlBorderManager::validityChanged: invalid control/peer!" ); + OSL_ENSURE( _rxControl.is(), "ControlBorderManager::validityChanged: invalid control!" ); OSL_ENSURE( _rxValidatable.is(), "ControlBorderManager::validityChanged: invalid validatable!" ); + Reference< XVclWindowPeer > xPeer( _rxControl.is() ? _rxControl->getPeer() : Reference< XWindowPeer >(), UNO_QUERY ); if ( !xPeer.is() || !_rxValidatable.is() ) return; diff --git a/svx/source/form/fmctrler.cxx b/svx/source/form/fmctrler.cxx index df9f34f4fa49..927b0a75a5ce 100644 --- a/svx/source/form/fmctrler.cxx +++ b/svx/source/form/fmctrler.cxx @@ -1292,17 +1292,16 @@ void SAL_CALL FmXFormController::textChanged(const TextEvent& e) throw( RuntimeE } } } - else if (!m_bModified) - onModify( e.Source ); + else + impl_onModify(); } // XItemListener //------------------------------------------------------------------------------ -void SAL_CALL FmXFormController::itemStateChanged(const ItemEvent& rEvent) throw( RuntimeException ) +void SAL_CALL FmXFormController::itemStateChanged(const ItemEvent& /*rEvent*/) throw( RuntimeException ) { OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" ); - if (!m_bModified) - onModify( rEvent.Source ); + impl_onModify(); } // XModificationBroadcaster @@ -1322,33 +1321,41 @@ void FmXFormController::removeModifyListener(const Reference< XModifyListener > // XModificationListener //------------------------------------------------------------------------------ -void FmXFormController::modified(const EventObject& rEvent) throw( RuntimeException ) +void FmXFormController::modified( const EventObject& _rEvent ) throw( RuntimeException ) { OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" ); - if (!m_bModified) - onModify( rEvent.Source ); + + try + { + if ( _rEvent.Source != m_xActiveControl ) + { // let this control grab the focus + // (this case may happen if somebody moves the scroll wheel of the mouse over a control + // which does not have the focus) + // 85511 - 29.05.2001 - frank.schoenheit@germany.sun.com + // + // also, it happens when an image control gets a new image by double-clicking it + // #i88458# / 2009-01-12 / frank.schoenheit@sun.com + Reference< XWindow > xControlWindow( _rEvent.Source, UNO_QUERY_THROW ); + xControlWindow->setFocus(); + } + } + catch( const Exception& ) + { + DBG_UNHANDLED_EXCEPTION(); + } + + impl_onModify(); } //------------------------------------------------------------------------------ -void FmXFormController::onModify( const Reference< XInterface >& _rxControl ) +void FmXFormController::impl_onModify() { OSL_ENSURE( !impl_isDisposed_nofail(), "FmXFormController: already disposed!" ); - if (!m_bModified) + { ::osl::MutexGuard aGuard( m_aMutex ); - m_bModified = sal_True; - - } - - Reference< XControl > xSourceControl(_rxControl, UNO_QUERY); - if (xSourceControl.get() != m_xCurrentControl.get()) - { // let this control grab the focus - // (this case may happen if somebody moves the scroll wheel of the mouse over a control - // which does not have the focus) - // 85511 - 29.05.2001 - frank.schoenheit@germany.sun.com - Reference< XWindow > xControlWindow(_rxControl, UNO_QUERY); - if (xControlWindow.is()) - xControlWindow->setFocus(); + if ( !m_bModified ) + m_bModified = sal_True; } EventObject aEvt(static_cast<cppu::OWeakObject*>(this)); @@ -1980,9 +1987,7 @@ namespace } else if ( _rxControl.is() ) { - xBound = Reference< XBoundComponent >( _rxControl->getModel(), UNO_QUERY ); - - Reference< XPropertySet > xModelProps( xBound, UNO_QUERY ); + Reference< XPropertySet > xModelProps( _rxControl->getModel(), UNO_QUERY ); if ( xModelProps.is() && ::comphelper::hasProperty( FM_PROP_BOUNDFIELD, xModelProps ) ) { Reference< XPropertySet > xField; diff --git a/svx/source/form/fmpgeimp.cxx b/svx/source/form/fmpgeimp.cxx index 29fc384674ac..b50c72fd261c 100644 --- a/svx/source/form/fmpgeimp.cxx +++ b/svx/source/form/fmpgeimp.cxx @@ -32,31 +32,25 @@ #include "precompiled_svx.hxx" #include "svxerr.hxx" #include "fmpgeimp.hxx" -#include <com/sun/star/sdb/CommandType.hpp> -#include <com/sun/star/io/XObjectInputStream.hpp> -#include <com/sun/star/io/XPersistObject.hpp> -#include <com/sun/star/io/XObjectOutputStream.hpp> -#include <com/sun/star/io/XActiveDataSink.hpp> -#include <com/sun/star/io/XActiveDataSource.hpp> -#include <com/sun/star/io/XMarkableStream.hpp> -#include <sfx2/objsh.hxx> #include "fmundo.hxx" #include "fmtools.hxx" -#ifndef _SVX_FMPROP_HRC #include "fmprop.hrc" -#endif -#include <svx/fmglob.hxx> #include "fmservs.hxx" - -// #include "fmstream.hxx" #include "fmobj.hxx" +#include "svditer.hxx" +#include "fmresids.hrc" +#include "dbtoolsclient.hxx" +#include "treevisitor.hxx" + +#include <com/sun/star/sdb/CommandType.hpp> +#include <com/sun/star/util/XCloneable.hpp> + +#include <sfx2/objsh.hxx> +#include <svx/fmglob.hxx> #include <svx/fmpage.hxx> #include <svx/fmmodel.hxx> #include <tools/resid.hxx> #include <tools/diagnose_ex.h> -#include "svditer.hxx" - -#include "fmresids.hrc" #include <tools/shl.hxx> #include <vcl/stdtext.hxx> #include <svx/dialmgr.hxx> @@ -64,7 +58,6 @@ #include <comphelper/uno3.hxx> #include <comphelper/types.hxx> #include <unotools/streamwrap.hxx> -#include "dbtoolsclient.hxx" using namespace ::com::sun::star::uno; using namespace ::com::sun::star::lang; @@ -73,6 +66,8 @@ using namespace ::com::sun::star::sdb; using namespace ::com::sun::star::container; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::form; +using ::com::sun::star::util::XCloneable; +using ::com::sun::star::awt::XControlModel; using namespace ::svxform; DBG_NAME(FmFormPageImpl) @@ -86,54 +81,159 @@ FmFormPageImpl::FmFormPageImpl(FmFormPage* _pPage) } //------------------------------------------------------------------------------ +namespace +{ + typedef Reference< XInterface > FormComponent; + + class FormComponentInfo + { + public: + size_t childCount( const FormComponent& _component ) const + { + Reference< XIndexAccess > xContainer( _component, UNO_QUERY ); + if ( xContainer.is() ) + return xContainer->getCount(); + return 0; + } + + FormComponent getChild( const FormComponent& _component, size_t _index ) const + { + Reference< XIndexAccess > xContainer( _component, UNO_QUERY_THROW ); + return FormComponent( xContainer->getByIndex( _index ), UNO_QUERY ); + } + }; + + typedef ::std::pair< FormComponent, FormComponent > FormComponentPair; + + class FormHierarchyComparator + { + public: + FormHierarchyComparator() + { + } + + size_t childCount( const FormComponentPair& _components ) const + { + size_t lhsCount = m_aComponentInfo.childCount( _components.first ); + size_t rhsCount = m_aComponentInfo.childCount( _components.second ); + if ( lhsCount != rhsCount ) + throw RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Found inconsistent form component hierarchies (1)!" ) ), NULL ); + return lhsCount; + } + + FormComponentPair getChild( const FormComponentPair& _components, size_t _index ) const + { + return FormComponentPair( + m_aComponentInfo.getChild( _components.first, _index ), + m_aComponentInfo.getChild( _components.second, _index ) + ); + } + private: + FormComponentInfo m_aComponentInfo; + }; + + typedef ::std::map< Reference< XControlModel >, Reference< XControlModel >, ::comphelper::OInterfaceCompare< XControlModel > > MapControlModels; + + class FormComponentAssignment + { + public: + FormComponentAssignment( MapControlModels& _out_controlModelMap ) + :m_rControlModelMap( _out_controlModelMap ) + { + } + + void process( const FormComponentPair& _component ) + { + Reference< XControlModel > lhsControlModel( _component.first, UNO_QUERY ); + Reference< XControlModel > rhsControlModel( _component.second, UNO_QUERY ); + if ( lhsControlModel.is() != rhsControlModel.is() ) + throw RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Found inconsistent form component hierarchies (2)!" ) ), NULL ); + + if ( lhsControlModel.is() ) + m_rControlModelMap[ lhsControlModel ] = rhsControlModel; + } + + private: + MapControlModels& m_rControlModelMap; + }; +} + +//------------------------------------------------------------------------------ FmFormPageImpl::FmFormPageImpl(FmFormPage* _pPage, const FmFormPageImpl& rImpl) - :pPage(_pPage) - ,m_bFirstActivation( sal_True ) - ,m_bAttemptedFormCreation( false ) + :pPage(_pPage) + ,m_bFirstActivation( sal_True ) + ,m_bAttemptedFormCreation( false ) { DBG_CTOR(FmFormPageImpl,NULL); - OSL_ENSURE( false, "FmFormPageImpl::FmFormPageImpl: I'm pretty sure the below code isn't valid anymore ..." ); - // streaming of form/controls is not a supported operation anymore, in that it is not guaranteed - // that really everything is copied. XCloneable should be used instead. + // clone the Forms collection + Reference< XCloneable > xCloneable( const_cast< FmFormPageImpl& >( rImpl ).getForms( false ), UNO_QUERY ); + if ( !xCloneable.is() ) + { + // great, nothing to do + OSL_ENSURE( !const_cast< FmFormPageImpl& >( rImpl ).getForms( false ).is(), "FmFormPageImpl::FmFormPageImpl: a non-cloneable forms container!?" ); + return; + } + try + { + m_xForms.set( xCloneable->createClone(), UNO_QUERY_THROW ); - // copy it by streaming - // creating a pipe - Reference< ::com::sun::star::io::XOutputStream > xOutPipe(::comphelper::getProcessServiceFactory()->createInstance(::rtl::OUString::createFromAscii("com.sun.star.io.Pipe")), UNO_QUERY); - Reference< ::com::sun::star::io::XInputStream > xInPipe(xOutPipe, UNO_QUERY); + // create a mapping between the original control models and their clones + MapControlModels aModelAssignment; - // creating the mark streams - Reference< ::com::sun::star::io::XInputStream > xMarkIn(::comphelper::getProcessServiceFactory()->createInstance(::rtl::OUString::createFromAscii("com.sun.star.io.MarkableInputStream")), UNO_QUERY); - Reference< ::com::sun::star::io::XActiveDataSink > xMarkSink(xMarkIn, UNO_QUERY); + typedef TreeVisitor< FormComponentPair, FormHierarchyComparator, FormComponentAssignment > FormComponentVisitor; + FormComponentVisitor aVisitor = FormComponentVisitor( FormHierarchyComparator() ); - Reference< ::com::sun::star::io::XOutputStream > xMarkOut(::comphelper::getProcessServiceFactory()->createInstance(::rtl::OUString::createFromAscii("com.sun.star.io.MarkableOutputStream")), UNO_QUERY); - Reference< ::com::sun::star::io::XActiveDataSource > xMarkSource(xMarkOut, UNO_QUERY); + FormComponentAssignment aAssignmentProcessor( aModelAssignment ); + aVisitor.process( FormComponentPair( xCloneable, m_xForms ), aAssignmentProcessor ); - // connect pipe and sink - Reference< ::com::sun::star::io::XActiveDataSink > xSink(::comphelper::getProcessServiceFactory()->createInstance(::rtl::OUString::createFromAscii("com.sun.star.io.ObjectInputStream")), UNO_QUERY); + // assign the cloned models to their SdrObjects + SdrObjListIter aForeignIter( *rImpl.pPage ); + SdrObjListIter aOwnIter( *pPage ); - // connect pipe and source - Reference< ::com::sun::star::io::XActiveDataSource > xSource(::comphelper::getProcessServiceFactory()->createInstance(::rtl::OUString::createFromAscii("com.sun.star.io.ObjectOutputStream")), UNO_QUERY); + OSL_ENSURE( aForeignIter.IsMore() == aOwnIter.IsMore(), "FmFormPageImpl::FmFormPageImpl: inconsistent number of objects (1)!" ); + while ( aForeignIter.IsMore() && aOwnIter.IsMore() ) + { + FmFormObj* pForeignObj = dynamic_cast< FmFormObj* >( aForeignIter.Next() ); + FmFormObj* pOwnObj = dynamic_cast< FmFormObj* >( aOwnIter.Next() ); - Reference< ::com::sun::star::io::XObjectOutputStream > xOutStrm(xSource, UNO_QUERY); - Reference< ::com::sun::star::io::XObjectInputStream > xInStrm(xSink, UNO_QUERY); + bool bForeignIsForm = pForeignObj && ( pForeignObj->GetObjInventor() == FmFormInventor ); + bool bOwnIsForm = pOwnObj && ( pOwnObj->GetObjInventor() == FmFormInventor ); - if (xMarkSink.is() && xMarkSource.is() && xSink.is() && xSource.is() && xOutStrm.is() && xInStrm.is()) + if ( bForeignIsForm != bOwnIsForm ) + { + OSL_ENSURE( false, "FmFormPageImpl::FmFormPageImpl: inconsistent ordering of objects!" ); + // don't attempt to do further assignments, something's completely messed up + break; + } + if ( !bForeignIsForm ) + // no form control -> next round + continue; + + Reference< XControlModel > xForeignModel( pForeignObj->GetUnoControlModel() ); + OSL_ENSURE( xForeignModel.is(), "FmFormPageImpl::FmFormPageImpl: control shape without control!" ); + if ( !xForeignModel.is() ) + // the SdrObject does not have a UNO Control Model. This is pathological, but well ... So the cloned + // SdrObject will also not have a UNO Control Model. + continue; + + OSL_ENSURE( !pOwnObj->GetUnoControlModel().is(), "FmFormPageImpl::FmFormPageImpl: there already is a control model for the target object!" ); + + MapControlModels::const_iterator assignment = aModelAssignment.find( xForeignModel ); + OSL_ENSURE( assignment != aModelAssignment.end(), "FmFormPageImpl::FmFormPageImpl: no clone found for this model!" ); + if ( assignment == aModelAssignment.end() ) + // the source SdrObject has a model, but it is not part of the model hierarchy in rImpl.getForms(). + // Pathological, too ... + continue; + + pOwnObj->SetUnoControlModel( assignment->second ); + } + OSL_ENSURE( aForeignIter.IsMore() == aOwnIter.IsMore(), "FmFormPageImpl::FmFormPageImpl: inconsistent number of objects (2)!" ); + } + catch( const Exception& ) { - xMarkSink->setInputStream(xInPipe); - xMarkSource->setOutputStream(xOutPipe); - xSink->setInputStream(xMarkIn); - xSource->setOutputStream(xMarkOut); - - // write the objects to source - rImpl.write(xOutStrm); - xOutStrm->closeOutput(); - - // read them - read(xInStrm); - xInStrm->closeInput(); + DBG_UNHANDLED_EXCEPTION(); } - // what to do else ? } //------------------------------------------------------------------------------ @@ -458,6 +558,17 @@ Reference< XForm > FmFormPageImpl::findFormForDataSource( //------------------------------------------------------------------------------ ::rtl::OUString FmFormPageImpl::setUniqueName(const Reference< XFormComponent > & xFormComponent, const Reference< XForm > & xControls) { +#if OSL_DEBUG_LEVEL > 0 + try + { + Reference< XChild > xChild( xFormComponent, UNO_QUERY_THROW ); + OSL_ENSURE( !xChild->getParent().is(), "FmFormPageImpl::setUniqueName: to be called before insertion!" ); + } + catch( const Exception& ) + { + DBG_UNHANDLED_EXCEPTION(); + } +#endif ::rtl::OUString sName; Reference< ::com::sun::star::beans::XPropertySet > xSet(xFormComponent, UNO_QUERY); if (xSet.is()) @@ -554,89 +665,3 @@ UniString FmFormPageImpl::getDefaultName( sal_Int16 _nClassId, const Reference< return sName; } -//------------------------------------------------------------------------------ -void FmFormPageImpl::write(const Reference< ::com::sun::star::io::XObjectOutputStream > & xOutStrm) const -{ - Reference< ::com::sun::star::io::XMarkableStream > xMarkStrm(xOutStrm, UNO_QUERY); - if (!xMarkStrm.is()) - return; // exception - - // sortieren der objectlist nach der Reihenfolge - FmObjectList aList; - fillList(aList, *pPage, sal_True); - - // schreiben aller forms - Reference< ::com::sun::star::io::XPersistObject > xAsPersist( const_cast< FmFormPageImpl* >( this )->getForms(), UNO_QUERY); - if (xAsPersist.is()) - xAsPersist->write(xOutStrm); - // don't use the writeObject of the stream, as this wouldn't be compatible with older documents - - // objectliste einfuegen - sal_Int32 nLength = aList.Count(); - - // schreiben der laenge - xOutStrm->writeLong(nLength); - - for (sal_Int32 i = 0; i < nLength; i++) - { - // schreiben des Objects mit Marke - // Marke um an den Anfang zu springen - Reference< ::com::sun::star::io::XPersistObject > xObj(aList.GetObject(i)->GetUnoControlModel(), UNO_QUERY); - if (xObj.is()) - { - xOutStrm->writeObject(xObj); - } - else - { - ;// exception - } - } -} - -//------------------------------------------------------------------------------ -void FmFormPageImpl::read(const Reference< ::com::sun::star::io::XObjectInputStream > & xInStrm) -{ - Reference< ::com::sun::star::io::XMarkableStream > xMarkStrm(xInStrm, UNO_QUERY); - if (!xMarkStrm.is()) - return; // exception - - // sortieren der objectlist nach der Reihenfolge - FmObjectList aList; - fillList(aList, *pPage, sal_False); - - // lesen aller forms - Reference< ::com::sun::star::io::XPersistObject > xAsPersist( getForms(), UNO_QUERY ); - if (xAsPersist.is()) - xAsPersist->read(xInStrm); - // don't use the readObject of the stream, as this wouldn't be compatible with older documents - - // Zuordnung der Formobjekte zu den FormComponents - sal_Int32 nLength = xInStrm->readLong(); - DBG_ASSERT(nLength == (sal_Int32) aList.Count(), "Fehler beim Lesen der UnoModels"); - for (sal_Int32 i = 0; i < nLength; i++) - { - Reference< ::com::sun::star::awt::XControlModel > xRef(xInStrm->readObject(), UNO_QUERY); - if (i < (sal_Int32)aList.Count()) - aList.GetObject(i)->SetUnoControlModel(xRef); - } -} - -//------------------------------------------------------------------------------ -void FmFormPageImpl::fillList(FmObjectList& rList, const SdrObjList& rObjList, sal_Bool bConnected) const -{ - SdrObjListIter aIter(rObjList); - while (aIter.IsMore()) - { - SdrObject* pObj = aIter.Next(); - if (pObj && pObj->GetObjInventor() == FmFormInventor) - { - FmFormObj* pFormObj = PTR_CAST(FmFormObj, pObj); - DBG_ASSERT(!bConnected || pFormObj->GetUnoControlModel().is(), "Controlshape ohne Control"); - if (!bConnected || pFormObj->GetUnoControlModel().is()) - rList.Insert(pFormObj, LIST_APPEND); - - } - } -} - - diff --git a/svx/source/form/fmshell.cxx b/svx/source/form/fmshell.cxx index 529646e2fea1..ccdfb2b1af39 100644 --- a/svx/source/form/fmshell.cxx +++ b/svx/source/form/fmshell.cxx @@ -317,37 +317,37 @@ sal_uInt16 FmFormShell::PrepareClose(sal_Bool bUI, sal_Bool bForBrowsing) { const ::svx::ControllerFeatures& rController = GetImpl()->getActiveControllerFeatures(); if ( rController->commitCurrentControl() ) - { - sal_Bool bModified = rController->isModifiedRow(); - - if ( bModified && bUI ) { - QueryBox aQry(NULL, SVX_RES(RID_QRY_SAVEMODIFIED)); - if (bForBrowsing) - aQry.AddButton(SVX_RES(RID_STR_NEW_TASK), RET_NEWTASK, - BUTTONDIALOG_DEFBUTTON | BUTTONDIALOG_FOCUSBUTTON); + sal_Bool bModified = rController->isModifiedRow(); - switch (aQry.Execute()) + if ( bModified && bUI ) { - case RET_NO: - bModified = sal_False; - GetImpl()->didPrepareClose( sal_True ); - break; - - case RET_CANCEL: - return sal_False; - - case RET_NEWTASK: - return RET_NEWTASK; + QueryBox aQry(NULL, SVX_RES(RID_QRY_SAVEMODIFIED)); + if (bForBrowsing) + aQry.AddButton(SVX_RES(RID_STR_NEW_TASK), RET_NEWTASK, + BUTTONDIALOG_DEFBUTTON | BUTTONDIALOG_FOCUSBUTTON); + + switch (aQry.Execute()) + { + case RET_NO: + bModified = sal_False; + GetImpl()->didPrepareClose( sal_True ); + break; + + case RET_CANCEL: + return sal_False; + + case RET_NEWTASK: + return RET_NEWTASK; + } + + if ( bModified ) + bResult = rController->commitCurrentRecord( ); } - - if ( bModified ) - bResult = rController->commitCurrentRecord( ); } } } } - } return bResult; } diff --git a/svx/source/form/fmshimp.cxx b/svx/source/form/fmshimp.cxx index 1ad30e5fd78f..c7094fb9562e 100644 --- a/svx/source/form/fmshimp.cxx +++ b/svx/source/form/fmshimp.cxx @@ -1970,7 +1970,8 @@ bool FmXFormShell::setCurrentSelection( const InterfaceBag& _rSelection ) } } - impl_updateCurrentForm( xNewCurrentForm ); + if ( !m_aCurrentSelection.empty() ) + impl_updateCurrentForm( xNewCurrentForm ); // ensure some slots are updated for ( size_t i = 0; i < sizeof( SelObjectSlotMap ) / sizeof( SelObjectSlotMap[0] ); ++i ) @@ -2561,6 +2562,10 @@ void FmXFormShell::RemoveElement(const Reference< XInterface>& Element) RemoveElement(xElement); } } + + InterfaceBag::iterator wasSelectedPos = m_aCurrentSelection.find( Element ); + if ( wasSelectedPos != m_aCurrentSelection.end() ) + m_aCurrentSelection.erase( wasSelectedPos ); } //------------------------------------------------------------------------------ diff --git a/svx/source/form/fmstring.src b/svx/source/form/fmstring.src index b8f88c128a81..2572c2ed2239 100644 --- a/svx/source/form/fmstring.src +++ b/svx/source/form/fmstring.src @@ -583,3 +583,7 @@ String RID_STR_ALREADYEXISTOVERWRITE { Text [ en-US ] = "The file already exists. Overwrite?" ; }; +String RID_STR_OBJECT_LABEL +{ + Text [ en-US ] = "#object# label"; +}; diff --git a/svx/source/form/fmvwimp.cxx b/svx/source/form/fmvwimp.cxx index d696f84b0b44..2c3858824ffb 100644 --- a/svx/source/form/fmvwimp.cxx +++ b/svx/source/form/fmvwimp.cxx @@ -1084,10 +1084,10 @@ namespace rPage.GetImpl()->findPlaceInFormComponentHierarchy( xFormComponent, _rxDataSource, _rDataSourceName, _rCommand, _nCommandType ), UNO_SET_THROW ); + rPage.GetImpl()->setUniqueName( xFormComponent, xTargetForm ); + Reference< XIndexContainer > xFormAsContainer( xTargetForm, UNO_QUERY_THROW ); xFormAsContainer->insertByIndex( xFormAsContainer->getCount(), makeAny( xFormComponent ) ); - - rPage.GetImpl()->setUniqueName( xFormComponent, xTargetForm ); } } @@ -1287,12 +1287,16 @@ SdrObject* FmXFormView::implCreateFieldControl( const ::svx::ODataAccessDescript } ////////////////////////////////////////////////////////////////////// - // Objekte gruppieren + // group objects + bool bCheckbox = ( OBJ_FM_CHECKBOX == nOBJID ); + OSL_ENSURE( !bCheckbox || !pLabel, "FmXFormView::implCreateFieldControl: why was there a label created for a check box?" ); + if ( bCheckbox ) + return pControl; + SdrObjGroup* pGroup = new SdrObjGroup(); SdrObjList* pObjList = pGroup->GetSubList(); - pObjList->InsertObject(pLabel); - pObjList->InsertObject(pControl); - + pObjList->InsertObject( pLabel ); + pObjList->InsertObject( pControl ); if ( bDateNTimeField ) { // so far we created a date field only, but we also need a time field @@ -1311,7 +1315,7 @@ SdrObject* FmXFormView::implCreateFieldControl( const ::svx::ODataAccessDescript } catch(const Exception&) { - DBG_ERROR("FmXFormView::implCreateFieldControl: caught an exception while creating the control !"); + DBG_UNHANDLED_EXCEPTION(); } @@ -1331,7 +1335,6 @@ SdrObject* FmXFormView::implCreateXFormsControl( const ::svx::OXFormsDescriptor try { // determine the table/query field which we should create a control for - Reference< XPropertySet > xField; Reference< XNumberFormats > xNumberFormats; ::rtl::OUString sLabelPostfix = _rDesc.szName; @@ -1382,7 +1385,7 @@ SdrObject* FmXFormView::implCreateXFormsControl( const ::svx::OXFormsDescriptor { SdrUnoObj* pLabel( NULL ); SdrUnoObj* pControl( NULL ); - if ( !createControlLabelPair( *pOutDev, 0, 0, xField, xNumberFormats, nOBJID, sLabelPostfix, + if ( !createControlLabelPair( *pOutDev, 0, 0, NULL, xNumberFormats, nOBJID, sLabelPostfix, pLabel, pControl ) ) { @@ -1398,6 +1401,11 @@ SdrObject* FmXFormView::implCreateXFormsControl( const ::svx::OXFormsDescriptor if ( xBindableValue.is() ) xBindableValue->setValueBinding(xValueBinding); + bool bCheckbox = ( OBJ_FM_CHECKBOX == nOBJID ); + OSL_ENSURE( !bCheckbox || !pLabel, "FmXFormView::implCreateXFormsControl: why was there a label created for a check box?" ); + if ( bCheckbox ) + return pControl; + ////////////////////////////////////////////////////////////////////// // group objects SdrObjGroup* pGroup = new SdrObjGroup(); @@ -1459,12 +1467,14 @@ bool FmXFormView::createControlLabelPair( OutputDevice& _rOutDev, sal_Int32 _nXO return false; // insert the control model(s) into the form component hierachy - lcl_insertIntoFormComponentHierarchy_throw( *m_pView, *_rpLabel, _rxDataSource, _rDataSourceName, _rCommand, _nCommandType ); + if ( _rpLabel ) + lcl_insertIntoFormComponentHierarchy_throw( *m_pView, *_rpLabel, _rxDataSource, _rDataSourceName, _rCommand, _nCommandType ); lcl_insertIntoFormComponentHierarchy_throw( *m_pView, *_rpControl, _rxDataSource, _rDataSourceName, _rCommand, _nCommandType ); // some context-dependent initializations FormControlFactory aControlFactory( m_aContext ); - aControlFactory.initializeControlModel( impl_getDocumentType(), *_rpLabel ); + if ( _rpLabel ) + aControlFactory.initializeControlModel( impl_getDocumentType(), *_rpLabel ); aControlFactory.initializeControlModel( impl_getDocumentType(), *_rpControl ); return true; @@ -1487,17 +1497,7 @@ bool FmXFormView::createControlLabelPair( const ::comphelper::ComponentContext& aFieldName >>= sFieldName; } - // the label - ::std::auto_ptr< SdrUnoObj > pLabel( dynamic_cast< SdrUnoObj* >( - SdrObjFactory::MakeNewObject( _nInventor, _nLabelObjectID, _pLabelPage, _pModel ) ) ); - OSL_ENSURE( pLabel.get(), "FmXFormView::createControlLabelPair: could not create the label!" ); - if ( !pLabel.get() ) - return false; - - Reference< XPropertySet > xLabelSet( pLabel->GetUnoControlModel(), UNO_QUERY ); - xLabelSet->setPropertyValue( FM_PROP_LABEL, makeAny( sFieldName + _rFieldPostfix ) ); - - // positionieren unter Beachtung der Einstellungen des Ziel-Output-Devices + // calculate the positions, respecting the settings of the target device ::Size aTextSize( _rOutDev.GetTextWidth(sFieldName + _rFieldPostfix), _rOutDev.GetTextHeight() ); MapMode eTargetMode( _rOutDev.GetMapMode() ), @@ -1513,13 +1513,38 @@ bool FmXFormView::createControlLabelPair( const ::comphelper::ComponentContext& aRealSize.Width() = std::max(aRealSize.Width(), aDefTxtSize.Width()); aRealSize.Height()= aDefSize.Height(); - // je nach Skalierung des Zieldevices muss die Groesse noch normiert werden (#53523#) + // adjust to scaling of the target device (#53523#) aRealSize.Width() = long(Fraction(aRealSize.Width(), 1) * eTargetMode.GetScaleX()); aRealSize.Height() = long(Fraction(aRealSize.Height(), 1) * eTargetMode.GetScaleY()); - pLabel->SetLogicRect( ::Rectangle( - _rOutDev.LogicToLogic( ::Point( _nXOffsetMM, _nYOffsetMM ), eSourceMode, eTargetMode ), - _rOutDev.LogicToLogic( aRealSize, eSourceMode, eTargetMode ) - ) ); + + // for boolean fields, we do not create a label, but just a checkbox + bool bNeedLabel = ( _nControlObjectID != OBJ_FM_CHECKBOX ); + + // the label + ::std::auto_ptr< SdrUnoObj > pLabel; + Reference< XPropertySet > xLabelModel; + if ( bNeedLabel ) + { + pLabel.reset( dynamic_cast< SdrUnoObj* >( + SdrObjFactory::MakeNewObject( _nInventor, _nLabelObjectID, _pLabelPage, _pModel ) ) ); + OSL_ENSURE( pLabel.get(), "FmXFormView::createControlLabelPair: could not create the label!" ); + if ( !pLabel.get() ) + return false; + + xLabelModel.set( pLabel->GetUnoControlModel(), UNO_QUERY ); + if ( xLabelModel.is() ) + { + xLabelModel->setPropertyValue( FM_PROP_LABEL, makeAny( sFieldName + _rFieldPostfix ) ); + String sObjectLabel( SVX_RES( RID_STR_OBJECT_LABEL ) ); + sObjectLabel.SearchAndReplaceAllAscii( "#object#", sFieldName ); + xLabelModel->setPropertyValue( FM_PROP_NAME, makeAny( ::rtl::OUString( sObjectLabel ) ) ); + } + + pLabel->SetLogicRect( ::Rectangle( + _rOutDev.LogicToLogic( ::Point( _nXOffsetMM, _nYOffsetMM ), eSourceMode, eTargetMode ), + _rOutDev.LogicToLogic( aRealSize, eSourceMode, eTargetMode ) + ) ); + } // the control ::std::auto_ptr< SdrUnoObj > pControl( dynamic_cast< SdrUnoObj* >( @@ -1532,21 +1557,29 @@ bool FmXFormView::createControlLabelPair( const ::comphelper::ComponentContext& if ( !xControlSet.is() ) return false; - // position - ::Size szControlSize; - if (DataType::BIT == nDataType || nDataType == DataType::BOOLEAN ) - szControlSize = aDefSize; - else if (OBJ_FM_IMAGECONTROL == _nControlObjectID || DataType::LONGVARCHAR == nDataType || DataType::LONGVARBINARY == nDataType ) - szControlSize = aDefImageSize; - else - szControlSize = aDefSize; + // size of the control + ::Size aControlSize( aDefSize ); + switch ( nDataType ) + { + case DataType::BIT: + case DataType::BOOLEAN: + aControlSize = aDefSize; + break; + case DataType::LONGVARCHAR: + case DataType::LONGVARBINARY: + aControlSize = aDefImageSize; + break; + } + + if ( OBJ_FM_IMAGECONTROL == _nControlObjectID ) + aControlSize = aDefImageSize; + + aControlSize.Width() = long(Fraction(aControlSize.Width(), 1) * eTargetMode.GetScaleX()); + aControlSize.Height() = long(Fraction(aControlSize.Height(), 1) * eTargetMode.GetScaleY()); - // normieren wie oben - szControlSize.Width() = long(Fraction(szControlSize.Width(), 1) * eTargetMode.GetScaleX()); - szControlSize.Height() = long(Fraction(szControlSize.Height(), 1) * eTargetMode.GetScaleY()); pControl->SetLogicRect( ::Rectangle( _rOutDev.LogicToLogic( ::Point( aRealSize.Width() + _nXOffsetMM, _nYOffsetMM ), eSourceMode, eTargetMode ), - _rOutDev.LogicToLogic( szControlSize, eSourceMode, eTargetMode ) + _rOutDev.LogicToLogic( aControlSize, eSourceMode, eTargetMode ) ) ); // some initializations @@ -1554,8 +1587,16 @@ bool FmXFormView::createControlLabelPair( const ::comphelper::ComponentContext& if ( aFieldName.hasValue() ) { - xControlSet->setPropertyValue(FM_PROP_CONTROLSOURCE, aFieldName); - xControlSet->setPropertyValue(FM_PROP_NAME, aFieldName); + xControlSet->setPropertyValue( FM_PROP_CONTROLSOURCE, aFieldName ); + xControlSet->setPropertyValue( FM_PROP_NAME, aFieldName ); + if ( !bNeedLabel ) + { + // no dedicated label control => use the label property + if ( xControlPropInfo->hasPropertyByName( FM_PROP_LABEL ) ) + xControlSet->setPropertyValue( FM_PROP_LABEL, makeAny( sFieldName + _rFieldPostfix ) ); + else + OSL_ENSURE( false, "FmXFormView::createControlLabelPair: can't set a label for the control!" ); + } } if ( nDataType == DataType::LONGVARCHAR && xControlPropInfo->hasPropertyByName( FM_PROP_MULTILINE ) ) @@ -1564,13 +1605,11 @@ bool FmXFormView::createControlLabelPair( const ::comphelper::ComponentContext& } // announce the label to the control - if (xControlPropInfo->hasPropertyByName(FM_PROP_CONTROLLABEL)) + if ( xControlPropInfo->hasPropertyByName( FM_PROP_CONTROLLABEL ) && xLabelModel.is() ) { - // (try-catch as the control may refuse a model without the right service name - which we don't know - // usually a fixed text we use as label should be accepted, but to be sure ....) try { - xControlSet->setPropertyValue(FM_PROP_CONTROLLABEL, makeAny(xLabelSet)); + xControlSet->setPropertyValue( FM_PROP_CONTROLLABEL, makeAny( xLabelModel ) ); } catch( const Exception& ) { @@ -1578,8 +1617,11 @@ bool FmXFormView::createControlLabelPair( const ::comphelper::ComponentContext& } } - FormControlFactory aControlFactory( _rContext ); - aControlFactory.initializeFieldDependentProperties( _rxField, xControlSet, _rxNumberFormats ); + if ( _rxField.is() ) + { + FormControlFactory aControlFactory( _rContext ); + aControlFactory.initializeFieldDependentProperties( _rxField, xControlSet, _rxNumberFormats ); + } _rpLabel = pLabel.release(); _rpControl = pControl.release(); diff --git a/svx/source/form/formcontrolling.cxx b/svx/source/form/formcontrolling.cxx index f01301bafea3..668267e14194 100644 --- a/svx/source/form/formcontrolling.cxx +++ b/svx/source/form/formcontrolling.cxx @@ -1,590 +1,608 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: formcontrolling.cxx,v $ - * $Revision: 1.13 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_svx.hxx" - -#include "formcontrolling.hxx" -#include "fmurl.hxx" -#include <svx/svxids.hrc> -#include "fmprop.hrc" -#include "fmtools.hxx" - -/** === begin UNO includes === **/ -#include <com/sun/star/form/runtime/FormOperations.hpp> -#include <com/sun/star/form/runtime/FormFeature.hpp> -#include <com/sun/star/beans/XPropertySet.hpp> -/** === end UNO includes === **/ - -#include <tools/diagnose_ex.h> -#include <cppuhelper/exc_hlp.hxx> -#include <osl/diagnose.h> - -#include <functional> -#include <algorithm> - -//........................................................................ -namespace svx -{ -//........................................................................ - - using namespace ::svxform; - /** === begin UNO using === **/ - using ::com::sun::star::uno::Reference; - using ::com::sun::star::lang::XMultiServiceFactory; - using ::com::sun::star::form::XFormController; - using ::com::sun::star::form::XForm; - using ::com::sun::star::form::runtime::FormOperations; - using ::com::sun::star::uno::Exception; - using ::com::sun::star::sdbc::XRowSet; - using ::com::sun::star::form::runtime::FeatureState; - using ::com::sun::star::uno::Any; - using ::com::sun::star::uno::Sequence; - using ::com::sun::star::beans::NamedValue; - using ::com::sun::star::uno::RuntimeException; - using ::com::sun::star::beans::XPropertySet; - using ::com::sun::star::uno::UNO_QUERY_THROW; - using ::com::sun::star::sdbc::SQLException; - /** === end UNO using === **/ - namespace FormFeature = ::com::sun::star::form::runtime::FormFeature; - - //==================================================================== - //= FeatureSlotTranslation - //==================================================================== - namespace - { - struct FeatureDescription - { - ::rtl::OUString sURL; // the URL - sal_Int32 nSlotId; // the SFX-compatible slot ID - sal_Int16 nFormFeature; // the css.form.runtime.FormFeature ID - }; - typedef ::std::vector< FeatureDescription > FeatureDescriptions; - - //................................................................ - const FeatureDescriptions& getFeatureDescriptions() - { - static FeatureDescriptions s_aFeatureDescriptions; - if ( s_aFeatureDescriptions.empty() ) - { - ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); - if ( s_aFeatureDescriptions.empty() ) - { - FeatureDescription aDescriptions[] = { - { FMURL_FORM_POSITION, SID_FM_RECORD_ABSOLUTE, FormFeature::MoveAbsolute }, - { FMURL_FORM_RECORDCOUNT, SID_FM_RECORD_TOTAL, FormFeature::TotalRecords }, - { FMURL_RECORD_MOVEFIRST, SID_FM_RECORD_FIRST, FormFeature::MoveToFirst }, - { FMURL_RECORD_MOVEPREV, SID_FM_RECORD_PREV, FormFeature::MoveToPrevious }, - { FMURL_RECORD_MOVENEXT, SID_FM_RECORD_NEXT, FormFeature::MoveToNext }, - { FMURL_RECORD_MOVELAST, SID_FM_RECORD_LAST, FormFeature::MoveToLast }, - { FMURL_RECORD_MOVETONEW, SID_FM_RECORD_NEW, FormFeature::MoveToInsertRow }, - { FMURL_RECORD_SAVE, SID_FM_RECORD_SAVE, FormFeature::SaveRecordChanges }, - { FMURL_RECORD_DELETE, SID_FM_RECORD_DELETE, FormFeature::DeleteRecord }, - { FMURL_FORM_REFRESH, SID_FM_REFRESH, FormFeature::ReloadForm }, - { FMURL_FORM_REFRESH_CURRENT_CONTROL, - SID_FM_REFRESH_FORM_CONTROL,FormFeature::RefreshCurrentControl }, - { FMURL_RECORD_UNDO, SID_FM_RECORD_UNDO, FormFeature::UndoRecordChanges }, - { FMURL_FORM_SORT_UP, SID_FM_SORTUP, FormFeature::SortAscending }, - { FMURL_FORM_SORT_DOWN, SID_FM_SORTDOWN, FormFeature::SortDescending }, - { FMURL_FORM_SORT, SID_FM_ORDERCRIT, FormFeature::InteractiveSort }, - { FMURL_FORM_AUTO_FILTER, SID_FM_AUTOFILTER, FormFeature::AutoFilter }, - { FMURL_FORM_FILTER, SID_FM_FILTERCRIT, FormFeature::InteractiveFilter }, - { FMURL_FORM_APPLY_FILTER, SID_FM_FORM_FILTERED, FormFeature::ToggleApplyFilter }, - { FMURL_FORM_REMOVE_FILTER, SID_FM_REMOVE_FILTER_SORT, FormFeature::RemoveFilterAndSort } - }; - for ( size_t i=0; i<sizeof(aDescriptions)/sizeof(aDescriptions[0]); ++i ) - s_aFeatureDescriptions.push_back( aDescriptions[i] ); - } - }; - return s_aFeatureDescriptions; - } - } - - //-------------------------------------------------------------------- - namespace - { - //................................................................ - struct MatchFeatureDescriptionByURL : public ::std::unary_function< FeatureDescription, bool > - { - const ::rtl::OUString& m_rURL; - MatchFeatureDescriptionByURL( const ::rtl::OUString& _rURL ) :m_rURL( _rURL ) { } - - bool operator()( const FeatureDescription& _compare ) - { - return m_rURL == _compare.sURL; - } - }; - - //................................................................ - struct MatchFeatureDescriptionBySlotId : public ::std::unary_function< FeatureDescription, bool > - { - sal_Int32 m_nSlotId; - MatchFeatureDescriptionBySlotId( sal_Int32 _nSlotId ) :m_nSlotId( _nSlotId ) { } - - bool operator()( const FeatureDescription& _compare ) - { - return m_nSlotId == _compare.nSlotId; - } - }; - - //................................................................ - struct MatchFeatureDescriptionByFormFeature : public ::std::unary_function< FeatureDescription, bool > - { - sal_Int32 m_nFormFeature; - MatchFeatureDescriptionByFormFeature( sal_Int32 _nFormFeature ) :m_nFormFeature( _nFormFeature ) { } - - bool operator()( const FeatureDescription& _compare ) - { - return m_nFormFeature == _compare.nFormFeature; - } - }; - - //................................................................ - struct FormFeatureToSlotId : public ::std::unary_function< sal_Int16, sal_Int32 > - { - sal_Int32 operator()( sal_Int16 _FormFeature ) - { - return FeatureSlotTranslation::getSlotIdForFormFeature( _FormFeature ); - } - }; - } - - //-------------------------------------------------------------------- - sal_Int32 FeatureSlotTranslation::getControllerFeatureSlotIdForURL( const ::rtl::OUString& _rMainURL ) - { - const FeatureDescriptions& rDescriptions( getFeatureDescriptions() ); - FeatureDescriptions::const_iterator pos = ::std::find_if( rDescriptions.begin(), rDescriptions.end(), MatchFeatureDescriptionByURL( _rMainURL ) ); - return ( pos != rDescriptions.end() ) ? pos->nSlotId : -1; - } - - //-------------------------------------------------------------------- - ::rtl::OUString FeatureSlotTranslation::getControllerFeatureURLForSlotId( sal_Int32 _nSlotId ) - { - const FeatureDescriptions& rDescriptions( getFeatureDescriptions() ); - FeatureDescriptions::const_iterator pos = ::std::find_if( rDescriptions.begin(), rDescriptions.end(), MatchFeatureDescriptionBySlotId( _nSlotId ) ); - OSL_ENSURE( pos != rDescriptions.end(), "FeatureSlotTranslation::getControllerFeatureURLForSlotId: not found!" ); - return ( pos != rDescriptions.end() ) ? pos->sURL : ::rtl::OUString(); - } - - //-------------------------------------------------------------------- - sal_Bool FeatureSlotTranslation::isFeatureURL( const ::rtl::OUString& _rMainURL ) - { - return ( _rMainURL.indexOf( FMURL_FORMSLOTS_PREFIX ) == 0 ); - } - - //-------------------------------------------------------------------- - sal_Int16 FeatureSlotTranslation::getFormFeatureForSlotId( sal_Int32 _nSlotId ) - { - const FeatureDescriptions& rDescriptions( getFeatureDescriptions() ); - FeatureDescriptions::const_iterator pos = ::std::find_if( rDescriptions.begin(), rDescriptions.end(), MatchFeatureDescriptionBySlotId( _nSlotId ) ); - OSL_ENSURE( pos != rDescriptions.end(), "FeatureSlotTranslation::getFormFeatureForSlotId: not found!" ); - return ( pos != rDescriptions.end() ) ? pos->nFormFeature : -1; - } - - //-------------------------------------------------------------------- - sal_Int32 FeatureSlotTranslation::getSlotIdForFormFeature( sal_Int16 _nFormFeature ) - { - const FeatureDescriptions& rDescriptions( getFeatureDescriptions() ); - FeatureDescriptions::const_iterator pos = ::std::find_if( rDescriptions.begin(), rDescriptions.end(), MatchFeatureDescriptionByFormFeature( _nFormFeature ) ); - OSL_ENSURE( pos != rDescriptions.end(), "FeatureSlotTranslation::getSlotIdForFormFeature: not found!" ); - return ( pos != rDescriptions.end() ) ? pos->nSlotId : -1; - } - - //==================================================================== - //= ControllerFeatures - //==================================================================== - //-------------------------------------------------------------------- - ControllerFeatures::ControllerFeatures( const Reference< XMultiServiceFactory >& _rxORB, IControllerFeatureInvalidation* _pInvalidationCallback ) - :m_aContext( _rxORB ) - ,m_pInvalidationCallback( _pInvalidationCallback ) - ,m_pImpl( NULL ) - { - } - - //-------------------------------------------------------------------- - ControllerFeatures::ControllerFeatures( const Reference< XMultiServiceFactory >& _rxORB, - const Reference< XFormController >& _rxController, IControllerFeatureInvalidation* _pInvalidationCallback ) - :m_aContext( _rxORB ) - ,m_pInvalidationCallback( _pInvalidationCallback ) - ,m_pImpl( NULL ) - { - assign( _rxController ); - } - - //-------------------------------------------------------------------- - ControllerFeatures::ControllerFeatures( const Reference< XMultiServiceFactory >& _rxORB, - const Reference< XForm >& _rxForm, IControllerFeatureInvalidation* _pInvalidationCallback ) - :m_aContext( _rxORB ) - ,m_pInvalidationCallback( _pInvalidationCallback ) - ,m_pImpl( NULL ) - { - assign( _rxForm ); - } - - //-------------------------------------------------------------------- - void ControllerFeatures::assign( const Reference< XFormController >& _rxController ) - { - dispose(); - m_pImpl = new FormControllerHelper( m_aContext, _rxController, m_pInvalidationCallback ); - m_pImpl->acquire(); - } - - //-------------------------------------------------------------------- - void ControllerFeatures::assign( const Reference< XForm >& _rxForm ) - { - dispose(); - m_pImpl = new FormControllerHelper( m_aContext, _rxForm, m_pInvalidationCallback ); - m_pImpl->acquire(); - } - - //-------------------------------------------------------------------- - ControllerFeatures::~ControllerFeatures() - { - dispose(); - } - - //-------------------------------------------------------------------- - void ControllerFeatures::dispose() - { - if ( m_pImpl ) - { - m_pImpl->dispose(); - m_pImpl->release(); - m_pImpl = NULL; - } - } - - //==================================================================== - //= FormControllerHelper - //==================================================================== - //-------------------------------------------------------------------- - FormControllerHelper::FormControllerHelper( const ::comphelper::ComponentContext& _rContext, - const Reference< XFormController >& _rxController, IControllerFeatureInvalidation* _pInvalidationCallback ) - :m_aContext( _rContext ) - ,m_pInvalidationCallback( _pInvalidationCallback ) - { - osl_incrementInterlockedCount( &m_refCount ); - try - { - m_xFormOperations = FormOperations::createWithFormController( m_aContext.getUNOContext(), _rxController ); - if ( m_xFormOperations.is() ) - m_xFormOperations->setFeatureInvalidation( this ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - osl_decrementInterlockedCount( &m_refCount ); - } - - //-------------------------------------------------------------------- - FormControllerHelper::FormControllerHelper( const ::comphelper::ComponentContext& _rContext, - const Reference< XForm >& _rxForm, IControllerFeatureInvalidation* _pInvalidationCallback ) - :m_aContext( _rContext ) - ,m_pInvalidationCallback( _pInvalidationCallback ) - { - osl_incrementInterlockedCount( &m_refCount ); - try - { - m_xFormOperations = FormOperations::createWithForm( m_aContext.getUNOContext(), _rxForm ); - if ( m_xFormOperations.is() ) - m_xFormOperations->setFeatureInvalidation( this ); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - osl_decrementInterlockedCount( &m_refCount ); - } - - //-------------------------------------------------------------------- - FormControllerHelper::~FormControllerHelper( ) - { - try - { - acquire(); - dispose(); - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - } - - //-------------------------------------------------------------------- - void FormControllerHelper::dispose() - { - if ( m_xFormOperations.is() ) - m_xFormOperations->dispose(); - m_xFormOperations.clear(); - } - - //-------------------------------------------------------------------- - sal_Bool FormControllerHelper::isEnabled( sal_Int32 _nSlotId ) const - { - if ( !m_xFormOperations.is() ) - return sal_False; - return m_xFormOperations->isEnabled( FeatureSlotTranslation::getFormFeatureForSlotId( _nSlotId ) ); - } - - //-------------------------------------------------------------------- - Reference< XRowSet > FormControllerHelper::getCursor() const - { - Reference< XRowSet > xCursor; - if ( m_xFormOperations.is() ) - xCursor = m_xFormOperations->getCursor(); - return xCursor; - } - - //-------------------------------------------------------------------- - void FormControllerHelper::getState( sal_Int32 _nSlotId, FeatureState& _rState ) const - { - if ( m_xFormOperations.is() ) - _rState = m_xFormOperations->getState( FeatureSlotTranslation::getFormFeatureForSlotId( _nSlotId ) ); - } - - //-------------------------------------------------------------------- - sal_Bool FormControllerHelper::commitCurrentControl( ) const - { - sal_Bool bSuccess = sal_False; - if ( m_xFormOperations.is() ) - bSuccess = m_xFormOperations->commitCurrentControl(); - return bSuccess; - } - - //-------------------------------------------------------------------- - sal_Bool FormControllerHelper::commitCurrentRecord() const - { - sal_Bool bSuccess = sal_False; - try - { - if ( m_xFormOperations.is() ) - { - sal_Bool bDummy( sal_False ); - bSuccess = m_xFormOperations->commitCurrentRecord( bDummy ); - } - } - catch( const Exception& ) - { - bSuccess = sal_False; - } - return bSuccess; - } - - //-------------------------------------------------------------------- - bool FormControllerHelper::moveRight( ) const - { - try - { - if ( m_xFormOperations.is() ) - { - m_xFormOperations->execute( FormFeature::MoveToNext ); - return true; - } - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - return false; - } - - //-------------------------------------------------------------------- - bool FormControllerHelper::moveLeft( ) const - { - try - { - if ( m_xFormOperations.is() ) - { - m_xFormOperations->execute( FormFeature::MoveToPrevious ); - return true; - } - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - return false; - } - - //-------------------------------------------------------------------- - void FormControllerHelper::execute( sal_Int32 _nSlotId, const ::rtl::OUString& _rParamName, const Any& _rParamValue ) const - { - if ( !m_xFormOperations.is() ) - return; - - Sequence< NamedValue > aArguments(1); - aArguments[0].Name = _rParamName; - aArguments[0].Value = _rParamValue; - - Any aError; - try - { - m_xFormOperations->executeWithArguments( FeatureSlotTranslation::getFormFeatureForSlotId( _nSlotId ), aArguments ); - } - catch ( const SQLException& ) { aError = ::cppu::getCaughtException(); } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - if ( aError.hasValue() ) - displayException( aError ); - } - - //-------------------------------------------------------------------- - void FormControllerHelper::execute( sal_Int32 _nSlotId ) const - { - if ( !m_xFormOperations.is() ) - return; - - Any aError; - try - { - m_xFormOperations->execute( FeatureSlotTranslation::getFormFeatureForSlotId( _nSlotId ) ); - } - catch ( const SQLException& ) { aError = ::cppu::getCaughtException(); } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - if ( aError.hasValue() ) - displayException( aError ); - } - - //-------------------------------------------------------------------- - void SAL_CALL FormControllerHelper::invalidateFeatures( const Sequence< ::sal_Int16 >& _Features ) throw (RuntimeException) - { - if ( !m_pInvalidationCallback ) - // nobody's interested in ... - return; - - ::std::vector< sal_Int32 > aFeatures( _Features.getLength() ); - ::std::transform( - _Features.getConstArray(), - _Features.getConstArray() + _Features.getLength(), - aFeatures.begin(), - FormFeatureToSlotId() - ); - - m_pInvalidationCallback->invalidateFeatures( aFeatures ); - } - - //-------------------------------------------------------------------- - void SAL_CALL FormControllerHelper::invalidateAllFeatures() throw (RuntimeException) - { - if ( !m_pInvalidationCallback ) - // nobody's interested in ... - return; - - // actually, it's a little bit more than the supported features, - // but on the medium term, we are to support everything listed - // here - ::std::vector< sal_Int32 > aSupportedFeatures; - sal_Int32 pSupportedFeatures[] = - { - SID_FM_RECORD_FIRST, - SID_FM_RECORD_NEXT, - SID_FM_RECORD_PREV, - SID_FM_RECORD_LAST, - SID_FM_RECORD_NEW, - SID_FM_RECORD_DELETE, - SID_FM_RECORD_ABSOLUTE, - SID_FM_RECORD_TOTAL, - SID_FM_RECORD_SAVE, - SID_FM_RECORD_UNDO, - SID_FM_REMOVE_FILTER_SORT, - SID_FM_SORTUP, - SID_FM_SORTDOWN, - SID_FM_ORDERCRIT, - SID_FM_AUTOFILTER, - SID_FM_FILTERCRIT, - SID_FM_FORM_FILTERED, - SID_FM_REFRESH, - SID_FM_REFRESH_FORM_CONTROL, - SID_FM_SEARCH, - SID_FM_FILTER_START, - SID_FM_VIEW_AS_GRID - }; - sal_Int32 nFeatureCount = sizeof( pSupportedFeatures ) / sizeof( pSupportedFeatures[ 0 ] ); - aSupportedFeatures.resize( nFeatureCount ); - ::std::copy( pSupportedFeatures, pSupportedFeatures + nFeatureCount, aSupportedFeatures.begin() ); - - m_pInvalidationCallback->invalidateFeatures( aSupportedFeatures ); - } - - //-------------------------------------------------------------------- - sal_Bool FormControllerHelper::isInsertionRow() const - { - sal_Bool bIs = sal_False; - if ( m_xFormOperations.is() ) - bIs = m_xFormOperations->isInsertionRow(); - return bIs; - } - - //-------------------------------------------------------------------- - sal_Bool FormControllerHelper::isModifiedRow() const - { - sal_Bool bIs = sal_False; - if ( m_xFormOperations.is() ) - bIs = m_xFormOperations->isModifiedRow(); - return bIs; - } - //-------------------------------------------------------------------- - bool FormControllerHelper::canDoFormFilter() const - { - if ( !m_xFormOperations.is() ) - return false; - - bool bCanDo = false; - try - { - Reference< XPropertySet > xCursorProperties( m_xFormOperations->getCursor(), UNO_QUERY_THROW ); - - bool bEscapeProcessing( false ); - OSL_VERIFY( xCursorProperties->getPropertyValue( FM_PROP_ESCAPE_PROCESSING ) >>= bEscapeProcessing ); - - ::rtl::OUString sActiveCommand; - OSL_VERIFY( xCursorProperties->getPropertyValue( FM_PROP_ACTIVECOMMAND ) >>= sActiveCommand ); - - bool bInsertOnlyForm( false ); - OSL_VERIFY( xCursorProperties->getPropertyValue( FM_PROP_INSERTONLY ) >>= bInsertOnlyForm ); - - bCanDo = bEscapeProcessing && ( sActiveCommand.getLength() > 0 ) && !bInsertOnlyForm; - } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } - return bCanDo; - } - -//........................................................................ -} // namespace svx -//........................................................................ +/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: formcontrolling.cxx,v $
+ * $Revision: 1.13 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_svx.hxx"
+
+#include "formcontrolling.hxx"
+#include "fmurl.hxx"
+#include <svx/svxids.hrc>
+#include "fmprop.hrc"
+#include "fmtools.hxx"
+
+/** === begin UNO includes === **/
+#include <com/sun/star/form/runtime/FormOperations.hpp>
+#include <com/sun/star/form/runtime/FormFeature.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/sdb/XSQLErrorBroadcaster.hpp>
+/** === end UNO includes === **/
+
+#include <tools/diagnose_ex.h>
+#include <comphelper/anytostring.hxx>
+#include <cppuhelper/exc_hlp.hxx>
+#include <osl/diagnose.h>
+
+#include <functional>
+#include <algorithm>
+
+//........................................................................
+namespace svx
+{
+//........................................................................
+
+ using namespace ::svxform;
+ /** === begin UNO using === **/
+ using ::com::sun::star::uno::Reference;
+ using ::com::sun::star::lang::XMultiServiceFactory;
+ using ::com::sun::star::form::XFormController;
+ using ::com::sun::star::form::XForm;
+ using ::com::sun::star::form::runtime::FormOperations;
+ using ::com::sun::star::uno::Exception;
+ using ::com::sun::star::sdbc::XRowSet;
+ using ::com::sun::star::form::runtime::FeatureState;
+ using ::com::sun::star::uno::Any;
+ using ::com::sun::star::uno::Sequence;
+ using ::com::sun::star::beans::NamedValue;
+ using ::com::sun::star::uno::RuntimeException;
+ using ::com::sun::star::beans::XPropertySet;
+ using ::com::sun::star::uno::UNO_QUERY_THROW;
+ using ::com::sun::star::sdbc::SQLException;
+ using ::com::sun::star::sdb::XSQLErrorBroadcaster;
+ using ::com::sun::star::sdb::SQLErrorEvent;
+ using ::com::sun::star::lang::EventObject;
+ /** === end UNO using === **/
+ namespace FormFeature = ::com::sun::star::form::runtime::FormFeature;
+
+ //====================================================================
+ //= FeatureSlotTranslation
+ //====================================================================
+ namespace
+ {
+ struct FeatureDescription
+ {
+ ::rtl::OUString sURL; // the URL
+ sal_Int32 nSlotId; // the SFX-compatible slot ID
+ sal_Int16 nFormFeature; // the css.form.runtime.FormFeature ID
+ };
+ typedef ::std::vector< FeatureDescription > FeatureDescriptions;
+
+ //................................................................
+ const FeatureDescriptions& getFeatureDescriptions()
+ {
+ static FeatureDescriptions s_aFeatureDescriptions;
+ if ( s_aFeatureDescriptions.empty() )
+ {
+ ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
+ if ( s_aFeatureDescriptions.empty() )
+ {
+ FeatureDescription aDescriptions[] = {
+ { FMURL_FORM_POSITION, SID_FM_RECORD_ABSOLUTE, FormFeature::MoveAbsolute },
+ { FMURL_FORM_RECORDCOUNT, SID_FM_RECORD_TOTAL, FormFeature::TotalRecords },
+ { FMURL_RECORD_MOVEFIRST, SID_FM_RECORD_FIRST, FormFeature::MoveToFirst },
+ { FMURL_RECORD_MOVEPREV, SID_FM_RECORD_PREV, FormFeature::MoveToPrevious },
+ { FMURL_RECORD_MOVENEXT, SID_FM_RECORD_NEXT, FormFeature::MoveToNext },
+ { FMURL_RECORD_MOVELAST, SID_FM_RECORD_LAST, FormFeature::MoveToLast },
+ { FMURL_RECORD_MOVETONEW, SID_FM_RECORD_NEW, FormFeature::MoveToInsertRow },
+ { FMURL_RECORD_SAVE, SID_FM_RECORD_SAVE, FormFeature::SaveRecordChanges },
+ { FMURL_RECORD_DELETE, SID_FM_RECORD_DELETE, FormFeature::DeleteRecord },
+ { FMURL_FORM_REFRESH, SID_FM_REFRESH, FormFeature::ReloadForm },
+ { FMURL_FORM_REFRESH_CURRENT_CONTROL,
+ SID_FM_REFRESH_FORM_CONTROL,FormFeature::RefreshCurrentControl },
+ { FMURL_RECORD_UNDO, SID_FM_RECORD_UNDO, FormFeature::UndoRecordChanges },
+ { FMURL_FORM_SORT_UP, SID_FM_SORTUP, FormFeature::SortAscending },
+ { FMURL_FORM_SORT_DOWN, SID_FM_SORTDOWN, FormFeature::SortDescending },
+ { FMURL_FORM_SORT, SID_FM_ORDERCRIT, FormFeature::InteractiveSort },
+ { FMURL_FORM_AUTO_FILTER, SID_FM_AUTOFILTER, FormFeature::AutoFilter },
+ { FMURL_FORM_FILTER, SID_FM_FILTERCRIT, FormFeature::InteractiveFilter },
+ { FMURL_FORM_APPLY_FILTER, SID_FM_FORM_FILTERED, FormFeature::ToggleApplyFilter },
+ { FMURL_FORM_REMOVE_FILTER, SID_FM_REMOVE_FILTER_SORT, FormFeature::RemoveFilterAndSort }
+ };
+ for ( size_t i=0; i<sizeof(aDescriptions)/sizeof(aDescriptions[0]); ++i )
+ s_aFeatureDescriptions.push_back( aDescriptions[i] );
+ }
+ };
+ return s_aFeatureDescriptions;
+ }
+ }
+
+ //--------------------------------------------------------------------
+ namespace
+ {
+ //................................................................
+ struct MatchFeatureDescriptionByURL : public ::std::unary_function< FeatureDescription, bool >
+ {
+ const ::rtl::OUString& m_rURL;
+ MatchFeatureDescriptionByURL( const ::rtl::OUString& _rURL ) :m_rURL( _rURL ) { }
+
+ bool operator()( const FeatureDescription& _compare )
+ {
+ return m_rURL == _compare.sURL;
+ }
+ };
+
+ //................................................................
+ struct MatchFeatureDescriptionBySlotId : public ::std::unary_function< FeatureDescription, bool >
+ {
+ sal_Int32 m_nSlotId;
+ MatchFeatureDescriptionBySlotId( sal_Int32 _nSlotId ) :m_nSlotId( _nSlotId ) { }
+
+ bool operator()( const FeatureDescription& _compare )
+ {
+ return m_nSlotId == _compare.nSlotId;
+ }
+ };
+
+ //................................................................
+ struct MatchFeatureDescriptionByFormFeature : public ::std::unary_function< FeatureDescription, bool >
+ {
+ sal_Int32 m_nFormFeature;
+ MatchFeatureDescriptionByFormFeature( sal_Int32 _nFormFeature ) :m_nFormFeature( _nFormFeature ) { }
+
+ bool operator()( const FeatureDescription& _compare )
+ {
+ return m_nFormFeature == _compare.nFormFeature;
+ }
+ };
+
+ //................................................................
+ struct FormFeatureToSlotId : public ::std::unary_function< sal_Int16, sal_Int32 >
+ {
+ sal_Int32 operator()( sal_Int16 _FormFeature )
+ {
+ return FeatureSlotTranslation::getSlotIdForFormFeature( _FormFeature );
+ }
+ };
+ }
+
+ //--------------------------------------------------------------------
+ sal_Int32 FeatureSlotTranslation::getControllerFeatureSlotIdForURL( const ::rtl::OUString& _rMainURL )
+ {
+ const FeatureDescriptions& rDescriptions( getFeatureDescriptions() );
+ FeatureDescriptions::const_iterator pos = ::std::find_if( rDescriptions.begin(), rDescriptions.end(), MatchFeatureDescriptionByURL( _rMainURL ) );
+ return ( pos != rDescriptions.end() ) ? pos->nSlotId : -1;
+ }
+
+ //--------------------------------------------------------------------
+ ::rtl::OUString FeatureSlotTranslation::getControllerFeatureURLForSlotId( sal_Int32 _nSlotId )
+ {
+ const FeatureDescriptions& rDescriptions( getFeatureDescriptions() );
+ FeatureDescriptions::const_iterator pos = ::std::find_if( rDescriptions.begin(), rDescriptions.end(), MatchFeatureDescriptionBySlotId( _nSlotId ) );
+ OSL_ENSURE( pos != rDescriptions.end(), "FeatureSlotTranslation::getControllerFeatureURLForSlotId: not found!" );
+ return ( pos != rDescriptions.end() ) ? pos->sURL : ::rtl::OUString();
+ }
+
+ //--------------------------------------------------------------------
+ sal_Bool FeatureSlotTranslation::isFeatureURL( const ::rtl::OUString& _rMainURL )
+ {
+ return ( _rMainURL.indexOf( FMURL_FORMSLOTS_PREFIX ) == 0 );
+ }
+
+ //--------------------------------------------------------------------
+ sal_Int16 FeatureSlotTranslation::getFormFeatureForSlotId( sal_Int32 _nSlotId )
+ {
+ const FeatureDescriptions& rDescriptions( getFeatureDescriptions() );
+ FeatureDescriptions::const_iterator pos = ::std::find_if( rDescriptions.begin(), rDescriptions.end(), MatchFeatureDescriptionBySlotId( _nSlotId ) );
+ OSL_ENSURE( pos != rDescriptions.end(), "FeatureSlotTranslation::getFormFeatureForSlotId: not found!" );
+ return ( pos != rDescriptions.end() ) ? pos->nFormFeature : -1;
+ }
+
+ //--------------------------------------------------------------------
+ sal_Int32 FeatureSlotTranslation::getSlotIdForFormFeature( sal_Int16 _nFormFeature )
+ {
+ const FeatureDescriptions& rDescriptions( getFeatureDescriptions() );
+ FeatureDescriptions::const_iterator pos = ::std::find_if( rDescriptions.begin(), rDescriptions.end(), MatchFeatureDescriptionByFormFeature( _nFormFeature ) );
+ OSL_ENSURE( pos != rDescriptions.end(), "FeatureSlotTranslation::getSlotIdForFormFeature: not found!" );
+ return ( pos != rDescriptions.end() ) ? pos->nSlotId : -1;
+ }
+
+ //====================================================================
+ //= ControllerFeatures
+ //====================================================================
+ //--------------------------------------------------------------------
+ ControllerFeatures::ControllerFeatures( const Reference< XMultiServiceFactory >& _rxORB, IControllerFeatureInvalidation* _pInvalidationCallback )
+ :m_aContext( _rxORB )
+ ,m_pInvalidationCallback( _pInvalidationCallback )
+ ,m_pImpl( NULL )
+ {
+ }
+
+ //--------------------------------------------------------------------
+ ControllerFeatures::ControllerFeatures( const Reference< XMultiServiceFactory >& _rxORB,
+ const Reference< XFormController >& _rxController, IControllerFeatureInvalidation* _pInvalidationCallback )
+ :m_aContext( _rxORB )
+ ,m_pInvalidationCallback( _pInvalidationCallback )
+ ,m_pImpl( NULL )
+ {
+ assign( _rxController );
+ }
+
+ //--------------------------------------------------------------------
+ ControllerFeatures::ControllerFeatures( const Reference< XMultiServiceFactory >& _rxORB,
+ const Reference< XForm >& _rxForm, IControllerFeatureInvalidation* _pInvalidationCallback )
+ :m_aContext( _rxORB )
+ ,m_pInvalidationCallback( _pInvalidationCallback )
+ ,m_pImpl( NULL )
+ {
+ assign( _rxForm );
+ }
+
+ //--------------------------------------------------------------------
+ void ControllerFeatures::assign( const Reference< XFormController >& _rxController )
+ {
+ dispose();
+ m_pImpl = new FormControllerHelper( m_aContext, _rxController, m_pInvalidationCallback );
+ m_pImpl->acquire();
+ }
+
+ //--------------------------------------------------------------------
+ void ControllerFeatures::assign( const Reference< XForm >& _rxForm )
+ {
+ dispose();
+ m_pImpl = new FormControllerHelper( m_aContext, _rxForm, m_pInvalidationCallback );
+ m_pImpl->acquire();
+ }
+
+ //--------------------------------------------------------------------
+ ControllerFeatures::~ControllerFeatures()
+ {
+ dispose();
+ }
+
+ //--------------------------------------------------------------------
+ void ControllerFeatures::dispose()
+ {
+ if ( m_pImpl )
+ {
+ m_pImpl->dispose();
+ m_pImpl->release();
+ m_pImpl = NULL;
+ }
+ }
+
+ //====================================================================
+ //= FormControllerHelper
+ //====================================================================
+ //--------------------------------------------------------------------
+ FormControllerHelper::FormControllerHelper( const ::comphelper::ComponentContext& _rContext,
+ const Reference< XFormController >& _rxController, IControllerFeatureInvalidation* _pInvalidationCallback )
+ :m_aContext( _rContext )
+ ,m_pInvalidationCallback( _pInvalidationCallback )
+ {
+ osl_incrementInterlockedCount( &m_refCount );
+ try
+ {
+ m_xFormOperations = FormOperations::createWithFormController( m_aContext.getUNOContext(), _rxController );
+ if ( m_xFormOperations.is() )
+ m_xFormOperations->setFeatureInvalidation( this );
+
+ // to prevent the controller from displaying any error messages which happen while we operate on it,
+ // we add ourself as XSQLErrorListener. By contract, a FormController displays errors if and only if
+ // no SQLErrorListeners are registered.
+ Reference< XSQLErrorBroadcaster > xErrorBroadcast( _rxController, UNO_QUERY_THROW );
+ xErrorBroadcast->addSQLErrorListener( this );
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+ osl_decrementInterlockedCount( &m_refCount );
+ }
+
+ //--------------------------------------------------------------------
+ FormControllerHelper::FormControllerHelper( const ::comphelper::ComponentContext& _rContext,
+ const Reference< XForm >& _rxForm, IControllerFeatureInvalidation* _pInvalidationCallback )
+ :m_aContext( _rContext )
+ ,m_pInvalidationCallback( _pInvalidationCallback )
+ {
+ osl_incrementInterlockedCount( &m_refCount );
+ try
+ {
+ m_xFormOperations = FormOperations::createWithForm( m_aContext.getUNOContext(), _rxForm );
+ if ( m_xFormOperations.is() )
+ m_xFormOperations->setFeatureInvalidation( this );
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+ osl_decrementInterlockedCount( &m_refCount );
+ }
+
+ //--------------------------------------------------------------------
+ FormControllerHelper::~FormControllerHelper( )
+ {
+ try
+ {
+ acquire();
+ dispose();
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void FormControllerHelper::dispose()
+ {
+ if ( m_xFormOperations.is() )
+ m_xFormOperations->dispose();
+ m_xFormOperations.clear();
+ }
+
+ //--------------------------------------------------------------------
+ sal_Bool FormControllerHelper::isEnabled( sal_Int32 _nSlotId ) const
+ {
+ if ( !m_xFormOperations.is() )
+ return sal_False;
+ return m_xFormOperations->isEnabled( FeatureSlotTranslation::getFormFeatureForSlotId( _nSlotId ) );
+ }
+
+ //--------------------------------------------------------------------
+ Reference< XRowSet > FormControllerHelper::getCursor() const
+ {
+ Reference< XRowSet > xCursor;
+ if ( m_xFormOperations.is() )
+ xCursor = m_xFormOperations->getCursor();
+ return xCursor;
+ }
+
+ //--------------------------------------------------------------------
+ void FormControllerHelper::getState( sal_Int32 _nSlotId, FeatureState& _rState ) const
+ {
+ if ( m_xFormOperations.is() )
+ _rState = m_xFormOperations->getState( FeatureSlotTranslation::getFormFeatureForSlotId( _nSlotId ) );
+ }
+
+ //--------------------------------------------------------------------
+ sal_Bool FormControllerHelper::commitCurrentControl( ) const
+ {
+ return impl_operateForm_nothrow( COMMIT_CONTROL );
+ }
+
+ //--------------------------------------------------------------------
+ sal_Bool FormControllerHelper::commitCurrentRecord() const
+ {
+ return impl_operateForm_nothrow( COMMIT_RECORD );
+ }
+
+ //--------------------------------------------------------------------
+ bool FormControllerHelper::moveRight( ) const
+ {
+ return impl_operateForm_nothrow( FormFeature::MoveToNext );
+ }
+
+ //--------------------------------------------------------------------
+ bool FormControllerHelper::moveLeft( ) const
+ {
+ return impl_operateForm_nothrow( FormFeature::MoveToPrevious );
+ }
+
+ //--------------------------------------------------------------------
+ void FormControllerHelper::execute( sal_Int32 _nSlotId, const ::rtl::OUString& _rParamName, const Any& _rParamValue ) const
+ {
+ Sequence< NamedValue > aArguments(1);
+ aArguments[0].Name = _rParamName;
+ aArguments[0].Value = _rParamValue;
+
+ impl_operateForm_nothrow( EXECUTE_ARGS, FeatureSlotTranslation::getFormFeatureForSlotId( _nSlotId ), aArguments );
+ }
+
+ //--------------------------------------------------------------------
+ bool FormControllerHelper::impl_operateForm_nothrow( const FormOperation _eWhat, const sal_Int16 _nFeature,
+ const Sequence< NamedValue >& _rArguments ) const
+ {
+ if ( !m_xFormOperations.is() )
+ return false;
+
+ Any aError;
+ bool bSuccess = false;
+ const_cast< FormControllerHelper* >( this )->m_aOperationError.clear();
+ try
+ {
+ switch ( _eWhat )
+ {
+ case COMMIT_CONTROL:
+ bSuccess = m_xFormOperations->commitCurrentControl();
+ break;
+
+ case COMMIT_RECORD:
+ {
+ sal_Bool bDummy( sal_False );
+ bSuccess = m_xFormOperations->commitCurrentRecord( bDummy );
+ }
+ break;
+
+ case EXECUTE:
+ m_xFormOperations->execute( _nFeature );
+ bSuccess = true;
+ break;
+
+ case EXECUTE_ARGS:
+ m_xFormOperations->executeWithArguments( _nFeature, _rArguments );
+ bSuccess = true;
+ break;
+ }
+ }
+ catch ( const SQLException& )
+ {
+ aError = ::cppu::getCaughtException();
+ }
+ catch( const Exception& )
+ {
+ SQLException aFallbackError;
+ aFallbackError.Message = ::comphelper::anyToString( ::cppu::getCaughtException() );
+ aError <<= aFallbackError;
+ }
+
+ if ( bSuccess )
+ return true;
+
+ // display the error. Prefer the one reported in errorOccured over the one caught.
+ if ( m_aOperationError.hasValue() )
+ displayException( m_aOperationError );
+ else if ( aError.hasValue() )
+ displayException( aError );
+ else
+ OSL_ENSURE( false, "FormControllerHelper::impl_operateForm_nothrow: no success, but no error?" );
+
+ return false;
+ }
+
+ //--------------------------------------------------------------------
+ void FormControllerHelper::execute( sal_Int32 _nSlotId ) const
+ {
+ impl_operateForm_nothrow( EXECUTE, FeatureSlotTranslation::getFormFeatureForSlotId( _nSlotId ),
+ Sequence< NamedValue >() );
+ }
+
+ //--------------------------------------------------------------------
+ void SAL_CALL FormControllerHelper::invalidateFeatures( const Sequence< ::sal_Int16 >& _Features ) throw (RuntimeException)
+ {
+ if ( !m_pInvalidationCallback )
+ // nobody's interested in ...
+ return;
+
+ ::std::vector< sal_Int32 > aFeatures( _Features.getLength() );
+ ::std::transform(
+ _Features.getConstArray(),
+ _Features.getConstArray() + _Features.getLength(),
+ aFeatures.begin(),
+ FormFeatureToSlotId()
+ );
+
+ m_pInvalidationCallback->invalidateFeatures( aFeatures );
+ }
+
+ //--------------------------------------------------------------------
+ void SAL_CALL FormControllerHelper::invalidateAllFeatures() throw (RuntimeException)
+ {
+ if ( !m_pInvalidationCallback )
+ // nobody's interested in ...
+ return;
+
+ // actually, it's a little bit more than the supported features,
+ // but on the medium term, we are to support everything listed
+ // here
+ ::std::vector< sal_Int32 > aSupportedFeatures;
+ sal_Int32 pSupportedFeatures[] =
+ {
+ SID_FM_RECORD_FIRST,
+ SID_FM_RECORD_NEXT,
+ SID_FM_RECORD_PREV,
+ SID_FM_RECORD_LAST,
+ SID_FM_RECORD_NEW,
+ SID_FM_RECORD_DELETE,
+ SID_FM_RECORD_ABSOLUTE,
+ SID_FM_RECORD_TOTAL,
+ SID_FM_RECORD_SAVE,
+ SID_FM_RECORD_UNDO,
+ SID_FM_REMOVE_FILTER_SORT,
+ SID_FM_SORTUP,
+ SID_FM_SORTDOWN,
+ SID_FM_ORDERCRIT,
+ SID_FM_AUTOFILTER,
+ SID_FM_FILTERCRIT,
+ SID_FM_FORM_FILTERED,
+ SID_FM_REFRESH,
+ SID_FM_REFRESH_FORM_CONTROL,
+ SID_FM_SEARCH,
+ SID_FM_FILTER_START,
+ SID_FM_VIEW_AS_GRID
+ };
+ sal_Int32 nFeatureCount = sizeof( pSupportedFeatures ) / sizeof( pSupportedFeatures[ 0 ] );
+ aSupportedFeatures.resize( nFeatureCount );
+ ::std::copy( pSupportedFeatures, pSupportedFeatures + nFeatureCount, aSupportedFeatures.begin() );
+
+ m_pInvalidationCallback->invalidateFeatures( aSupportedFeatures );
+ }
+
+ //--------------------------------------------------------------------
+ void SAL_CALL FormControllerHelper::errorOccured( const SQLErrorEvent& _Event ) throw (RuntimeException)
+ {
+ OSL_ENSURE( !m_aOperationError.hasValue(), "FormControllerHelper::errorOccured: two errors during one operation?" );
+ m_aOperationError = _Event.Reason;
+ }
+
+ //--------------------------------------------------------------------
+ void SAL_CALL FormControllerHelper::disposing( const EventObject& /*_Source*/ ) throw (RuntimeException)
+ {
+ // not interested in
+ }
+
+ //--------------------------------------------------------------------
+ sal_Bool FormControllerHelper::isInsertionRow() const
+ {
+ sal_Bool bIs = sal_False;
+ if ( m_xFormOperations.is() )
+ bIs = m_xFormOperations->isInsertionRow();
+ return bIs;
+ }
+
+ //--------------------------------------------------------------------
+ sal_Bool FormControllerHelper::isModifiedRow() const
+ {
+ sal_Bool bIs = sal_False;
+ if ( m_xFormOperations.is() )
+ bIs = m_xFormOperations->isModifiedRow();
+ return bIs;
+ }
+ //--------------------------------------------------------------------
+ bool FormControllerHelper::canDoFormFilter() const
+ {
+ if ( !m_xFormOperations.is() )
+ return false;
+
+ bool bCanDo = false;
+ try
+ {
+ Reference< XPropertySet > xCursorProperties( m_xFormOperations->getCursor(), UNO_QUERY_THROW );
+
+ bool bEscapeProcessing( false );
+ OSL_VERIFY( xCursorProperties->getPropertyValue( FM_PROP_ESCAPE_PROCESSING ) >>= bEscapeProcessing );
+
+ ::rtl::OUString sActiveCommand;
+ OSL_VERIFY( xCursorProperties->getPropertyValue( FM_PROP_ACTIVECOMMAND ) >>= sActiveCommand );
+
+ bool bInsertOnlyForm( false );
+ OSL_VERIFY( xCursorProperties->getPropertyValue( FM_PROP_INSERTONLY ) >>= bInsertOnlyForm );
+
+ bCanDo = bEscapeProcessing && ( sActiveCommand.getLength() > 0 ) && !bInsertOnlyForm;
+ }
+ catch( const Exception& )
+ {
+ DBG_UNHANDLED_EXCEPTION();
+ }
+ return bCanDo;
+ }
+
+//........................................................................
+} // namespace svx
+//........................................................................
diff --git a/svx/source/inc/fmctrler.hxx b/svx/source/inc/fmctrler.hxx index fb0fab8f39c7..bc1e83003021 100644 --- a/svx/source/inc/fmctrler.hxx +++ b/svx/source/inc/fmctrler.hxx @@ -555,7 +555,7 @@ protected: bool impl_isDisposed_nofail() const { return FmXFormController_BASE::rBHelper.bDisposed; } - void onModify( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxControl ); + void impl_onModify(); sal_Bool isLocked() const {return m_bLocked;} sal_Bool determineLockState() const; diff --git a/svx/source/inc/fmpgeimp.hxx b/svx/source/inc/fmpgeimp.hxx index 20c6a48d37ef..a364117ab649 100644 --- a/svx/source/inc/fmpgeimp.hxx +++ b/svx/source/inc/fmpgeimp.hxx @@ -110,12 +110,6 @@ public: const Link& GetFormsCreationHdl() const { return m_aFormsCreationHdl; } protected: - // lesen und schreiben der Objecte - void write(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& OutStream) const; - void read(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& InStream); - - void fillList(FmObjectList& rList, const SdrObjList& rObjList, sal_Bool bConnected) const; - /** finds a form with a given data source signature @param rForm the form to start the search with. This form, including all possible sub forms, diff --git a/svx/source/inc/fmresids.hrc b/svx/source/inc/fmresids.hrc index 34ee92aafc31..e9f39396cca6 100644 --- a/svx/source/inc/fmresids.hrc +++ b/svx/source/inc/fmresids.hrc @@ -263,6 +263,7 @@ #define RID_STR_SVT_SQL_SYNTAX_QUERY_EXISTS (RID_FORMS_START + 147) #define RID_STR_READONLY_VIEW (RID_FORMS_START + 148) #define RID_STR_ALREADYEXISTOVERWRITE (RID_FORMS_START + 149) +#define RID_STR_OBJECT_LABEL (RID_FORMS_START + 150) // Error-String-Id's ----------------------------------------------------------- #define RID_ERR_START (RID_FORMS_START + 600) diff --git a/svx/source/inc/fmtools.hxx b/svx/source/inc/fmtools.hxx index 6c1d1111ac11..44495a1002e9 100644 --- a/svx/source/inc/fmtools.hxx +++ b/svx/source/inc/fmtools.hxx @@ -39,9 +39,7 @@ #include <com/sun/star/sdbc/XDatabaseMetaData.hpp> #include <com/sun/star/sdb/XColumn.hpp> #include <com/sun/star/sdb/XColumnUpdate.hpp> -#ifndef _COM_SUN_STAR_SDBC_SQLERROREVENT_HPP_ #include <com/sun/star/sdb/SQLErrorEvent.hpp> -#endif #include <com/sun/star/sdbc/XConnection.hpp> #include <com/sun/star/sdbc/XResultSet.hpp> #include <com/sun/star/sdbc/XResultSetUpdate.hpp> @@ -81,9 +79,7 @@ #include <tools/time.hxx> #include <tools/datetime.hxx> -#ifndef _SVX_FMPROP_HRC #include "fmprop.hrc" -#endif #include <com/sun/star/sdbc/XConnection.hpp> #include <com/sun/star/io/XObjectInputStream.hpp> #include <com/sun/star/io/XObjectOutputStream.hpp> diff --git a/svx/source/inc/formcontrolling.hxx b/svx/source/inc/formcontrolling.hxx index 0e489f57434e..50f27f45ff73 100644 --- a/svx/source/inc/formcontrolling.hxx +++ b/svx/source/inc/formcontrolling.hxx @@ -1,284 +1,311 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: formcontrolling.hxx,v $ - * $Revision: 1.7 $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef SVX_FORMCONTROLLING_HXX -#define SVX_FORMCONTROLLING_HXX - -#include <com/sun/star/form/XFormController.hpp> -#include <com/sun/star/form/XForm.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/form/runtime/FeatureState.hpp> -#include <com/sun/star/form/runtime/XFormOperations.hpp> - -#include <cppuhelper/implbase1.hxx> -#include <comphelper/componentcontext.hxx> - -#include <vector> - -//........................................................................ -namespace svx -{ -//........................................................................ - - //==================================================================== - //= FeatureSlotTranslation - //==================================================================== - class FeatureSlotTranslation - { - public: - /// retrieves the feature id for a given feature URL - static sal_Int32 getControllerFeatureSlotIdForURL( const ::rtl::OUString& _rMainURL ); - - /// retrieves the feature URL for a given feature id - static ::rtl::OUString getControllerFeatureURLForSlotId( sal_Int32 _nSlotId ); - - /// determines whether the given URL is a controller feature URL - static sal_Bool isFeatureURL( const ::rtl::OUString& _rMainURL ); - - /// retrieves the css.form.runtime.FormFeature ID for a given slot ID - static sal_Int16 getFormFeatureForSlotId( sal_Int32 _nSlotId ); - - /// retrieves the slot id for a given css.form.runtime.FormFeature ID - static sal_Int32 getSlotIdForFormFeature( sal_Int16 _nFormFeature ); - }; - - //==================================================================== - //= IControllerFeatureInvalidation - //==================================================================== - class IControllerFeatureInvalidation - { - public: - /** invalidates the given features - - Invalidation means that any user interface representation (such as toolbox buttons), or - any dispatches associated with the features in question are potentially out-of-date, and - need to be updated - - @param _rFeatures - Ids of the features to be invalidated. - */ - virtual void invalidateFeatures( const ::std::vector< sal_Int32 >& _rFeatures ) = 0; - }; - - //==================================================================== - //= ControllerFeatures - //==================================================================== - class FormControllerHelper; - /** easier access to an FormControllerHelper instance - */ - class ControllerFeatures - { - protected: - ::comphelper::ComponentContext m_aContext; - IControllerFeatureInvalidation* m_pInvalidationCallback; // necessary as long as m_pImpl is not yet constructed - FormControllerHelper* m_pImpl; - - public: - /** standard ctor - - The instance is not functional until <method>assign</method> is used. - - @param _rxORB - a multi service factory for creating various needed components - - @param _pInvalidationCallback - the callback for invalidating feature states - */ - ControllerFeatures( - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB, - IControllerFeatureInvalidation* _pInvalidationCallback - ); - - /** constructs the instance from a <type scope="com::sun::star::form">XFormController<type> instance - - @param _rxORB - a multi service factory for creating various needed components - - @param _rxController - The form controller which the helper should be responsible for. Must not - be <NULL/>, and must have a valid model (form). - - @param _pInvalidationCallback - the callback for invalidating feature states - */ - ControllerFeatures( - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB, - const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController >& _rxController, - IControllerFeatureInvalidation* _pInvalidationCallback - ); - - /** constructs the helper form a <type scope="com::sun::star::form">XForm<type> instance - - Any functionality which depends on a controller will not be available. - - @param _rxORB - a multi service factory for creating various needed components - - @param _rxForm - The form which the helper should be responsible for. Must not be <NULL/>. - - @param _pInvalidationCallback - the callback for invalidating feature states - */ - ControllerFeatures( - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB, - const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& _rxForm, - IControllerFeatureInvalidation* _pInvalidationCallback - ); - - /// dtor - ~ControllerFeatures(); - - /// checks whether the instance is properly assigned to a form and/or controller - inline bool isAssigned( ) const { return m_pImpl != NULL; } - - /** assign to a controller - */ - void assign( - const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController >& _rxController - ); - - /** assign to a controller - */ - void assign( - const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& _rxForm - ); - - /// clears the instance so that it cannot be used afterwards - void dispose(); - - // access to the instance which implements the functionality. Not to be used when not assigned - inline const FormControllerHelper* operator->() const { return m_pImpl; } - inline FormControllerHelper* operator->() { return m_pImpl; } - inline const FormControllerHelper& operator*() const { return *m_pImpl; } - inline FormControllerHelper& operator*() { return *m_pImpl; } - }; - - //==================================================================== - //= FormControllerHelper - //==================================================================== - typedef ::cppu::WeakImplHelper1 < ::com::sun::star::form::runtime::XFeatureInvalidation - > FormControllerHelper_Base; - /** is a helper class which manages form controller functionality (such as moveNext etc.). - - <p>The class helps implementing form controller functionality, by providing - methods to determine the state of, and execute, various common form features.<br/> - A <em>feature</em> is for instance moving the form associated with the controller - to a certain position, or reloading the form, and so on.</p> - */ - class FormControllerHelper : public FormControllerHelper_Base - { - protected: - ::comphelper::ComponentContext m_aContext; - IControllerFeatureInvalidation* m_pInvalidationCallback; - ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormOperations > - m_xFormOperations; - - public: - /** constructs the helper from a <type scope="com::sun::star::form">XFormController<type> instance - - @param _rContext - the context the component lives in - @param _rxController - The form controller which the helper should be responsible for. Must not - be <NULL/>, and must have a valid model (form). - @param _pInvalidationCallback - the callback for invalidating feature states - */ - FormControllerHelper( - const ::comphelper::ComponentContext& _rContext, - const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController >& _rxController, - IControllerFeatureInvalidation* _pInvalidationCallback - ); - - /** constructs the helper form a <type scope="com::sun::star::form">XForm<type> instance - - Any functionality which depends on a controller will not be available. - - @param _rContext - the context the component lives in - @param _rxForm - The form which the helper should be responsible for. Must not be <NULL/>. - @param _pInvalidationCallback - the callback for invalidating feature states - */ - FormControllerHelper( - const ::comphelper::ComponentContext& _rContext, - const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& _rxForm, - IControllerFeatureInvalidation* _pInvalidationCallback - ); - - // forwards to the XFormOperations implementation - ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet > - getCursor() const; - void getState( - sal_Int32 _nSlotId, - ::com::sun::star::form::runtime::FeatureState& _out_rState - ) const; - sal_Bool isEnabled( sal_Int32 _nSlotId ) const; - void execute( sal_Int32 _nSlotId ) const; - void execute( sal_Int32 _nSlotId, const ::rtl::OUString& _rParamName, const ::com::sun::star::uno::Any& _rParamValue ) const; - sal_Bool commitCurrentRecord() const; - sal_Bool commitCurrentControl( ) const; - sal_Bool isInsertionRow() const; - sal_Bool isModifiedRow() const; - - bool moveLeft( ) const; - bool moveRight( ) const; - - bool canDoFormFilter() const; - - /** disposes this instance. - - After this method has been called, the instance is not functional anymore - */ - void dispose(); - - const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormOperations >& - getFormOperations() const { return m_xFormOperations; } - protected: - /// dtor - ~FormControllerHelper(); - - // XFeatureInvalidation - virtual void SAL_CALL invalidateFeatures( const ::com::sun::star::uno::Sequence< ::sal_Int16 >& Features ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL invalidateAllFeatures() throw (::com::sun::star::uno::RuntimeException); - - private: - FormControllerHelper(); // never implemented - FormControllerHelper( const FormControllerHelper& ); // never implemented - FormControllerHelper& operator=( const FormControllerHelper& ); // never implemented - }; - -//........................................................................ -} // namespace svx -//........................................................................ - -#endif // SVX_FORMCONTROLLING_HXX +/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: formcontrolling.hxx,v $
+ * $Revision: 1.7 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef SVX_FORMCONTROLLING_HXX
+#define SVX_FORMCONTROLLING_HXX
+
+#include <com/sun/star/form/XFormController.hpp>
+#include <com/sun/star/form/XForm.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/form/runtime/FeatureState.hpp>
+#include <com/sun/star/form/runtime/XFormOperations.hpp>
+#include <com/sun/star/sdb/XSQLErrorListener.hpp>
+
+#include <cppuhelper/implbase2.hxx>
+#include <comphelper/componentcontext.hxx>
+
+#include <vector>
+
+//........................................................................
+namespace svx
+{
+//........................................................................
+
+ //====================================================================
+ //= FeatureSlotTranslation
+ //====================================================================
+ class FeatureSlotTranslation
+ {
+ public:
+ /// retrieves the feature id for a given feature URL
+ static sal_Int32 getControllerFeatureSlotIdForURL( const ::rtl::OUString& _rMainURL );
+
+ /// retrieves the feature URL for a given feature id
+ static ::rtl::OUString getControllerFeatureURLForSlotId( sal_Int32 _nSlotId );
+
+ /// determines whether the given URL is a controller feature URL
+ static sal_Bool isFeatureURL( const ::rtl::OUString& _rMainURL );
+
+ /// retrieves the css.form.runtime.FormFeature ID for a given slot ID
+ static sal_Int16 getFormFeatureForSlotId( sal_Int32 _nSlotId );
+
+ /// retrieves the slot id for a given css.form.runtime.FormFeature ID
+ static sal_Int32 getSlotIdForFormFeature( sal_Int16 _nFormFeature );
+ };
+
+ //====================================================================
+ //= IControllerFeatureInvalidation
+ //====================================================================
+ class IControllerFeatureInvalidation
+ {
+ public:
+ /** invalidates the given features
+
+ Invalidation means that any user interface representation (such as toolbox buttons), or
+ any dispatches associated with the features in question are potentially out-of-date, and
+ need to be updated
+
+ @param _rFeatures
+ Ids of the features to be invalidated.
+ */
+ virtual void invalidateFeatures( const ::std::vector< sal_Int32 >& _rFeatures ) = 0;
+ };
+
+ //====================================================================
+ //= ControllerFeatures
+ //====================================================================
+ class FormControllerHelper;
+ /** easier access to an FormControllerHelper instance
+ */
+ class ControllerFeatures
+ {
+ protected:
+ ::comphelper::ComponentContext m_aContext;
+ IControllerFeatureInvalidation* m_pInvalidationCallback; // necessary as long as m_pImpl is not yet constructed
+ FormControllerHelper* m_pImpl;
+
+ public:
+ /** standard ctor
+
+ The instance is not functional until <method>assign</method> is used.
+
+ @param _rxORB
+ a multi service factory for creating various needed components
+
+ @param _pInvalidationCallback
+ the callback for invalidating feature states
+ */
+ ControllerFeatures(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB,
+ IControllerFeatureInvalidation* _pInvalidationCallback
+ );
+
+ /** constructs the instance from a <type scope="com::sun::star::form">XFormController<type> instance
+
+ @param _rxORB
+ a multi service factory for creating various needed components
+
+ @param _rxController
+ The form controller which the helper should be responsible for. Must not
+ be <NULL/>, and must have a valid model (form).
+
+ @param _pInvalidationCallback
+ the callback for invalidating feature states
+ */
+ ControllerFeatures(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController >& _rxController,
+ IControllerFeatureInvalidation* _pInvalidationCallback
+ );
+
+ /** constructs the helper form a <type scope="com::sun::star::form">XForm<type> instance
+
+ Any functionality which depends on a controller will not be available.
+
+ @param _rxORB
+ a multi service factory for creating various needed components
+
+ @param _rxForm
+ The form which the helper should be responsible for. Must not be <NULL/>.
+
+ @param _pInvalidationCallback
+ the callback for invalidating feature states
+ */
+ ControllerFeatures(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& _rxForm,
+ IControllerFeatureInvalidation* _pInvalidationCallback
+ );
+
+ /// dtor
+ ~ControllerFeatures();
+
+ /// checks whether the instance is properly assigned to a form and/or controller
+ inline bool isAssigned( ) const { return m_pImpl != NULL; }
+
+ /** assign to a controller
+ */
+ void assign(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController >& _rxController
+ );
+
+ /** assign to a controller
+ */
+ void assign(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& _rxForm
+ );
+
+ /// clears the instance so that it cannot be used afterwards
+ void dispose();
+
+ // access to the instance which implements the functionality. Not to be used when not assigned
+ inline const FormControllerHelper* operator->() const { return m_pImpl; }
+ inline FormControllerHelper* operator->() { return m_pImpl; }
+ inline const FormControllerHelper& operator*() const { return *m_pImpl; }
+ inline FormControllerHelper& operator*() { return *m_pImpl; }
+ };
+
+ //====================================================================
+ //= FormControllerHelper
+ //====================================================================
+ typedef ::cppu::WeakImplHelper2 < ::com::sun::star::form::runtime::XFeatureInvalidation
+ , ::com::sun::star::sdb::XSQLErrorListener
+ > FormControllerHelper_Base;
+ /** is a helper class which manages form controller functionality (such as moveNext etc.).
+
+ <p>The class helps implementing form controller functionality, by providing
+ methods to determine the state of, and execute, various common form features.<br/>
+ A <em>feature</em> is for instance moving the form associated with the controller
+ to a certain position, or reloading the form, and so on.</p>
+ */
+ class FormControllerHelper : public FormControllerHelper_Base
+ {
+ protected:
+ ::comphelper::ComponentContext m_aContext;
+ IControllerFeatureInvalidation* m_pInvalidationCallback;
+ ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormOperations >
+ m_xFormOperations;
+
+ ::com::sun::star::uno::Any m_aOperationError;
+
+ public:
+ /** constructs the helper from a <type scope="com::sun::star::form">XFormController<type> instance
+
+ @param _rContext
+ the context the component lives in
+ @param _rxController
+ The form controller which the helper should be responsible for. Must not
+ be <NULL/>, and must have a valid model (form).
+ @param _pInvalidationCallback
+ the callback for invalidating feature states
+ */
+ FormControllerHelper(
+ const ::comphelper::ComponentContext& _rContext,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormController >& _rxController,
+ IControllerFeatureInvalidation* _pInvalidationCallback
+ );
+
+ /** constructs the helper form a <type scope="com::sun::star::form">XForm<type> instance
+
+ Any functionality which depends on a controller will not be available.
+
+ @param _rContext
+ the context the component lives in
+ @param _rxForm
+ The form which the helper should be responsible for. Must not be <NULL/>.
+ @param _pInvalidationCallback
+ the callback for invalidating feature states
+ */
+ FormControllerHelper(
+ const ::comphelper::ComponentContext& _rContext,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& _rxForm,
+ IControllerFeatureInvalidation* _pInvalidationCallback
+ );
+
+ // forwards to the XFormOperations implementation
+ ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet >
+ getCursor() const;
+ void getState(
+ sal_Int32 _nSlotId,
+ ::com::sun::star::form::runtime::FeatureState& _out_rState
+ ) const;
+ sal_Bool isEnabled( sal_Int32 _nSlotId ) const;
+ void execute( sal_Int32 _nSlotId ) const;
+ void execute( sal_Int32 _nSlotId, const ::rtl::OUString& _rParamName, const ::com::sun::star::uno::Any& _rParamValue ) const;
+ sal_Bool commitCurrentRecord() const;
+ sal_Bool commitCurrentControl( ) const;
+ sal_Bool isInsertionRow() const;
+ sal_Bool isModifiedRow() const;
+
+ bool moveLeft( ) const;
+ bool moveRight( ) const;
+
+ bool canDoFormFilter() const;
+
+ /** disposes this instance.
+
+ After this method has been called, the instance is not functional anymore
+ */
+ void dispose();
+
+ const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormOperations >&
+ getFormOperations() const { return m_xFormOperations; }
+ protected:
+ /// dtor
+ ~FormControllerHelper();
+
+ // XFeatureInvalidation
+ virtual void SAL_CALL invalidateFeatures( const ::com::sun::star::uno::Sequence< ::sal_Int16 >& Features ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL invalidateAllFeatures() throw (::com::sun::star::uno::RuntimeException);
+
+ // XSQLErrorListener
+ virtual void SAL_CALL errorOccured( const ::com::sun::star::sdb::SQLErrorEvent& _Event ) throw (::com::sun::star::uno::RuntimeException);
+
+ // XEventListener
+ virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException);
+
+ private:
+ enum FormOperation { EXECUTE, EXECUTE_ARGS, COMMIT_CONTROL, COMMIT_RECORD };
+
+ bool impl_operateForm_nothrow(
+ const FormOperation _eWhat,
+ const sal_Int16 _nFeature, /* ignore for COMMIT_* */
+ const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& _rArguments /* ignore except for EXECUTE_ARGS */
+ ) const;
+ bool impl_operateForm_nothrow( const FormOperation _eWhat ) const
+ {
+ return impl_operateForm_nothrow( _eWhat, 0, ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >() );
+ }
+ bool impl_operateForm_nothrow( const sal_Int16 _nFeature ) const
+ {
+ return impl_operateForm_nothrow( EXECUTE, _nFeature, ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >() );
+ }
+
+ private:
+ FormControllerHelper(); // never implemented
+ FormControllerHelper( const FormControllerHelper& ); // never implemented
+ FormControllerHelper& operator=( const FormControllerHelper& ); // never implemented
+ };
+
+//........................................................................
+} // namespace svx
+//........................................................................
+
+#endif // SVX_FORMCONTROLLING_HXX
diff --git a/svx/source/inc/treevisitor.hxx b/svx/source/inc/treevisitor.hxx new file mode 100644 index 000000000000..ac66dcb2d1c6 --- /dev/null +++ b/svx/source/inc/treevisitor.hxx @@ -0,0 +1,112 @@ +/************************************************************************* +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +* +* Copyright 2008 by Sun Microsystems, Inc. +* +* OpenOffice.org - a multi-platform office productivity suite +* +* $RCSfile: code,v $ +* +* $Revision: 1.3 $ +* +* This file is part of OpenOffice.org. +* +* OpenOffice.org is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License version 3 +* only, as published by the Free Software Foundation. +* +* OpenOffice.org is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License version 3 for more details +* (a copy is included in the LICENSE file that accompanied this code). +* +* You should have received a copy of the GNU Lesser General Public License +* version 3 along with OpenOffice.org. If not, see +* <http://www.openoffice.org/license.html> +* for a copy of the LGPLv3 License. +************************************************************************/ + +#ifndef SVX_TREE_VISITOR_HXX +#define SVX_TREE_VISITOR_HXX + +#include <stack> + +template< class ELEMENT, class NODEINFO, class PROCESSOR > +class TreeVisitor +{ +public: + TreeVisitor( NODEINFO _nodeInfo ) + :m_visitedRoot( false ) + ,m_root() + ,m_current() + ,m_nodeInfo( _nodeInfo ) + { + } + + void process( const ELEMENT& _root, PROCESSOR& _processor ) + { + m_root = _root; + m_visitedRoot = false; + + while ( do_step() ) + _processor.process( m_current ); + } + +private: + bool do_step(); + +private: + bool m_visitedRoot; + ELEMENT m_root; + ELEMENT m_current; + const NODEINFO m_nodeInfo; + + ::std::stack< size_t > m_pathToCurrent; + ::std::stack< ELEMENT > m_currentAncestors; +}; + +template< class ELEMENT, class NODEINFO, class PROCESSOR > +bool TreeVisitor< ELEMENT, NODEINFO, PROCESSOR >::do_step() +{ + if ( !m_visitedRoot ) + { + m_current = m_root; + m_visitedRoot = true; + return true; + } + + // can we step down from the current node? + size_t childCount = m_nodeInfo.childCount( m_current ); + if ( childCount ) + { + m_currentAncestors.push( m_current ); + m_current = m_nodeInfo.getChild( m_current, 0 ); + m_pathToCurrent.push( 0 ); + return true; + } + + // is there a right sibling of the current node? + while ( !m_pathToCurrent.empty() ) + { + const ELEMENT& currentParent = m_currentAncestors.top(); + childCount = m_nodeInfo.childCount( currentParent ); + + size_t currentChildPos = m_pathToCurrent.top(); + if ( ++currentChildPos < childCount ) + { + // yes there is + m_pathToCurrent.top() = currentChildPos; + m_current = m_nodeInfo.getChild( currentParent, currentChildPos ); + return true; + } + + // no there isn't => step up + m_currentAncestors.pop(); + m_pathToCurrent.pop(); + } + + return false; +} + +#endif // SVX_TREE_VISITOR_HXX diff --git a/xmlhelp/source/cxxhelp/inc/qe/ConceptData.hxx b/xmlhelp/source/cxxhelp/inc/qe/ConceptData.hxx new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/xmlhelp/source/cxxhelp/inc/qe/ConceptData.hxx diff --git a/xmlhelp/source/cxxhelp/inc/qe/ContextTables.hxx b/xmlhelp/source/cxxhelp/inc/qe/ContextTables.hxx new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/xmlhelp/source/cxxhelp/inc/qe/ContextTables.hxx diff --git a/xmlhelp/source/cxxhelp/inc/qe/QueryProcessor.hxx b/xmlhelp/source/cxxhelp/inc/qe/QueryProcessor.hxx new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/xmlhelp/source/cxxhelp/inc/qe/QueryProcessor.hxx diff --git a/xmlhelp/source/cxxhelp/inc/qe/Search.hxx b/xmlhelp/source/cxxhelp/inc/qe/Search.hxx new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/xmlhelp/source/cxxhelp/inc/qe/Search.hxx diff --git a/xmlhelp/source/cxxhelp/inc/qe/XmlIndex.hxx b/xmlhelp/source/cxxhelp/inc/qe/XmlIndex.hxx new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/xmlhelp/source/cxxhelp/inc/qe/XmlIndex.hxx diff --git a/xmloff/inc/xmloff/controlpropertyhdl.hxx b/xmloff/inc/xmloff/controlpropertyhdl.hxx index 53fff06e7f3b..da2487a98f15 100644 --- a/xmloff/inc/xmloff/controlpropertyhdl.hxx +++ b/xmloff/inc/xmloff/controlpropertyhdl.hxx @@ -109,7 +109,7 @@ namespace xmloff //===================================================================== //= ImageScaleModeHandler //===================================================================== - class ImageScaleModeHandler : public XMLConstantsPropertyHandler + class XMLOFF_DLLPUBLIC ImageScaleModeHandler : public XMLConstantsPropertyHandler { public: ImageScaleModeHandler(); diff --git a/xmloff/source/text/txtstyli.cxx b/xmloff/source/text/txtstyli.cxx index 50185ed464bd..b5eb0a7bdfcb 100644 --- a/xmloff/source/text/txtstyli.cxx +++ b/xmloff/source/text/txtstyli.cxx @@ -478,7 +478,8 @@ void XMLTextStyleContext::FillPropertySet( { rPropSet->setPropertyValue( sAutoProp, makeAny(GetAutoName()) ); } - catch( UnknownPropertyException ) + catch( const RuntimeException& ) { throw; } + catch( const Exception& ) { bAutomatic = false; } |