diff options
author | Frank Schönheit <fs@openoffice.org> | 2001-10-23 16:43:00 +0000 |
---|---|---|
committer | Frank Schönheit <fs@openoffice.org> | 2001-10-23 16:43:00 +0000 |
commit | 60a179bc454ac4bcd9653265de5872d894c5cdef (patch) | |
tree | c07dd668e773e16633138a9a30802df5652f8ca5 /connectivity | |
parent | 05e936724443c31ea1e8eb5230b6fa3b1b185c50 (diff) |
initial checkin - exposing some helpers for accessing the configuration
Diffstat (limited to 'connectivity')
-rw-r--r-- | connectivity/source/drivers/mozab/MConfigAccess.cxx | 224 | ||||
-rw-r--r-- | connectivity/source/drivers/mozab/MConfigAccess.hxx | 78 | ||||
-rw-r--r-- | connectivity/source/drivers/mozab/MExtConfigAccess.hxx | 109 |
3 files changed, 411 insertions, 0 deletions
diff --git a/connectivity/source/drivers/mozab/MConfigAccess.cxx b/connectivity/source/drivers/mozab/MConfigAccess.cxx new file mode 100644 index 000000000000..2fc127cf9e9b --- /dev/null +++ b/connectivity/source/drivers/mozab/MConfigAccess.cxx @@ -0,0 +1,224 @@ +/************************************************************************* + * + * $RCSfile: MConfigAccess.cxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: fs $ $Date: 2001-10-23 17:42:20 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc.. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef CONNECTIVITY_MOZAB_MCONFIGACCESS_HXX +#include "MConfigAccess.hxx" +#endif +#ifndef CONNECTIVITY_MOZAB_MEXTCONFIGACCESS_HXX +#include "MExtConfigAccess.hxx" +#endif +#ifndef CONNECTIVITY_SCONNECTION_HXX +#include "MConnection.hxx" +#endif + +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::lang; +using namespace ::com::sun::star::beans; + +//......................................................................... +namespace connectivity +{ + namespace mozab + { + //----------------------------------------------------------------- + Reference< XPropertySet > createDriverConfigNode( Reference< XMultiServiceFactory > _rxORB ) + { + Reference< XPropertySet > xNode; + try + { + // + // create the config provider + Reference< XMultiServiceFactory > xConfigProvider( + _rxORB->createInstance( ::rtl::OUString::createFromAscii( "com.sun.star.configuration.ConfigurationProvider" ) ), + UNO_QUERY + ); + OSL_ENSURE( xConfigProvider.is(), "createDriverConfigNode: could not create the config provider!" ); + + if ( xConfigProvider.is() ) + { + ::rtl::OUString sCompleteNodePath = ::rtl::OUString::createFromAscii ("/org.openoffice.Office.DataAccess/DriverSettings/" ); + sCompleteNodePath += OConnection::getDriverImplementationName(); + + // + // arguments for creating the config access + Sequence< Any > aArguments(2); + // the path to the node to open + aArguments[0] <<= PropertyValue( + ::rtl::OUString::createFromAscii( "nodepath"), + 0, + makeAny( sCompleteNodePath ), + PropertyState_DIRECT_VALUE + ); + // the depth: -1 means unlimited + aArguments[1] <<= PropertyValue( + ::rtl::OUString::createFromAscii( "depth"), + 0, + makeAny( (sal_Int32)-1 ), + PropertyState_DIRECT_VALUE + ); + + // + // create the access + Reference< XInterface > xAccess = xConfigProvider->createInstanceWithArguments( + ::rtl::OUString::createFromAscii( "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_ENSURE( sal_False, "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 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::createFromAscii( "MozillaPreferences" ) ) >>= xMozPrefsNode; + OSL_ENSURE( xMozPrefsNode.is(), "getPreferredProfileName: could not access the node for the mozilla preferences!" ); + if ( xMozPrefsNode.is() ) + xMozPrefsNode->getPropertyValue( ::rtl::OUString::createFromAscii( "ProfileName" ) ) >>= sPreferredName; + } + catch( const Exception& ) + { + OSL_ENSURE( sal_False, "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::mozab::getPreferredProfileName( ); + bReadConfig = sal_True; + } + + return sUserProfile.getStr(); +} + +//------------------------------------------------------------------------- +extern "C" 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(); +} + +/************************************************************************* + * history: + * $Log: not supported by cvs2svn $ + * + * Revision 1.0 23.10.01 18:36:07 fs + ************************************************************************/ + diff --git a/connectivity/source/drivers/mozab/MConfigAccess.hxx b/connectivity/source/drivers/mozab/MConfigAccess.hxx new file mode 100644 index 000000000000..79d4d685e6f1 --- /dev/null +++ b/connectivity/source/drivers/mozab/MConfigAccess.hxx @@ -0,0 +1,78 @@ +/************************************************************************* + * + * $RCSfile: MConfigAccess.hxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: fs $ $Date: 2001-10-23 17:43:00 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc.. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef CONNECTIVITY_MOZAB_MCONFIGACCESS_HXX + +#ifndef _SAL_TYPES_H_ +#include <sal/types.h> +#endif + +extern "C" const sal_Unicode* SAL_CALL getUserProfile( void ); + +#endif // CONNECTIVITY_MOZAB_MCONFIGACCESS_HXX + +/************************************************************************* + * history: + * $Log: not supported by cvs2svn $ + * + * Revision 1.0 23.10.01 18:15:48 fs + ************************************************************************/ + diff --git a/connectivity/source/drivers/mozab/MExtConfigAccess.hxx b/connectivity/source/drivers/mozab/MExtConfigAccess.hxx new file mode 100644 index 000000000000..678bec0e7103 --- /dev/null +++ b/connectivity/source/drivers/mozab/MExtConfigAccess.hxx @@ -0,0 +1,109 @@ +/************************************************************************* + * + * $RCSfile: MExtConfigAccess.hxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: fs $ $Date: 2001-10-23 17:42:39 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc.. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef CONNECTIVITY_MOZAB_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) + +#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_ +#include <com/sun/star/beans/XPropertySet.hpp> +#endif +#ifndef _COM_SUN_STAR_LANG_XMULTISERVICEFACTORY_HPP_ +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#endif + +namespace connectivity +{ + namespace mozab + { + ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > + createDriverConfigNode( ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > _rxORB ); + } +} + +// 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" void SAL_CALL setMozabServiceFactory( void* _pFactory ); + +#endif // CONNECTIVITY_MOZAB_MEXTCONFIGACCESS_HXX + +/************************************************************************* + * history: + * $Log: not supported by cvs2svn $ + * + * Revision 1.0 23.10.01 18:45:43 fs + ************************************************************************/ + |