diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2012-09-19 16:14:49 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2012-09-19 16:15:05 +0200 |
commit | f9a05f4ddfd1a93eb6f2167236cc4a49b275c82d (patch) | |
tree | 1e11e444c979f6ba350aca8edbb2be769305e30b /connectivity | |
parent | 58d24271ffbbcfe299591b4592c653a7c41c20e6 (diff) |
Some mork driver clean-up and configmgr access fix
Change-Id: I213a9ac5b41c66cd039016315f4641773364fd7c
Diffstat (limited to 'connectivity')
-rw-r--r-- | connectivity/Library_mork.mk | 1 | ||||
-rw-r--r-- | connectivity/registry/mork/org/openoffice/Office/DataAccess/Drivers.xcu | 22 | ||||
-rw-r--r-- | connectivity/source/drivers/mork/MColumnAlias.cxx | 90 | ||||
-rw-r--r-- | connectivity/source/drivers/mork/MConfigAccess.cxx | 259 | ||||
-rw-r--r-- | connectivity/source/drivers/mork/MConfigAccess.hxx | 32 | ||||
-rw-r--r-- | connectivity/source/drivers/mork/MExtConfigAccess.hxx | 39 |
6 files changed, 29 insertions, 414 deletions
diff --git a/connectivity/Library_mork.mk b/connectivity/Library_mork.mk index 17de768653b8..9a73cd09b447 100644 --- a/connectivity/Library_mork.mk +++ b/connectivity/Library_mork.mk @@ -34,7 +34,6 @@ $(eval $(call gb_Library_use_sdk_api,mork)) $(eval $(call gb_Library_add_exception_objects,mork, \ connectivity/source/drivers/mork/MColumns \ - connectivity/source/drivers/mork/MConfigAccess \ connectivity/source/drivers/mork/MColumnAlias \ connectivity/source/drivers/mork/MNSFolders \ connectivity/source/drivers/mork/MNSINIParser \ diff --git a/connectivity/registry/mork/org/openoffice/Office/DataAccess/Drivers.xcu b/connectivity/registry/mork/org/openoffice/Office/DataAccess/Drivers.xcu index 408b005cf1af..ff3aa66dfbcf 100644 --- a/connectivity/registry/mork/org/openoffice/Office/DataAccess/Drivers.xcu +++ b/connectivity/registry/mork/org/openoffice/Office/DataAccess/Drivers.xcu @@ -18,28 +18,6 @@ --> <oor:component-data oor:name="Drivers" oor:package="org.openoffice.Office.DataAccess" xmlns:install="http://openoffice.org/2004/installation" xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <node oor:name="Installed" install:module="mork"> - <node oor:name="sdbc:address:mozilla:" oor:op="replace"> - <prop oor:name="Driver"> - <value>com.sun.star.comp.sdbc.MozabDriver</value> - </prop> - <prop oor:name="DriverTypeDisplayName" oor:type="xs:string"> - <value xml:lang="en-US">SeaMonkey Address Book</value> - </prop> - <node oor:name="Features"> - <node oor:name="EscapeDateTime" oor:op="replace"> - <prop oor:name="Value" oor:type="xs:boolean"> - <value>true</value> - </prop> - </node> - </node> - <node oor:name="MetaData"> - <node oor:name="SupportsBrowsing" oor:op="replace"> - <prop oor:name="Value" oor:type="xs:boolean"> - <value>true</value> - </prop> - </node> - </node> - </node> <node oor:name="sdbc:address:thunderbird:" oor:op="replace"> <prop oor:name="Driver"> <value>com.sun.star.comp.sdbc.MorkDriver</value> diff --git a/connectivity/source/drivers/mork/MColumnAlias.cxx b/connectivity/source/drivers/mork/MColumnAlias.cxx index d2c3ad1f3011..c8337875e272 100644 --- a/connectivity/source/drivers/mork/MColumnAlias.cxx +++ b/connectivity/source/drivers/mork/MColumnAlias.cxx @@ -20,10 +20,10 @@ #include <sal/macros.h> #include "MColumnAlias.hxx" #include "MConnection.hxx" -#include "MExtConfigAccess.hxx" #include <com/sun/star/beans/XPropertySet.hpp> #include <com/sun/star/container/XNameAccess.hpp> +#include <officecfg/Office/DataAccess.hxx> #include <tools/diagnose_ex.h> @@ -90,70 +90,38 @@ OColumnAlias::OColumnAlias( const ::com::sun::star::uno::Reference< ::com::sun:: //------------------------------------------------------------------------------ void OColumnAlias::initialize( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB ) { - // open our driver settings config node - - // the config path for our own driver's settings - Reference< XPropertySet > xDriverNode = createDriverConfigNode( _rxORB ); - if ( xDriverNode.is() ) - { - try + Reference< XNameAccess > xAliasesNode( + officecfg::Office::DataAccess::DriverSettings:: + com_sun_star_comp_sdbc_MozabDriver::ColumnAliases::get( + comphelper::getComponentContext(_rxORB)), + UNO_QUERY_THROW); + Sequence< OUString > aProgrammaticNames(xAliasesNode->getElementNames()); + for (sal_Int32 i = 0; i != aProgrammaticNames.getLength(); ++i) { + OString sAsciiProgrammaticName( + OUStringToOString( + aProgrammaticNames[i], RTL_TEXTENCODING_ASCII_US)); + bool bFound = false; + for (AliasMap::iterator j(m_aAliasMap.begin()); j != m_aAliasMap.end(); + ++j) { - //............................................................. - Reference< XNameAccess > xAliasesNode; - xDriverNode->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("ColumnAliases")) ) >>= xAliasesNode; - OSL_ENSURE( xAliasesNode.is(), "OColumnAlias::setAlias: missing the aliases node!" ); - - // this is a set of string nodes - Sequence< ::rtl::OUString > aProgrammaticNames; - if ( xAliasesNode.is() ) - aProgrammaticNames = xAliasesNode->getElementNames(); - - //............................................................. - // travel through all the set elements - const ::rtl::OUString* pProgrammaticNames = aProgrammaticNames.getConstArray(); - const ::rtl::OUString* pProgrammaticNamesEnd = pProgrammaticNames + aProgrammaticNames.getLength(); - ::rtl::OUString sAssignedAlias; - - for ( ; pProgrammaticNames < pProgrammaticNamesEnd; ++pProgrammaticNames ) - { - OSL_VERIFY( xAliasesNode->getByName( *pProgrammaticNames ) >>= sAssignedAlias ); - - // normalize in case the config data is corrupted - // (what we really don't need is an empty alias ...) - if ( sAssignedAlias.isEmpty() ) - sAssignedAlias = *pProgrammaticNames; - - ::rtl::OString sAsciiProgrammaticName( ::rtl::OUStringToOString( *pProgrammaticNames, RTL_TEXTENCODING_ASCII_US ) ); - //............................................................. - #if OSL_DEBUG_LEVEL > 0 - bool bFound = false; - #endif - for ( AliasMap::iterator search = m_aAliasMap.begin(); - ( search != m_aAliasMap.end() ); - ++search - ) - { - if ( search->second.programmaticAsciiName.equals( sAsciiProgrammaticName ) ) - { - AliasEntry entry( search->second ); - m_aAliasMap.erase( search ); - m_aAliasMap[ sAssignedAlias ] = entry; - - #if OSL_DEBUG_LEVEL > 0 - bFound = true; - #endif - - break; - } + if (j->second.programmaticAsciiName == sAsciiProgrammaticName) { + OUString sAssignedAlias; + xAliasesNode->getByName(aProgrammaticNames[i]) >>= + sAssignedAlias; + if (sAssignedAlias.isEmpty()) { + sAssignedAlias = aProgrammaticNames[i]; } - - OSL_ENSURE( bFound, "OColumnAlias::setAlias: did not find a programmatic name which exists in the configuration!" ); + AliasEntry entry(j->second); + m_aAliasMap.erase(j); + m_aAliasMap[sAssignedAlias] = entry; + bFound = true; + break; } } - catch( const Exception& ) - { - DBG_UNHANDLED_EXCEPTION(); - } + SAL_WARN_IF( + !bFound, "connectivity.mork", + "unknown programmatic name " << aProgrammaticNames[i] + <<" from configuration"); } } diff --git a/connectivity/source/drivers/mork/MConfigAccess.cxx b/connectivity/source/drivers/mork/MConfigAccess.cxx deleted file mode 100644 index 0734f12f11c3..000000000000 --- a/connectivity/source/drivers/mork/MConfigAccess.cxx +++ /dev/null @@ -1,259 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - - -#include "com/sun/star/configuration/theDefaultProvider.hpp" -#include "comphelper/processfactory.hxx" - -#include "MConfigAccess.hxx" -#include "MExtConfigAccess.hxx" -#include "MConnection.hxx" -#include "MDriver.hxx" - -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::beans; - -//......................................................................... -namespace connectivity -{ - namespace mork - { - //----------------------------------------------------------------- - Reference< XPropertySet > createDriverConfigNode( Reference< XMultiServiceFactory > _rxORB ) - { - Reference< XPropertySet > xNode; - try - { - //============================================================= - // create the config provider - Reference< XMultiServiceFactory > xConfigProvider( - com::sun::star::configuration::theDefaultProvider::get( - comphelper::getComponentContext( _rxORB ) ) ); - - ::rtl::OUString sCompleteNodePath(RTL_CONSTASCII_USTRINGPARAM( "/org.openoffice.Office.DataAccess/DriverSettings/" )); - sCompleteNodePath += MorkDriver::getImplementationName_Static( ); - - //========================================================= - // arguments for creating the config access - Sequence< Any > aArguments(2); - // the path to the node to open - aArguments[0] <<= PropertyValue( - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("nodepath")), - 0, - makeAny( sCompleteNodePath ), - PropertyState_DIRECT_VALUE - ); - // the depth: -1 means unlimited - aArguments[1] <<= PropertyValue( - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("depth")), - 0, - makeAny( (sal_Int32)-1 ), - PropertyState_DIRECT_VALUE - ); - - //========================================================= - // create the access - Reference< XInterface > xAccess = xConfigProvider->createInstanceWithArguments( - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.ConfigurationAccess" )), - aArguments - ); - OSL_ENSURE( xAccess.is(), "createDriverConfigNode: invalid access returned (should throw an exception instead)!" ); - - xNode = xNode.query( xAccess ); - } - catch( const Exception& ) - { - OSL_FAIL( "createDriverConfigNode: caught an exception while accessing the driver's config node!" ); - } - - // outta here - return xNode; - } - - //----------------------------------------------------------------- - namespace - { - // a private helper to accessing the point where we store the reference - // to the factory - Reference< XMultiServiceFactory >& accessFactoryStorage( ) - { - static Reference< XMultiServiceFactory > xMozabServiceFactory; - return xMozabServiceFactory; - } - } - - //----------------------------------------------------------------- - void setMozabServiceFactory( const Reference< XMultiServiceFactory >& _rxFactory ) - { - accessFactoryStorage( ) = _rxFactory; - } - - //----------------------------------------------------------------- - const Reference< XMultiServiceFactory >& getMozabServiceFactory( ) - { - return accessFactoryStorage( ); - } - - //----------------------------------------------------------------- - ::rtl::OUString getDescription(const sal_Char* sNode,const ::rtl::OUString & sDefault) - { - ::rtl::OUString sPreferredName; - ::rtl::OUString sDescription; - - Reference< XMultiServiceFactory > xFactory = getMozabServiceFactory(); - OSL_ENSURE( xFactory.is(), "getPreferredProfileName: invalid service factory!" ); - if ( xFactory.is() ) - { - try - { - Reference< XPropertySet > xDriverNode = createDriverConfigNode( xFactory ); - Reference< XPropertySet > xMozPrefsNode; - if ( xDriverNode.is() ) - xDriverNode->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("MozillaPreferences" )) ) >>= xMozPrefsNode; - OSL_ENSURE( xMozPrefsNode.is(), "getPreferredProfileName: could not access the node for the mozilla preferences!" ); - if ( xMozPrefsNode.is() ) - xMozPrefsNode->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("ProfileName" )) ) >>= sPreferredName; - if ( xMozPrefsNode.is() ) - xMozPrefsNode->getPropertyValue( ::rtl::OUString::createFromAscii(sNode) ) >>= sDescription; - if (sDescription.getLength() == 0) - sDescription = sDefault; - } - catch( const Exception& ) - { - OSL_FAIL( "getDescription: caught an exception!" ); - } - } - if (sDescription.getLength() == 0) - sDescription = sDefault; - return sDescription; - } - //----------------------------------------------------------------- - ::rtl::OUString getPreferredProfileName( ) - { - ::rtl::OUString sPreferredName; - - Reference< XMultiServiceFactory > xFactory = getMozabServiceFactory(); - OSL_ENSURE( xFactory.is(), "getPreferredProfileName: invalid service factory!" ); - if ( xFactory.is() ) - { - try - { - Reference< XPropertySet > xDriverNode = createDriverConfigNode( xFactory ); - Reference< XPropertySet > xMozPrefsNode; - if ( xDriverNode.is() ) - xDriverNode->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("MozillaPreferences" )) ) >>= xMozPrefsNode; - OSL_ENSURE( xMozPrefsNode.is(), "getPreferredProfileName: could not access the node for the mozilla preferences!" ); - if ( xMozPrefsNode.is() ) - xMozPrefsNode->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("ProfileName" )) ) >>= sPreferredName; - } - catch( const Exception& ) - { - OSL_FAIL( "getPreferredProfileName: caught an exception!" ); - } - } - return sPreferredName; - } - } -} - -//......................................................................... - -//------------------------------------------------------------------------- -extern "C" const sal_Unicode* SAL_CALL getUserProfile( void ) -{ - static sal_Bool bReadConfig = sal_False; - static ::rtl::OUString sUserProfile; - if ( !bReadConfig ) - { - sUserProfile = ::connectivity::mork::getPreferredProfileName( ); - bReadConfig = sal_True; - } - - return sUserProfile.getStr(); -} -//------------------------------------------------------------------------ -extern "C" const sal_Char* SAL_CALL getPabDescription( void ) -{ - static sal_Bool bReadConfig = sal_False; - static ::rtl::OUString usPabDescription; - static ::rtl::OString sPabDescription; - - if ( !bReadConfig ) - { - usPabDescription = ::connectivity::mork::getDescription( - "PabDescription" , - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Personal Address Book" ))); - sPabDescription = ::rtl::OUStringToOString( usPabDescription, - RTL_TEXTENCODING_UTF8); - bReadConfig = sal_True; - } - - return sPabDescription.getStr(); -} - -//------------------------------------------------------------------------- -extern "C" const sal_Char* SAL_CALL getHisDescription( void ) -{ - static sal_Bool bReadConfig = sal_False; - static ::rtl::OUString usHisDescription; - static ::rtl::OString sHisDescription; - - if ( !bReadConfig ) - { - usHisDescription = ::connectivity::mork::getDescription( - "HisDescription" , - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Collected Addresses" ))); - sHisDescription = ::rtl::OUStringToOString( usHisDescription, - RTL_TEXTENCODING_UTF8); - bReadConfig = sal_True; - } - - return sHisDescription.getStr(); -} - -//------------------------------------------------------------------------- -// MConfigAccess was invented to allow non-UNO parts access to the configuration. -// Unfortunately, configuration access requires a XMultiServiceFactory - which the -// mozilla side does not have. -// So we create a "library-local" service factory here: Every need for a service -// factory can be fullfilled by this factory (similar to the get/setProcessServiceFactory -// in comphelper). -// This is halfway valid, as usually, the mozabdrv library is invoked from the mozab library -// only. The latter contains the driver class (and only this class and nothing more), and -// the driver class is a singleton. The driver itself is created with a service factory, -// which (by definition) can and should be used for all subsequent service requests. -// And this is exactly what we're allowing with the following functions .... - -/** _pFactory must point to an XMultiServiceFactory, which must be aquired once - for purpose of safely transfering it. The callee will release this interface - when it has stored the pointer somewhere else. -*/ -extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL setMozabServiceFactory( - void* _pFactory ) -{ - Reference< XMultiServiceFactory > xFactory = static_cast< XMultiServiceFactory* >( _pFactory ); - // ::connectivity::mozab::setMozabServiceFactory( xFactory ); - - // by definition, the object behind the interface pointer has been acquired once for purpose - // of safely transporting it - xFactory->release(); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/mork/MConfigAccess.hxx b/connectivity/source/drivers/mork/MConfigAccess.hxx deleted file mode 100644 index e00986b92baa..000000000000 --- a/connectivity/source/drivers/mork/MConfigAccess.hxx +++ /dev/null @@ -1,32 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef CONNECTIVITY_MORK_MCONFIGACCESS_HXX - -#include <sal/types.h> - -extern "C" const sal_Unicode* SAL_CALL getUserProfile( void ); - -extern "C" const sal_Char* SAL_CALL getPabDescription( void ); - -extern "C" const sal_Char* SAL_CALL getHisDescription( void ); - -#endif // CONNECTIVITY_MORK_MCONFIGACCESS_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/mork/MExtConfigAccess.hxx b/connectivity/source/drivers/mork/MExtConfigAccess.hxx deleted file mode 100644 index 44e7a86ee59f..000000000000 --- a/connectivity/source/drivers/mork/MExtConfigAccess.hxx +++ /dev/null @@ -1,39 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#ifndef CONNECTIVITY_MORK_MEXTCONFIGACCESS_HXX - -// This is the extended version (for use on the SO side of the driver) of MConfigAccess -// (which is for use on the mozilla side only) - -#include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> - -namespace connectivity -{ - namespace mork - { - ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > - createDriverConfigNode( ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > _rxORB ); - } -} - -#endif // CONNECTIVITY_MORK_MEXTCONFIGACCESS_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |