diff options
author | Matúš Kukan <matus.kukan@collabora.com> | 2014-01-09 19:36:11 +0100 |
---|---|---|
committer | Matúš Kukan <matus.kukan@collabora.com> | 2014-01-10 16:29:12 +0100 |
commit | a6cade128fceafe94665206d9fdd13fb83aa6dbe (patch) | |
tree | 78d29f8ea8be0965855ba2fbb9b1bb779324d650 | |
parent | 7e3d6c54f629f5a84b1fd09525d506b708acb386 (diff) |
fwk: Use constructor feature for SubstitutePathVariables.
Change-Id: Ibd626f00bb844ae8ec1cab773093b8c94bf8d936
-rw-r--r-- | framework/inc/services/substitutepathvars.hxx | 285 | ||||
-rw-r--r-- | framework/source/register/registerservices.cxx | 2 | ||||
-rw-r--r-- | framework/source/services/substitutepathvars.cxx | 259 | ||||
-rw-r--r-- | framework/util/fwk.component | 3 |
4 files changed, 254 insertions, 295 deletions
diff --git a/framework/inc/services/substitutepathvars.hxx b/framework/inc/services/substitutepathvars.hxx deleted file mode 100644 index 7b5b352f2452..000000000000 --- a/framework/inc/services/substitutepathvars.hxx +++ /dev/null @@ -1,285 +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 INCLUDED_FRAMEWORK_INC_SERVICES_SUBSTITUTEPATHVARS_HXX -#define INCLUDED_FRAMEWORK_INC_SERVICES_SUBSTITUTEPATHVARS_HXX - -/** Attention: stl headers must(!) be included at first. Otherwise it can make trouble - with solaris headers ... -*/ -#include <vector> -#include <list> -#include <boost/unordered_map.hpp> - -#include <threadhelp/threadhelpbase.hxx> -#include <macros/generic.hxx> -#include <macros/xinterface.hxx> -#include <macros/xtypeprovider.hxx> -#include <macros/xserviceinfo.hxx> -#include <stdtypes.h> - -#include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/lang/XTypeProvider.hpp> -#include <com/sun/star/container/NoSuchElementException.hpp> -#include <com/sun/star/util/XStringSubstitution.hpp> - -#include <cppuhelper/implbase2.hxx> -#include <rtl/ustring.hxx> -#include <unotools/configitem.hxx> -#include <tools/link.hxx> -#include <i18nlangtag/lang.h> - -namespace framework -{ - -// Must be zero value based -enum EnvironmentType -{ - ET_HOST = 0 , - ET_YPDOMAIN , - ET_DNSDOMAIN , - ET_NTDOMAIN , - ET_OS , - ET_UNKNOWN , - ET_COUNT -}; - -// Must be zero value based -enum OperatingSystem -{ - OS_WINDOWS = 0, - OS_UNIX , - OS_SOLARIS , - OS_LINUX , - OS_UNKNOWN , - OS_COUNT -}; - -struct SubstituteRule -{ - SubstituteRule() {} - SubstituteRule( const OUString& aVarName, - const OUString& aValue, - const com::sun::star::uno::Any& aVal, - EnvironmentType aType ) : - aSubstVariable( aVarName ), aSubstValue( aValue ), aEnvValue( aVal ), aEnvType( aType ) {} - - OUString aSubstVariable; - OUString aSubstValue; - com::sun::star::uno::Any aEnvValue; - EnvironmentType aEnvType; -}; - -struct SubstitutePathNotify -{ - SubstitutePathNotify() {}; - - const com::sun::star::uno::Sequence<OUString> aPropertyNames; -}; - -class SubstituteVariables : public ::boost::unordered_map< OUString, - SubstituteRule, - OUStringHash, - ::std::equal_to< OUString > > -{ - public: - inline void free() - { - SubstituteVariables().swap( *this ); - } -}; - -typedef std::vector< SubstituteRule > SubstituteRuleVector; -class SubstitutePathVariables_Impl : public utl::ConfigItem -{ - public: - SubstitutePathVariables_Impl( const Link& aNotifyLink ); - virtual ~SubstitutePathVariables_Impl(); - - static OperatingSystem GetOperatingSystemFromString( const OUString& ); - static EnvironmentType GetEnvTypeFromString( const OUString& ); - - void GetSharePointsRules( SubstituteVariables& aSubstVarMap ); - - /** is called from the ConfigManager before application ends or from the - PropertyChangeListener if the sub tree broadcasts changes. */ - virtual void Notify( const com::sun::star::uno::Sequence< OUString >& aPropertyNames ); - virtual void Commit(); - - private: - // Wrapper methods for low-level functions - OperatingSystem GetOperatingSystem(); - const OUString& GetYPDomainName(); - const OUString& GetDNSDomainName(); - const OUString& GetNTDomainName(); - const OUString& GetHostName(); - - bool FilterRuleSet( const SubstituteRuleVector& aRuleSet, SubstituteRule& aActiveRule ); - - void ReadSharePointsFromConfiguration( com::sun::star::uno::Sequence< OUString >& aSharePointsSeq ); - void ReadSharePointRuleSetFromConfiguration( const OUString& aSharePointName, - const OUString& aSharePointNodeName, - SubstituteRuleVector& aRuleSet ); - - // Stored values for domains and host - bool m_bYPDomainRetrieved; - OUString m_aYPDomain; - bool m_bDNSDomainRetrieved; - OUString m_aDNSDomain; - bool m_bNTDomainRetrieved; - OUString m_aNTDomain; - bool m_bHostRetrieved; - OUString m_aHost; - - Link m_aListenerNotify; - const OUString m_aSharePointsNodeName; - const OUString m_aDirPropertyName; - const OUString m_aEnvPropertyName; - const OUString m_aLevelSep; -}; - -enum PreDefVariable -{ - PREDEFVAR_INST, - PREDEFVAR_PROG, - PREDEFVAR_USER, - PREDEFVAR_WORK, - PREDEFVAR_HOME, - PREDEFVAR_TEMP, - PREDEFVAR_PATH, - PREDEFVAR_LANG, - PREDEFVAR_LANGID, - PREDEFVAR_VLANG, - PREDEFVAR_INSTPATH, - PREDEFVAR_PROGPATH, - PREDEFVAR_USERPATH, - PREDEFVAR_INSTURL, - PREDEFVAR_PROGURL, - PREDEFVAR_USERURL, - PREDEFVAR_WORKDIRURL, - // New variable of hierachy service (#i32656#) - PREDEFVAR_BASEINSTURL, - PREDEFVAR_USERDATAURL, - PREDEFVAR_BRANDBASEURL, - PREDEFVAR_COUNT -}; - -struct PredefinedPathVariables -{ - // Predefined variables supported by substitute variables - LanguageType m_eLanguageType; // Lanuage type of Office - OUString m_FixedVar[ PREDEFVAR_COUNT ]; // Variable value access by PreDefVariable - OUString m_FixedVarNames[ PREDEFVAR_COUNT ]; // Variable name access by PreDefVariable -}; - -struct ReSubstFixedVarOrder -{ - sal_Int32 nVarValueLength; - PreDefVariable eVariable; - - bool operator< ( const ReSubstFixedVarOrder& aFixedVarOrder ) const - { - // Reverse operator< to have high to low ordering - return ( nVarValueLength > aFixedVarOrder.nVarValueLength ); - } -}; - -struct ReSubstUserVarOrder -{ - sal_Int32 nVarValueLength; - OUString aVarName; - - bool operator< ( const ReSubstUserVarOrder& aUserVarOrder ) const - { - // Reverse operator< to have high to low ordering - return ( nVarValueLength > aUserVarOrder.nVarValueLength ); - } -}; - -typedef std::list< ReSubstFixedVarOrder > ReSubstFixedVarOrderVector; -typedef std::list< ReSubstUserVarOrder > ReSubstUserVarOrderVector; - -class SubstitutePathVariables : private ThreadHelpBase, // Struct for right initalization of mutex member! Must be first of baseclasses. - public ::cppu::WeakImplHelper2< ::com::sun::star::util::XStringSubstitution, css::lang::XServiceInfo > -{ - friend class SubstitutePathVariables_Impl; - - public: - SubstitutePathVariables( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& xContext ); - virtual ~SubstitutePathVariables(); - - // XInterface, XTypeProvider, XServiceInfo - DECLARE_XSERVICEINFO - - // XStringSubstitution - virtual OUString SAL_CALL substituteVariables( const OUString& aText, sal_Bool bSubstRequired ) - throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException); - virtual OUString SAL_CALL reSubstituteVariables( const OUString& aText ) - throw (::com::sun::star::uno::RuntimeException); - virtual OUString SAL_CALL getSubstituteVariableValue( const OUString& variable ) - throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException); - - protected: - DECL_LINK(implts_ConfigurationNotify, void *); - - void SetPredefinedPathVariables( PredefinedPathVariables& ); - OUString ConvertOSLtoUCBURL( const OUString& aOSLCompliantURL ) const; - - // Special case (transient) values can change during runtime! - // Don't store them in the pre defined struct - OUString GetWorkPath() const; - OUString GetWorkVariableValue() const; - OUString GetPathVariableValue() const; - - OUString GetHomeVariableValue() const; - - // XStringSubstitution implementation methods - OUString impl_substituteVariable( const OUString& aText, bool bSustRequired ) - throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException); - OUString impl_reSubstituteVariables( const OUString& aText ) - throw (::com::sun::star::uno::RuntimeException); - OUString impl_getSubstituteVariableValue( const OUString& variable ) - throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException); - - private: - class VarNameToIndexMap : public boost::unordered_map< OUString, - PreDefVariable, - OUStringHash, - ::std::equal_to< OUString > > - { - inline void free() - { - VarNameToIndexMap().swap( *this ); - } - }; - - VarNameToIndexMap m_aPreDefVarMap; // Mapping from pre-def variable names to enum for array access - SubstituteVariables m_aSubstVarMap; // Active rule set map indexed by variable name! - PredefinedPathVariables m_aPreDefVars; // All predefined variables - SubstitutePathVariables_Impl m_aImpl; // Implementation class that access the configuration - ReSubstFixedVarOrderVector m_aReSubstFixedVarOrder; // To speed up resubstitution fixed variables (order for lookup) - ReSubstUserVarOrderVector m_aReSubstUserVarOrder; // To speed up resubstitution user variables - com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > m_xContext; -}; - -} - -#endif // INCLUDED_FRAMEWORK_INC_SERVICES_SUBSTITUTEPATHVARS_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/framework/source/register/registerservices.cxx b/framework/source/register/registerservices.cxx index a5ad5bca8492..05784cf45efc 100644 --- a/framework/source/register/registerservices.cxx +++ b/framework/source/register/registerservices.cxx @@ -50,7 +50,6 @@ #include <services/sessionlistener.hxx> #include <uiconfiguration/imagemanager.hxx> -#include <services/substitutepathvars.hxx> #include <services/pathsettings.hxx> #include <services/ContextChangeEventMultiplexer.hxx> @@ -72,7 +71,6 @@ COMPONENTGETFACTORY ( fwk, IFFACTORY( ::framework::SessionListener ) else IFFACTORY( ::framework::SessionListener ) else IFFACTORY( ::framework::ImageManager ) else - IFFACTORY( ::framework::SubstitutePathVariables ) else IFFACTORY( ::framework::PathSettings ) else IFFACTORY( ::framework::ContextChangeEventMultiplexer ) ) diff --git a/framework/source/services/substitutepathvars.cxx b/framework/source/services/substitutepathvars.cxx index 7839c1ba6b57..bdcae12f4074 100644 --- a/framework/source/services/substitutepathvars.cxx +++ b/framework/source/services/substitutepathvars.cxx @@ -19,13 +19,15 @@ #include <config_folders.h> -#include "services/substitutepathvars.hxx" #include <threadhelp/resetableguard.hxx> +#include <threadhelp/threadhelpbase.hxx> #include <helper/networkdomain.hxx> +#include <macros/xserviceinfo.hxx> #include "services.h" #include <com/sun/star/beans/XPropertySet.hpp> +#include <cppuhelper/implbase2.hxx> #include <unotools/configitem.hxx> #include <unotools/localfilehelper.hxx> #include <unotools/configmgr.hxx> @@ -37,17 +39,23 @@ #include <osl/socket.hxx> #include <osl/process.h> #include <i18nlangtag/languagetag.hxx> +#include <tools/link.hxx> #include <tools/urlobj.hxx> #include <tools/resmgr.hxx> #include <tools/wldcrd.hxx> +#include <rtl/ref.hxx> #include <rtl/ustrbuf.hxx> #include <rtl/bootstrap.hxx> #include <officecfg/Office/Paths.hxx> +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/lang/XTypeProvider.hpp> +#include <com/sun/star/container/NoSuchElementException.hpp> #include <com/sun/star/container/XHierarchicalNameAccess.hpp> +#include <com/sun/star/util/XStringSubstitution.hpp> - +#include <boost/unordered_map.hpp> #include <string.h> using namespace com::sun::star::uno; @@ -55,13 +63,239 @@ using namespace com::sun::star::beans; using namespace com::sun::star::util; using namespace com::sun::star::lang; using namespace com::sun::star::container; +using namespace framework; -//_________________________________________________________________________________________________________________ -// Namespace -//_________________________________________________________________________________________________________________ +namespace { + +// Must be zero value based +enum EnvironmentType +{ + ET_HOST = 0 , + ET_YPDOMAIN , + ET_DNSDOMAIN , + ET_NTDOMAIN , + ET_OS , + ET_UNKNOWN , + ET_COUNT +}; + +// Must be zero value based +enum OperatingSystem +{ + OS_WINDOWS = 0, + OS_UNIX , + OS_SOLARIS , + OS_LINUX , + OS_UNKNOWN , + OS_COUNT +}; + +struct SubstituteRule +{ + SubstituteRule() {} + SubstituteRule( const OUString& aVarName, + const OUString& aValue, + const com::sun::star::uno::Any& aVal, + EnvironmentType aType ) : + aSubstVariable( aVarName ), aSubstValue( aValue ), aEnvValue( aVal ), aEnvType( aType ) {} + + OUString aSubstVariable; + OUString aSubstValue; + com::sun::star::uno::Any aEnvValue; + EnvironmentType aEnvType; +}; + +struct SubstitutePathNotify +{ + SubstitutePathNotify() {}; + + const com::sun::star::uno::Sequence<OUString> aPropertyNames; +}; + +class SubstituteVariables : public ::boost::unordered_map< OUString, + SubstituteRule, + OUStringHash, + ::std::equal_to< OUString > > +{ + public: + inline void free() + { + SubstituteVariables().swap( *this ); + } +}; + +typedef std::vector< SubstituteRule > SubstituteRuleVector; +class SubstitutePathVariables_Impl : public utl::ConfigItem +{ + public: + SubstitutePathVariables_Impl( const Link& aNotifyLink ); + virtual ~SubstitutePathVariables_Impl(); + + static OperatingSystem GetOperatingSystemFromString( const OUString& ); + static EnvironmentType GetEnvTypeFromString( const OUString& ); + + void GetSharePointsRules( SubstituteVariables& aSubstVarMap ); + + /** is called from the ConfigManager before application ends or from the + PropertyChangeListener if the sub tree broadcasts changes. */ + virtual void Notify( const com::sun::star::uno::Sequence< OUString >& aPropertyNames ); + virtual void Commit(); + + private: + // Wrapper methods for low-level functions + OperatingSystem GetOperatingSystem(); + const OUString& GetYPDomainName(); + const OUString& GetDNSDomainName(); + const OUString& GetNTDomainName(); + const OUString& GetHostName(); + + bool FilterRuleSet( const SubstituteRuleVector& aRuleSet, SubstituteRule& aActiveRule ); + + void ReadSharePointsFromConfiguration( com::sun::star::uno::Sequence< OUString >& aSharePointsSeq ); + void ReadSharePointRuleSetFromConfiguration( const OUString& aSharePointName, + const OUString& aSharePointNodeName, + SubstituteRuleVector& aRuleSet ); + + // Stored values for domains and host + bool m_bYPDomainRetrieved; + OUString m_aYPDomain; + bool m_bDNSDomainRetrieved; + OUString m_aDNSDomain; + bool m_bNTDomainRetrieved; + OUString m_aNTDomain; + bool m_bHostRetrieved; + OUString m_aHost; + + Link m_aListenerNotify; + const OUString m_aSharePointsNodeName; + const OUString m_aDirPropertyName; + const OUString m_aEnvPropertyName; + const OUString m_aLevelSep; +}; + +enum PreDefVariable +{ + PREDEFVAR_INST, + PREDEFVAR_PROG, + PREDEFVAR_USER, + PREDEFVAR_WORK, + PREDEFVAR_HOME, + PREDEFVAR_TEMP, + PREDEFVAR_PATH, + PREDEFVAR_LANG, + PREDEFVAR_LANGID, + PREDEFVAR_VLANG, + PREDEFVAR_INSTPATH, + PREDEFVAR_PROGPATH, + PREDEFVAR_USERPATH, + PREDEFVAR_INSTURL, + PREDEFVAR_PROGURL, + PREDEFVAR_USERURL, + PREDEFVAR_WORKDIRURL, + // New variable of hierachy service (#i32656#) + PREDEFVAR_BASEINSTURL, + PREDEFVAR_USERDATAURL, + PREDEFVAR_BRANDBASEURL, + PREDEFVAR_COUNT +}; + +struct PredefinedPathVariables +{ + // Predefined variables supported by substitute variables + LanguageType m_eLanguageType; // Lanuage type of Office + OUString m_FixedVar[ PREDEFVAR_COUNT ]; // Variable value access by PreDefVariable + OUString m_FixedVarNames[ PREDEFVAR_COUNT ]; // Variable name access by PreDefVariable +}; + +struct ReSubstFixedVarOrder +{ + sal_Int32 nVarValueLength; + PreDefVariable eVariable; + + bool operator< ( const ReSubstFixedVarOrder& aFixedVarOrder ) const + { + // Reverse operator< to have high to low ordering + return ( nVarValueLength > aFixedVarOrder.nVarValueLength ); + } +}; + +struct ReSubstUserVarOrder +{ + sal_Int32 nVarValueLength; + OUString aVarName; -namespace framework + bool operator< ( const ReSubstUserVarOrder& aUserVarOrder ) const + { + // Reverse operator< to have high to low ordering + return ( nVarValueLength > aUserVarOrder.nVarValueLength ); + } +}; + +typedef std::list< ReSubstFixedVarOrder > ReSubstFixedVarOrderVector; +typedef std::list< ReSubstUserVarOrder > ReSubstUserVarOrderVector; + +class SubstitutePathVariables : private ThreadHelpBase, // Struct for right initalization of mutex member! Must be first of baseclasses. + public ::cppu::WeakImplHelper2< ::com::sun::star::util::XStringSubstitution, css::lang::XServiceInfo > { + friend class SubstitutePathVariables_Impl; + + public: + SubstitutePathVariables( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& xContext ); + virtual ~SubstitutePathVariables(); + + // XInterface, XTypeProvider, XServiceInfo + DECLARE_XSERVICEINFO + + // XStringSubstitution + virtual OUString SAL_CALL substituteVariables( const OUString& aText, sal_Bool bSubstRequired ) + throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException); + virtual OUString SAL_CALL reSubstituteVariables( const OUString& aText ) + throw (::com::sun::star::uno::RuntimeException); + virtual OUString SAL_CALL getSubstituteVariableValue( const OUString& variable ) + throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException); + + protected: + DECL_LINK(implts_ConfigurationNotify, void *); + + void SetPredefinedPathVariables( PredefinedPathVariables& ); + OUString ConvertOSLtoUCBURL( const OUString& aOSLCompliantURL ) const; + + // Special case (transient) values can change during runtime! + // Don't store them in the pre defined struct + OUString GetWorkPath() const; + OUString GetWorkVariableValue() const; + OUString GetPathVariableValue() const; + + OUString GetHomeVariableValue() const; + + // XStringSubstitution implementation methods + OUString impl_substituteVariable( const OUString& aText, bool bSustRequired ) + throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException); + OUString impl_reSubstituteVariables( const OUString& aText ) + throw (::com::sun::star::uno::RuntimeException); + OUString impl_getSubstituteVariableValue( const OUString& variable ) + throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException); + + private: + class VarNameToIndexMap : public boost::unordered_map< OUString, + PreDefVariable, + OUStringHash, + ::std::equal_to< OUString > > + { + inline void free() + { + VarNameToIndexMap().swap( *this ); + } + }; + + VarNameToIndexMap m_aPreDefVarMap; // Mapping from pre-def variable names to enum for array access + SubstituteVariables m_aSubstVarMap; // Active rule set map indexed by variable name! + PredefinedPathVariables m_aPreDefVars; // All predefined variables + SubstitutePathVariables_Impl m_aImpl; // Implementation class that access the configuration + ReSubstFixedVarOrderVector m_aReSubstFixedVarOrder; // To speed up resubstitution fixed variables (order for lookup) + ReSubstUserVarOrderVector m_aReSubstUserVarOrder; // To speed up resubstitution user variables + com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > m_xContext; +}; struct FixedVariable { @@ -1109,6 +1343,17 @@ void SubstitutePathVariables::SetPredefinedPathVariables( PredefinedPathVariable aPreDefPathVariables.m_FixedVar[ PREDEFVAR_TEMP ] = ConvertOSLtoUCBURL( aTmp ); } -} // namespace framework +} + +extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL +com_sun_star_comp_framework_PathSubstitution_get_implementation( + css::uno::XComponentContext * context, + uno_Sequence * arguments) +{ + assert(arguments != 0 && arguments->nElements == 0); (void) arguments; + rtl::Reference<SubstitutePathVariables> x(new SubstitutePathVariables(context)); + x->acquire(); + return static_cast<cppu::OWeakObject *>(x.get()); +} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/framework/util/fwk.component b/framework/util/fwk.component index a39e355adc6c..b469434a6ea2 100644 --- a/framework/util/fwk.component +++ b/framework/util/fwk.component @@ -82,7 +82,8 @@ <implementation name="com.sun.star.comp.framework.PathSettings"> <service name="com.sun.star.util.PathSettings"/> </implementation> - <implementation name="com.sun.star.comp.framework.PathSubstitution"> + <implementation name="com.sun.star.comp.framework.PathSubstitution" + constructor="com_sun_star_comp_framework_PathSubstitution_get_implementation"> <service name="com.sun.star.util.PathSubstitution"/> </implementation> <implementation name="com.sun.star.comp.framework.PopupMenuControllerFactory" |