diff options
author | Jan Holesovsky <kendy@suse.cz> | 2011-03-23 16:59:26 +0100 |
---|---|---|
committer | Jan Holesovsky <kendy@suse.cz> | 2011-03-23 16:59:26 +0100 |
commit | d4e88719d67c5cadb55c85cd372d412fd969c613 (patch) | |
tree | 7213e99d8df05f9676cacb75e43f8a0789b263ab /framework | |
parent | dab1b528ed2e2e0f7c494b3d955d8e0ba9798c0a (diff) | |
parent | d46e1d383278641d664dce56965c11b05ac95b4a (diff) |
Merge commit 'ooo/DEV300_m103'
Conflicts:
basic/source/runtime/makefile.mk
basic/source/runtime/step2.cxx
desktop/prj/build.lst
desktop/source/app/app.cxx
desktop/source/deployment/registry/dp_backend.cxx
drawinglayer/source/attribute/fontattribute.cxx
editeng/inc/editeng/fontitem.hxx
editeng/source/editeng/edtspell.cxx
editeng/source/misc/svxacorr.cxx
framework/inc/services/substitutepathvars.hxx
framework/source/services/substitutepathvars.cxx
sfx2/qa/cppunit/makefile.mk
sfx2/source/doc/SfxDocumentMetaData.cxx
sfx2/source/doc/objxtor.cxx
svx/source/dialog/svxruler.cxx
sysui/desktop/icons/so9_base_app.ico
sysui/desktop/icons/so9_calc_app.ico
sysui/desktop/icons/so9_draw_app.ico
sysui/desktop/icons/so9_impress_app.ico
sysui/desktop/icons/so9_main_app.ico
sysui/desktop/icons/so9_math_app.ico
sysui/desktop/icons/so9_writer_app.ico
xmlhelp/source/cxxhelp/provider/databases.cxx
xmlhelp/source/cxxhelp/provider/db.cxx
xmlhelp/source/cxxhelp/provider/db.hxx
Diffstat (limited to 'framework')
-rwxr-xr-x | framework/inc/services/substitutepathvars.hxx | 221 | ||||
-rwxr-xr-x | framework/qa/complex/path_substitution/PathSubstitutionTest.java | 24 | ||||
-rw-r--r-- | framework/qa/unoapi/makefile.mk | 48 | ||||
-rwxr-xr-x | framework/source/services/backingwindow.cxx | 57 | ||||
-rwxr-xr-x | framework/source/services/substitutepathvars.cxx | 399 |
5 files changed, 405 insertions, 344 deletions
diff --git a/framework/inc/services/substitutepathvars.hxx b/framework/inc/services/substitutepathvars.hxx index 7ffd86374e..2ffec8cecf 100755 --- a/framework/inc/services/substitutepathvars.hxx +++ b/framework/inc/services/substitutepathvars.hxx @@ -37,7 +37,7 @@ #include <boost/unordered_map.hpp> //_________________________________________________________________________________________________________________ -// my own includes +// my own includes //_________________________________________________________________________________________________________________ #include <threadhelp/threadhelpbase.hxx> #include <macros/generic.hxx> @@ -47,7 +47,7 @@ #include <stdtypes.h> //_________________________________________________________________________________________________________________ -// interface includes +// interface includes //_________________________________________________________________________________________________________________ #include <com/sun/star/lang/XServiceInfo.hpp> #include <com/sun/star/lang/XTypeProvider.hpp> @@ -55,7 +55,7 @@ #include <com/sun/star/util/XStringSubstitution.hpp> //_________________________________________________________________________________________________________________ -// other includes +// other includes //_________________________________________________________________________________________________________________ #include <cppuhelper/implbase2.hxx> #include <rtl/ustring.hxx> @@ -69,24 +69,24 @@ namespace framework // Must be zero value based enum EnvironmentType { - ET_HOST = 0 , - ET_YPDOMAIN , - ET_DNSDOMAIN , - ET_NTDOMAIN , - ET_OS , - ET_UNKNOWN , - ET_COUNT + 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 + OS_WINDOWS = 0, + OS_UNIX , + OS_SOLARIS , + OS_LINUX , + OS_UNKNOWN , + OS_COUNT }; struct SubstituteRule @@ -98,19 +98,20 @@ struct SubstituteRule EnvironmentType aType ) : aSubstVariable( aVarName ), aSubstValue( aValue ), aEnvValue( aVal ), aEnvType( aType ) {} - rtl::OUString aSubstVariable; - rtl::OUString aSubstValue; - com::sun::star::uno::Any aEnvValue; - EnvironmentType aEnvType; + rtl::OUString aSubstVariable; + rtl::OUString aSubstValue; + com::sun::star::uno::Any aEnvValue; + EnvironmentType aEnvType; }; struct SubstitutePathNotify { SubstitutePathNotify() {}; + const com::sun::star::uno::Sequence<rtl::OUString> aPropertyNames; }; -class SubstituteVariables : public ::boost::unordered_map< ::rtl::OUString, +class SubstituteVariables : public ::boost::unordered_map< ::rtl::OUString, SubstituteRule, OUStringHashCode, ::std::equal_to< ::rtl::OUString > > @@ -132,45 +133,45 @@ class SubstitutePathVariables_Impl : public utl::ConfigItem static OperatingSystem GetOperatingSystemFromString( const rtl::OUString& ); static EnvironmentType GetEnvTypeFromString( const rtl::OUString& ); - void GetSharePointsRules( SubstituteVariables& aSubstVarMap ); + 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< rtl::OUString >& aPropertyNames ); - virtual void Commit(); - - private: - // Wrapper methods for low-level functions - OperatingSystem GetOperatingSystem(); - const rtl::OUString& GetYPDomainName(); - const rtl::OUString& GetDNSDomainName(); - const rtl::OUString& GetNTDomainName(); - const rtl::OUString& GetHostName(); - - sal_Bool FilterRuleSet( const SubstituteRuleVector& aRuleSet, SubstituteRule& aActiveRule ); - - void ReadSharePointsFromConfiguration( com::sun::star::uno::Sequence< rtl::OUString >& aSharePointsSeq ); - void ReadSharePointRuleSetFromConfiguration( const rtl::OUString& aSharePointName, - const rtl::OUString& aSharePointNodeName, - SubstituteRuleVector& aRuleSet ); - - // Stored values for domains and host - sal_Bool m_bYPDomainRetrieved; - rtl::OUString m_aYPDomain; - sal_Bool m_bDNSDomainRetrieved; - rtl::OUString m_aDNSDomain; - sal_Bool m_bNTDomainRetrieved; - rtl::OUString m_aNTDomain; - sal_Bool m_bHostRetrieved; - rtl::OUString m_aHost; - sal_Bool m_bOSRetrieved; - OperatingSystem m_eOSType; - - Link m_aListenerNotify; - const rtl::OUString m_aSharePointsNodeName; - const rtl::OUString m_aDirPropertyName; - const rtl::OUString m_aEnvPropertyName; - const rtl::OUString m_aLevelSep; + virtual void Notify( const com::sun::star::uno::Sequence< rtl::OUString >& aPropertyNames ); + virtual void Commit(); + + private: + // Wrapper methods for low-level functions + OperatingSystem GetOperatingSystem(); + const rtl::OUString& GetYPDomainName(); + const rtl::OUString& GetDNSDomainName(); + const rtl::OUString& GetNTDomainName(); + const rtl::OUString& GetHostName(); + + bool FilterRuleSet( const SubstituteRuleVector& aRuleSet, SubstituteRule& aActiveRule ); + + void ReadSharePointsFromConfiguration( com::sun::star::uno::Sequence< rtl::OUString >& aSharePointsSeq ); + void ReadSharePointRuleSetFromConfiguration( const rtl::OUString& aSharePointName, + const rtl::OUString& aSharePointNodeName, + SubstituteRuleVector& aRuleSet ); + + // Stored values for domains and host + bool m_bYPDomainRetrieved; + rtl::OUString m_aYPDomain; + bool m_bDNSDomainRetrieved; + rtl::OUString m_aDNSDomain; + bool m_bNTDomainRetrieved; + rtl::OUString m_aNTDomain; + bool m_bHostRetrieved; + rtl::OUString m_aHost; + bool m_bOSRetrieved; + OperatingSystem m_eOSType; + + Link m_aListenerNotify; + const rtl::OUString m_aSharePointsNodeName; + const rtl::OUString m_aDirPropertyName; + const rtl::OUString m_aEnvPropertyName; + const rtl::OUString m_aLevelSep; }; enum PreDefVariable @@ -202,15 +203,15 @@ enum PreDefVariable struct PredefinedPathVariables { // Predefined variables supported by substitute variables - LanguageType m_eLanguageType; // Lanuage type of Office - rtl::OUString m_FixedVar[ PREDEFVAR_COUNT ]; // Variable value access by PreDefVariable - rtl::OUString m_FixedVarNames[ PREDEFVAR_COUNT ]; // Variable name access by PreDefVariable + LanguageType m_eLanguageType; // Lanuage type of Office + rtl::OUString m_FixedVar[ PREDEFVAR_COUNT ]; // Variable value access by PreDefVariable + rtl::OUString m_FixedVarNames[ PREDEFVAR_COUNT ]; // Variable name access by PreDefVariable }; struct ReSubstFixedVarOrder { - sal_Int32 nVarValueLength; - PreDefVariable eVariable; + sal_Int32 nVarValueLength; + PreDefVariable eVariable; bool operator< ( const ReSubstFixedVarOrder& aFixedVarOrder ) const { @@ -221,8 +222,8 @@ struct ReSubstFixedVarOrder struct ReSubstUserVarOrder { - sal_Int32 nVarValueLength; - rtl::OUString aVarName; + sal_Int32 nVarValueLength; + rtl::OUString aVarName; bool operator< ( const ReSubstUserVarOrder& aUserVarOrder ) const { @@ -234,8 +235,8 @@ struct ReSubstUserVarOrder 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> +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; @@ -254,51 +255,51 @@ class SubstitutePathVariables : private ThreadHelpBase , // Struct for ri virtual ::rtl::OUString SAL_CALL getSubstituteVariableValue( const ::rtl::OUString& variable ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException); - protected: - DECL_LINK( implts_ConfigurationNotify, SubstitutePathNotify* ); - - void SetPredefinedPathVariables( PredefinedPathVariables& ); - rtl::OUString ConvertOSLtoUCBURL( const rtl::OUString& aOSLCompliantURL ) const; - - // Special case (transient) values can change during runtime! - // Don't store them in the pre defined struct - rtl::OUString GetWorkPath() const; - rtl::OUString GetWorkVariableValue() const; - rtl::OUString GetPathVariableValue() const; - - rtl::OUString GetHomeVariableValue() const; - - // XStringSubstitution implementation methods - rtl::OUString impl_substituteVariable( const ::rtl::OUString& aText, sal_Bool bSustRequired ) - throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException); - rtl::OUString impl_reSubstituteVariables( const ::rtl::OUString& aText ) - throw (::com::sun::star::uno::RuntimeException); - ::rtl::OUString impl_getSubstituteVariableValue( const ::rtl::OUString& variable ) - throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException); - - private: - class VarNameToIndexMap : public boost::unordered_map< ::rtl::OUString, - PreDefVariable, - OUStringHashCode, - ::std::equal_to< ::rtl::OUString > > - { - inline void free() + protected: + DECL_LINK( implts_ConfigurationNotify, SubstitutePathNotify* ); + + void SetPredefinedPathVariables( PredefinedPathVariables& ); + rtl::OUString ConvertOSLtoUCBURL( const rtl::OUString& aOSLCompliantURL ) const; + + // Special case (transient) values can change during runtime! + // Don't store them in the pre defined struct + rtl::OUString GetWorkPath() const; + rtl::OUString GetWorkVariableValue() const; + rtl::OUString GetPathVariableValue() const; + + rtl::OUString GetHomeVariableValue() const; + + // XStringSubstitution implementation methods + rtl::OUString impl_substituteVariable( const ::rtl::OUString& aText, bool bSustRequired ) + throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException); + rtl::OUString impl_reSubstituteVariables( const ::rtl::OUString& aText ) + throw (::com::sun::star::uno::RuntimeException); + ::rtl::OUString impl_getSubstituteVariableValue( const ::rtl::OUString& variable ) + throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException); + + private: + class VarNameToIndexMap : public boost::unordered_map< ::rtl::OUString, + PreDefVariable, + OUStringHashCode, + ::std::equal_to< ::rtl::OUString > > { - VarNameToIndexMap().swap( *this ); - } - }; - - // heavy used string - const rtl::OUString m_aVarStart; - const rtl::OUString m_aVarEnd; - - 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::lang::XMultiServiceFactory > m_xServiceManager; + inline void free() + { + VarNameToIndexMap().swap( *this ); + } + }; + + // heavy used string + const rtl::OUString m_aVarStart; + const rtl::OUString m_aVarEnd; + + 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::lang::XMultiServiceFactory > m_xServiceManager; }; } diff --git a/framework/qa/complex/path_substitution/PathSubstitutionTest.java b/framework/qa/complex/path_substitution/PathSubstitutionTest.java index 23eea8da42..b9278aa717 100755 --- a/framework/qa/complex/path_substitution/PathSubstitutionTest.java +++ b/framework/qa/complex/path_substitution/PathSubstitutionTest.java @@ -63,20 +63,20 @@ public class PathSubstitutionTest /** * Create an array with all substitution variables */ - @Before private void initialize() + @Before public void initialize() { substVars = new VariableContainer(); - substVars.add("$(prog)", false, true); - substVars.add("$(inst)", false, true); - substVars.add("$(user)", false, true); - substVars.add("$(work)", false, true); - substVars.add("$(home)", false, true); - substVars.add("$(temp)", false, true); + substVars.add("$(prog)", true, true); + substVars.add("$(inst)", true, true); + substVars.add("$(user)", true, true); + substVars.add("$(work)", true, true); + substVars.add("$(home)", true, true); + substVars.add("$(temp)", true, true); substVars.add("$(lang)", false, false); substVars.add("$(langid)", false, false); substVars.add("$(vlang)", false, false); // path won't resubstitute - substVars.add("$(path)", false, false); + substVars.add("$(path)", true, false); } /** @@ -106,8 +106,6 @@ public class PathSubstitutionTest return; } -// initialize(); - for (int i = 0; i < substVars.size(); i++) { String var = substVars.getVariable(i); @@ -148,6 +146,12 @@ public class PathSubstitutionTest //in middle of text works substString = "file:///starting/" + var + "/path"; + String sCanSubstAllPos; + if (substVars.onlySubstituteAtBegin(i)) + sCanSubstAllPos = "NO"; + else + sCanSubstAllPos = "YES"; + System.out.println("Variable can substitute within string: "+sCanSubstAllPos); System.out.println("Substitute '" + substString + "'"); newValue = oObj.substituteVariables(substString, false); System.out.println("Return value '" + newValue + "'"); diff --git a/framework/qa/unoapi/makefile.mk b/framework/qa/unoapi/makefile.mk new file mode 100644 index 0000000000..38a6cf7cce --- /dev/null +++ b/framework/qa/unoapi/makefile.mk @@ -0,0 +1,48 @@ +#************************************************************************* +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# 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. +#***********************************************************************/ + +.IF "$(OOO_SUBSEQUENT_TESTS)" == "" +nothing .PHONY: +.ELSE + +PRJ = ../.. +PRJNAME = framework +TARGET = qa_unoapi + +.IF "$(OOO_JUNIT_JAR)" != "" +PACKAGE = org/openoffice/framework/qa/unoapi +JAVATESTFILES = Test.java +JAVAFILES = $(JAVATESTFILES) +JARFILES = OOoRunner.jar ridl.jar test.jar +EXTRAJARFILES = $(OOO_JUNIT_JAR) +.END + +.INCLUDE: settings.mk +.INCLUDE: target.mk +.INCLUDE: installationtest.mk + +ALLTAR : javatest + +.END diff --git a/framework/source/services/backingwindow.cxx b/framework/source/services/backingwindow.cxx index e85bd5e046..bab072dcba 100755 --- a/framework/source/services/backingwindow.cxx +++ b/framework/source/services/backingwindow.cxx @@ -397,7 +397,7 @@ void BackingWindow::prepareRecentFileMenu() void BackingWindow::initBackground() { - SetBackground( GetSettings().GetStyleSettings().GetWorkspaceGradient() ); + SetBackground(); bool bDark = GetSettings().GetStyleSettings().GetHighContrastMode(); if( bDark ) @@ -705,36 +705,39 @@ void BackingWindow::layoutButton( void BackingWindow::Paint( const Rectangle& ) { + Wallpaper aBack( GetSettings().GetStyleSettings().GetWorkspaceGradient() ); + Region aClip( Rectangle( Point( 0, 0 ), GetOutputSizePixel() ) ); + Rectangle aBmpRect(maControlRect); + aBmpRect.Left() -= nShadowLeft; + aBmpRect.Top() -= nShadowTop; + aBmpRect.Right() += nShadowRight; + aBmpRect.Bottom() += nShadowBottom; + aClip.Exclude( aBmpRect ); + Push( PUSH_CLIPREGION ); + IntersectClipRegion( aClip ); + DrawWallpaper( Rectangle( Point( 0, 0 ), GetOutputSizePixel() ), aBack ); + Pop(); + + VirtualDevice aDev( *this ); + aDev.EnableRTL( IsRTLEnabled() ); + aDev.SetOutputSizePixel( aBmpRect.GetSize() ); + Point aOffset( Point( 0, 0 ) - aBmpRect.TopLeft() ); + aDev.DrawWallpaper( Rectangle( aOffset, GetOutputSizePixel() ), aBack ); // draw bitmap - if( GetSettings().GetLayoutRTL() ) - { - Point aTL( maControlRect.TopLeft() ); - aTL.X() -= nShadowRight; - aTL.Y() -= nShadowTop; - DrawBitmapEx( aTL, maBackgroundLeft ); - aTL.X() += maBackgroundLeft.GetSizePixel().Width(); - if( !!maBackgroundMiddle ) - { - DrawBitmapEx( aTL, maBackgroundMiddle ); - aTL.X() += maBackgroundMiddle.GetSizePixel().Width(); - } - DrawBitmapEx( aTL, maBackgroundRight ); - } - else + Point aTL( 0, 0 ); + aDev.DrawBitmapEx( aTL, maBackgroundLeft ); + aTL.X() += maBackgroundLeft.GetSizePixel().Width(); + if( !!maBackgroundMiddle ) { - Point aTL( maControlRect.TopLeft() ); - aTL.X() -= nShadowLeft; - aTL.Y() -= nShadowTop; - DrawBitmapEx( aTL, maBackgroundLeft ); - aTL.X() += maBackgroundLeft.GetSizePixel().Width(); - if( !!maBackgroundMiddle ) - { - DrawBitmapEx( aTL, maBackgroundMiddle ); - aTL.X() += maBackgroundMiddle.GetSizePixel().Width(); - } - DrawBitmapEx( aTL, maBackgroundRight ); + aDev.DrawBitmapEx( aTL, maBackgroundMiddle ); + aTL.X() += maBackgroundMiddle.GetSizePixel().Width(); } + aDev.DrawBitmapEx( aTL, maBackgroundRight ); + + DrawOutDev( aBmpRect.TopLeft(), aBmpRect.GetSize(), + Point( 0, 0 ), aBmpRect.GetSize(), + aDev ); } long BackingWindow::Notify( NotifyEvent& rNEvt ) diff --git a/framework/source/services/substitutepathvars.cxx b/framework/source/services/substitutepathvars.cxx index ace5ffce6a..4724978661 100755 --- a/framework/source/services/substitutepathvars.cxx +++ b/framework/source/services/substitutepathvars.cxx @@ -30,7 +30,7 @@ #include "precompiled_framework.hxx" //_________________________________________________________________________________________________________________ -// my own includes +// my own includes //_________________________________________________________________________________________________________________ #include "services/substitutepathvars.hxx" #include <threadhelp/resetableguard.hxx> @@ -38,12 +38,12 @@ #include "services.h" //_________________________________________________________________________________________________________________ -// interface includes +// interface includes //_________________________________________________________________________________________________________________ #include <com/sun/star/beans/XPropertySet.hpp> //_________________________________________________________________________________________________________________ -// includes of other projects +// includes of other projects //_________________________________________________________________________________________________________________ #include <unotools/configitem.hxx> #include <unotools/localfilehelper.hxx> @@ -68,64 +68,65 @@ #include <string.h> //_________________________________________________________________________________________________________________ -// Defines +// Defines //_________________________________________________________________________________________________________________ // -#define STRPOS_NOTFOUND (sal_Int32)-1 +#define STRPOS_NOTFOUND (sal_Int32)-1 -#define ASCII_STR( val ) rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( val )) +#define ASCII_STR( val ) rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( val )) -#define SEARCHPATH_DELIMITER ';' +#define SEARCHPATH_DELIMITER ';' // Variable start/end characters -#define SIGN_STARTVARIABLE ASCII_STR("$(") -#define SIGN_ENDVARIABLE ASCII_STR(")") +#define SIGN_STARTVARIABLE ASCII_STR("$(") +#define SIGN_ENDVARIABLE ASCII_STR(")") // Length of SUBSTITUTE_... to replace it with real values. -#define REPLACELENGTH_INST 7 -#define REPLACELENGTH_PROG 7 -#define REPLACELENGTH_USER 7 -#define REPLACELENGTH_WORK 7 -#define REPLACELENGTH_HOME 7 -#define REPLACELENGTH_TEMP 7 -#define REPLACELENGTH_PATH 7 -#define REPLACELENGTH_INSTPATH 11 -#define REPLACELENGTH_PROGPATH 11 -#define REPLACELENGTH_USERPATH 11 -#define REPLACELENGTH_INSTURL 10 -#define REPLACELENGTH_PROGURL 10 -#define REPLACELENGTH_USERURL 10 -#define REPLACELENGTH_PATH 7 -#define REPLACELENGTH_LANG 7 -#define REPLACELENGTH_LANGID 9 -#define REPLACELENGTH_VLANG 8 -#define REPLACELENGTH_WORKDIRURL 13 +#define REPLACELENGTH_INST 7 +#define REPLACELENGTH_PROG 7 +#define REPLACELENGTH_USER 7 +#define REPLACELENGTH_WORK 7 +#define REPLACELENGTH_HOME 7 +#define REPLACELENGTH_TEMP 7 +#define REPLACELENGTH_PATH 7 +#define REPLACELENGTH_INSTPATH 11 +#define REPLACELENGTH_PROGPATH 11 +#define REPLACELENGTH_USERPATH 11 +#define REPLACELENGTH_INSTURL 10 +#define REPLACELENGTH_PROGURL 10 +#define REPLACELENGTH_USERURL 10 +#define REPLACELENGTH_PATH 7 +#define REPLACELENGTH_LANG 7 +#define REPLACELENGTH_LANGID 9 +#define REPLACELENGTH_VLANG 8 +#define REPLACELENGTH_WORKDIRURL 13 // New variable of hierachy service (#i32656#) #define REPLACELENGTH_BASEINSTURL 14 #define REPLACELENGTH_USERDATAURL 14 // Name of the pre defined path variables -#define VARIABLE_INST "$(inst)" -#define VARIABLE_PROG "$(prog)" -#define VARIABLE_USER "$(user)" -#define VARIABLE_WORK "$(work)" -#define VARIABLE_HOME "$(home)" -#define VARIABLE_TEMP "$(temp)" -#define VARIABLE_PATH "$(path)" -#define VARIABLE_LANG "$(lang)" -#define VARIABLE_LANGID "$(langid)" -#define VARIABLE_VLANG "$(vlang)" -#define VARIABLE_INSTPATH "$(instpath)" -#define VARIABLE_PROGPATH "$(progpath)" -#define VARIABLE_USERPATH "$(userpath)" -#define VARIABLE_INSTURL "$(insturl)" -#define VARIABLE_PROGURL "$(progurl)" -#define VARIABLE_USERURL "$(userurl)" -#define VARIABLE_WORKDIRURL "$(workdirurl)" +#define VARIABLE_INST "$(inst)" +#define VARIABLE_PROG "$(prog)" +#define VARIABLE_USER "$(user)" +#define VARIABLE_WORK "$(work)" +#define VARIABLE_HOME "$(home)" +#define VARIABLE_TEMP "$(temp)" +#define VARIABLE_PATH "$(path)" +#define VARIABLE_LANG "$(lang)" +#define VARIABLE_LANGID "$(langid)" +#define VARIABLE_VLANG "$(vlang)" +#define VARIABLE_INSTPATH "$(instpath)" +#define VARIABLE_PROGPATH "$(progpath)" +#define VARIABLE_USERPATH "$(userpath)" +#define VARIABLE_INSTURL "$(insturl)" +#define VARIABLE_PROGURL "$(progurl)" +#define VARIABLE_USERURL "$(userurl)" +#define VARIABLE_WORKDIRURL "$(workdirurl)" // New variable of hierachy service (#i32656#) -#define VARIABLE_BASEINSTURL "$(baseinsturl)" -#define VARIABLE_USERDATAURL "$(userdataurl)" +#define VARIABLE_BASEINSTURL "$(baseinsturl)" +#define VARIABLE_USERDATAURL "$(userdataurl)" +#define VARIABLE_BRANDBASEURL "$(brandbaseurl)" using namespace com::sun::star::uno; using namespace com::sun::star::beans; @@ -134,7 +135,7 @@ using namespace com::sun::star::lang; using namespace com::sun::star::container; //_________________________________________________________________________________________________________________ -// Namespace +// Namespace //_________________________________________________________________________________________________________________ // @@ -143,15 +144,16 @@ namespace framework struct FixedVariable { - const char* pVarName; - PreDefVariable nEnumValue; - int nStrLen; + const char* pVarName; + PreDefVariable nEnumValue; + int nStrLen; + bool bAbsPath; }; struct TableEntry { const char* pOSString; - int nStrLen; + int nStrLen; }; // Table with valid operating system strings @@ -159,11 +161,11 @@ struct TableEntry // of the string static TableEntry aOSTable[OS_COUNT] = { - { "WINDOWS" , 7 }, - { "UNIX" , 4 }, - { "SOLARIS" , 7 }, - { "LINUX" , 5 }, - { "" , 0 } // unknown + { "WINDOWS" , 7 }, + { "UNIX" , 4 }, + { "SOLARIS" , 7 }, + { "LINUX" , 5 }, + { "" , 0 } // unknown }; // Table with valid environment variables @@ -171,12 +173,12 @@ static TableEntry aOSTable[OS_COUNT] = // the length of the string. static TableEntry aEnvTable[ET_COUNT] = { - { "HOST" , 4 }, - { "YPDOMAIN" , 8 }, - { "DNSDOMAIN" , 9 }, - { "NTDOMAIN" , 8 }, - { "OS" , 2 }, - { "" , 0 } // unknown + { "HOST" , 4 }, + { "YPDOMAIN" , 8 }, + { "DNSDOMAIN" , 9 }, + { "NTDOMAIN" , 8 }, + { "OS" , 2 }, + { "" , 0 } // unknown }; // Priority table for the environment types. Lower numbers define @@ -184,43 +186,42 @@ static TableEntry aEnvTable[ET_COUNT] = // that the first match wins!! static sal_Int16 aEnvPrioTable[ET_COUNT] = { - 1, // ET_HOST - 2, // ET_IPDOMAIN - 2, // ET_DNSDOMAIN - 2, // ET_NTDOMAIN - 3, // ET_OS - 99, // ET_UNKNOWN + 1, // ET_HOST + 2, // ET_IPDOMAIN + 2, // ET_DNSDOMAIN + 2, // ET_NTDOMAIN + 3, // ET_OS + 99, // ET_UNKNOWN }; // Table with all fixed/predefined variables supported. static FixedVariable aFixedVarTable[] = { - { VARIABLE_INST, PREDEFVAR_INST, REPLACELENGTH_INST }, - { VARIABLE_PROG, PREDEFVAR_PROG, REPLACELENGTH_PROG }, - { VARIABLE_USER, PREDEFVAR_USER, REPLACELENGTH_USER }, - { VARIABLE_WORK, PREDEFVAR_WORK, REPLACELENGTH_WORK }, // Special variable (transient)! - { VARIABLE_HOME, PREDEFVAR_HOME, REPLACELENGTH_HOME }, - { VARIABLE_TEMP, PREDEFVAR_TEMP, REPLACELENGTH_TEMP }, - { VARIABLE_PATH, PREDEFVAR_PATH, REPLACELENGTH_PATH }, - { VARIABLE_LANG, PREDEFVAR_LANG, REPLACELENGTH_LANG }, - { VARIABLE_LANGID, PREDEFVAR_LANGID, REPLACELENGTH_LANGID }, - { VARIABLE_VLANG, PREDEFVAR_VLANG, REPLACELENGTH_VLANG }, - { VARIABLE_INSTPATH, PREDEFVAR_INSTPATH, REPLACELENGTH_INSTPATH }, - { VARIABLE_PROGPATH, PREDEFVAR_PROGPATH, REPLACELENGTH_PROGPATH }, - { VARIABLE_USERPATH, PREDEFVAR_USERPATH, REPLACELENGTH_USERPATH }, - { VARIABLE_INSTURL, PREDEFVAR_INSTURL, REPLACELENGTH_INSTURL }, - { VARIABLE_PROGURL, PREDEFVAR_PROGURL, REPLACELENGTH_PROGURL }, - { VARIABLE_USERURL, PREDEFVAR_USERURL, REPLACELENGTH_USERURL }, - { VARIABLE_WORKDIRURL, PREDEFVAR_WORKDIRURL, REPLACELENGTH_WORKDIRURL }, // Special variable (transient) and don't use for resubstitution! + { VARIABLE_INST, PREDEFVAR_INST, REPLACELENGTH_INST, true }, + { VARIABLE_PROG, PREDEFVAR_PROG, REPLACELENGTH_PROG, true }, + { VARIABLE_USER, PREDEFVAR_USER, REPLACELENGTH_USER, true }, + { VARIABLE_WORK, PREDEFVAR_WORK, REPLACELENGTH_WORK, true }, // Special variable (transient)! + { VARIABLE_HOME, PREDEFVAR_HOME, REPLACELENGTH_HOME, true }, + { VARIABLE_TEMP, PREDEFVAR_TEMP, REPLACELENGTH_TEMP, true }, + { VARIABLE_PATH, PREDEFVAR_PATH, REPLACELENGTH_PATH, true }, + { VARIABLE_LANG, PREDEFVAR_LANG, REPLACELENGTH_LANG, false }, + { VARIABLE_LANGID, PREDEFVAR_LANGID, REPLACELENGTH_LANGID, false }, + { VARIABLE_VLANG, PREDEFVAR_VLANG, REPLACELENGTH_VLANG, false }, + { VARIABLE_INSTPATH, PREDEFVAR_INSTPATH, REPLACELENGTH_INSTPATH, true }, + { VARIABLE_PROGPATH, PREDEFVAR_PROGPATH, REPLACELENGTH_PROGPATH, true }, + { VARIABLE_USERPATH, PREDEFVAR_USERPATH, REPLACELENGTH_USERPATH, true }, + { VARIABLE_INSTURL, PREDEFVAR_INSTURL, REPLACELENGTH_INSTURL, true }, + { VARIABLE_PROGURL, PREDEFVAR_PROGURL, REPLACELENGTH_PROGURL, true }, + { VARIABLE_USERURL, PREDEFVAR_USERURL, REPLACELENGTH_USERURL, true }, + { VARIABLE_WORKDIRURL, PREDEFVAR_WORKDIRURL, REPLACELENGTH_WORKDIRURL,true }, // Special variable (transient) and don't use for resubstitution! // New variable of hierachy service (#i32656#) - { VARIABLE_BASEINSTURL, PREDEFVAR_BASEINSTURL, REPLACELENGTH_BASEINSTURL }, - { VARIABLE_USERDATAURL, PREDEFVAR_USERDATAURL, REPLACELENGTH_USERDATAURL }, - { "$(brandbaseurl)", PREDEFVAR_BRANDBASEURL, - RTL_CONSTASCII_LENGTH("$(brandbaseurl)") } + { VARIABLE_BASEINSTURL, PREDEFVAR_BASEINSTURL, REPLACELENGTH_BASEINSTURL,true }, + { VARIABLE_USERDATAURL, PREDEFVAR_USERDATAURL, REPLACELENGTH_USERDATAURL,true }, + { VARIABLE_BRANDBASEURL,PREDEFVAR_BRANDBASEURL, RTL_CONSTASCII_LENGTH(VARIABLE_BRANDBASEURL), true } }; //_________________________________________________________________________________________________________________ -// Implementation helper classes +// Implementation helper classes //_________________________________________________________________________________________________________________ // @@ -248,11 +249,11 @@ EnvironmentType SubstitutePathVariables_Impl::GetEnvTypeFromString( const rtl::O SubstitutePathVariables_Impl::SubstitutePathVariables_Impl( const Link& aNotifyLink ) : utl::ConfigItem( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Office.Substitution" ))), - m_bYPDomainRetrieved( sal_False ), - m_bDNSDomainRetrieved( sal_False ), - m_bNTDomainRetrieved( sal_False ), - m_bHostRetrieved( sal_False ), - m_bOSRetrieved( sal_False ), + m_bYPDomainRetrieved( false ), + m_bDNSDomainRetrieved( false ), + m_bNTDomainRetrieved( false ), + m_bHostRetrieved( false ), + m_bOSRetrieved( false ), m_aListenerNotify( aNotifyLink ), m_aSharePointsNodeName( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "SharePoints" ))), m_aDirPropertyName( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "/Directory" ))), @@ -298,10 +299,9 @@ void SubstitutePathVariables_Impl::GetSharePointsRules( SubstituteVariables& aSu // We have found an active rule aActiveRule.aSubstVariable = aSharePointNames[ nSharePoints ]; aSubstVarMap.insert( SubstituteVariables::value_type( - aActiveRule.aSubstVariable, aActiveRule )); + aActiveRule.aSubstVariable, aActiveRule )); } } - ++nSharePoints; } } @@ -318,7 +318,7 @@ void SubstitutePathVariables_Impl::Commit() //_________________________________________________________________________________________________________________ -// private methods +// private methods //_________________________________________________________________________________________________________________ // @@ -358,8 +358,8 @@ const rtl::OUString& SubstitutePathVariables_Impl::GetDNSDomainName() { if ( !m_bDNSDomainRetrieved ) { - rtl::OUString aTemp; - osl::SocketAddr aSockAddr; + rtl::OUString aTemp; + osl::SocketAddr aSockAddr; oslSocketResult aResult; rtl::OUString aHostName = GetHostName(); @@ -394,7 +394,7 @@ const rtl::OUString& SubstitutePathVariables_Impl::GetHostName() { if ( !m_bHostRetrieved ) { - rtl::OUString aHostName; + rtl::OUString aHostName; oslSocketResult aSocketResult; m_aHost = osl::SocketAddr::getLocalHostname( &aSocketResult ).toAsciiLowerCase(); @@ -403,18 +403,19 @@ const rtl::OUString& SubstitutePathVariables_Impl::GetHostName() return m_aHost; } -sal_Bool SubstitutePathVariables_Impl::FilterRuleSet( const SubstituteRuleVector& aRuleSet, SubstituteRule& aActiveRule ) +bool SubstitutePathVariables_Impl::FilterRuleSet( const SubstituteRuleVector& aRuleSet, SubstituteRule& aActiveRule ) { - sal_Bool bResult = sal_False; + bool bResult = sal_False; if ( !aRuleSet.empty() ) { - sal_Int16 nPrioCurrentRule = aEnvPrioTable[ ET_UNKNOWN ]; const sal_uInt32 nCount = aRuleSet.size(); + + sal_Int16 nPrioCurrentRule = aEnvPrioTable[ ET_UNKNOWN ]; for ( sal_uInt32 nIndex = 0; nIndex < nCount; nIndex++ ) { const SubstituteRule& aRule = aRuleSet[nIndex]; - EnvironmentType eEnvType = aRule.aEnvType; + EnvironmentType eEnvType = aRule.aEnvType; // Check if environment type has a higher priority than current one! if ( nPrioCurrentRule > aEnvPrioTable[eEnvType] ) @@ -429,13 +430,13 @@ sal_Bool SubstitutePathVariables_Impl::FilterRuleSet( const SubstituteRuleVector aHostStr = aHostStr.toAsciiLowerCase(); // Pattern match if domain environment match - WildCard aPattern(aHostStr); - sal_Bool bMatch = aPattern.Matches(aHost); + WildCard aPattern(aHostStr); + bool bMatch = aPattern.Matches(aHost); if ( bMatch ) { - aActiveRule = aRule; - bResult = sal_True; - nPrioCurrentRule = aEnvPrioTable[eEnvType]; + aActiveRule = aRule; + bResult = true; + nPrioCurrentRule = aEnvPrioTable[eEnvType]; } } break; @@ -444,8 +445,8 @@ sal_Bool SubstitutePathVariables_Impl::FilterRuleSet( const SubstituteRuleVector case ET_DNSDOMAIN: case ET_NTDOMAIN: { - rtl::OUString aDomain; - rtl::OUString aDomainStr; + rtl::OUString aDomain; + rtl::OUString aDomainStr; aRule.aEnvValue >>= aDomainStr; aDomainStr = aDomainStr.toAsciiLowerCase(); @@ -458,13 +459,13 @@ sal_Bool SubstitutePathVariables_Impl::FilterRuleSet( const SubstituteRuleVector aDomain = GetNTDomainName(); // Pattern match if domain environment match - WildCard aPattern(aDomainStr); - sal_Bool bMatch = aPattern.Matches(aDomain); + WildCard aPattern(aDomainStr); + bool bMatch = aPattern.Matches(aDomain); if ( bMatch ) { - aActiveRule = aRule; - bResult = sal_True; - nPrioCurrentRule = aEnvPrioTable[eEnvType]; + aActiveRule = aRule; + bResult = true; + nPrioCurrentRule = aEnvPrioTable[eEnvType]; } } break; @@ -472,29 +473,29 @@ sal_Bool SubstitutePathVariables_Impl::FilterRuleSet( const SubstituteRuleVector case ET_OS: { // No pattern matching for OS type - OperatingSystem eOSType = GetOperatingSystem(); + OperatingSystem eOSType = GetOperatingSystem(); sal_Int16 nValue = 0; aRule.aEnvValue >>= nValue; - sal_Bool bUnix = ( eOSType == OS_LINUX ) || ( eOSType == OS_SOLARIS ); - OperatingSystem eRuleOSType = (OperatingSystem)nValue; + bool bUnix = ( eOSType == OS_LINUX ) || ( eOSType == OS_SOLARIS ); + OperatingSystem eRuleOSType = (OperatingSystem)nValue; // Match if OS identical or rule is set to UNIX and OS is LINUX/SOLARIS! if (( eRuleOSType == eOSType ) || ( eRuleOSType == OS_UNIX && bUnix )) { - aActiveRule = aRule; - bResult = sal_True; - nPrioCurrentRule = aEnvPrioTable[eEnvType]; + aActiveRule = aRule; + bResult = true; + nPrioCurrentRule = aEnvPrioTable[eEnvType]; } } break; - case ET_UNKNOWN: // nothing to do - break; + case ET_UNKNOWN: // nothing to do + break; - default: - break; + default: + break; } } } @@ -510,9 +511,9 @@ void SubstitutePathVariables_Impl::ReadSharePointsFromConfiguration( Sequence< r } void SubstitutePathVariables_Impl::ReadSharePointRuleSetFromConfiguration( - const rtl::OUString& aSharePointName, - const rtl::OUString& aSharePointNodeName, - SubstituteRuleVector& rRuleSet ) + const rtl::OUString& aSharePointName, + const rtl::OUString& aSharePointNodeName, + SubstituteRuleVector& rRuleSet ) { Sequence< rtl::OUString > aSharePointMappingsNodeNames = GetNodeNames( aSharePointNodeName, utl::CONFIG_NAME_LOCAL_PATH ); @@ -565,7 +566,7 @@ void SubstitutePathVariables_Impl::ReadSharePointRuleSetFromConfiguration( } // Decode the environment and optional the operatng system settings - Any aEnvValue; + Any aEnvValue; EnvironmentType eEnvType = GetEnvTypeFromString( aEnvUsed ); if ( eEnvType == ET_OS ) { @@ -584,13 +585,12 @@ void SubstitutePathVariables_Impl::ReadSharePointRuleSetFromConfiguration( } //***************************************************************************************************************** -// XInterface, XTypeProvider, XServiceInfo +// XInterface, XTypeProvider, XServiceInfo //***************************************************************************************************************** -DEFINE_XSERVICEINFO_ONEINSTANCESERVICE ( SubstitutePathVariables , - ::cppu::OWeakObject , - SERVICENAME_SUBSTITUTEPATHVARIABLES , - IMPLEMENTATIONNAME_SUBSTITUTEPATHVARIABLES - ) +DEFINE_XSERVICEINFO_ONEINSTANCESERVICE ( SubstitutePathVariables , + ::cppu::OWeakObject , + SERVICENAME_SUBSTITUTEPATHVARIABLES , + IMPLEMENTATIONNAME_SUBSTITUTEPATHVARIABLES ) DEFINE_INIT_SERVICE ( SubstitutePathVariables, {} ) @@ -622,16 +622,15 @@ SubstitutePathVariables::SubstitutePathVariables( const Reference< XMultiService // Sort predefined/fixed variable to path length for ( i = 0; i < PREDEFVAR_COUNT; i++ ) { - if (( i != PREDEFVAR_WORKDIRURL ) && - ( i != PREDEFVAR_PATH )) + if (( i != PREDEFVAR_WORKDIRURL ) && ( i != PREDEFVAR_PATH )) { // Special path variables, don't include into automatic resubstituion search! // $(workdirurl) is not allowed to resubstitute! This variable is the value of path settings entry // and it could be possible that it will be resubstituted by itself!! // Example: WORK_PATH=c:\test, $(workdirurl)=WORK_PATH => WORK_PATH=$(workdirurl) and this cannot be substituted! ReSubstFixedVarOrder aFixedVar; - aFixedVar.eVariable = aFixedVarTable[i].nEnumValue; - aFixedVar.nVarValueLength = m_aPreDefVars.m_FixedVar[(sal_Int32)aFixedVar.eVariable].getLength(); + aFixedVar.eVariable = aFixedVarTable[i].nEnumValue; + aFixedVar.nVarValueLength = m_aPreDefVars.m_FixedVar[(sal_Int32)aFixedVar.eVariable].getLength(); m_aReSubstFixedVarOrder.push_back( aFixedVar ); } } @@ -646,8 +645,8 @@ SubstitutePathVariables::SubstitutePathVariables( const Reference< XMultiService aStrBuffer.append( m_aVarStart ); aStrBuffer.append( pIter->second.aSubstVariable ); aStrBuffer.append( m_aVarEnd ); - aUserOrderVar.aVarName = aStrBuffer.makeStringAndClear(); - aUserOrderVar.nVarValueLength = pIter->second.aSubstVariable.getLength(); + aUserOrderVar.aVarName = aStrBuffer.makeStringAndClear(); + aUserOrderVar.nVarValueLength = pIter->second.aSubstVariable.getLength(); m_aReSubstUserVarOrder.push_back( aUserOrderVar ); } m_aReSubstUserVarOrder.sort(); @@ -683,7 +682,7 @@ throw ( NoSuchElementException, RuntimeException ) } //_________________________________________________________________________________________________________________ -// protected methods +// protected methods //_________________________________________________________________________________________________________________ // @@ -698,8 +697,8 @@ IMPL_LINK( SubstitutePathVariables, implts_ConfigurationNotify, SubstitutePathNo rtl::OUString SubstitutePathVariables::ConvertOSLtoUCBURL( const rtl::OUString& aOSLCompliantURL ) const { RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "SubstitutePathVariables::ConvertOSLtoUCBURL" ); - String aResult; - rtl::OUString aTemp; + String aResult; + rtl::OUString aTemp; osl::FileBase::getSystemPathFromFileURL( aOSLCompliantURL, aTemp ); utl::LocalFileHelper::ConvertPhysicalNameToURL( aTemp, aResult ); @@ -714,7 +713,7 @@ rtl::OUString SubstitutePathVariables::ConvertOSLtoUCBURL( const rtl::OUString& rtl::OUString SubstitutePathVariables::GetWorkPath() const { RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "SubstitutePathVariables::GetWorkPath" ); - rtl::OUString aWorkPath; + rtl::OUString aWorkPath; try { @@ -753,8 +752,8 @@ rtl::OUString SubstitutePathVariables::GetWorkVariableValue() const catch(RuntimeException &) { } - - // fallback to $HOME in case platform dependend config layer does not return + + // fallback to $HOME in case platform dependend config layer does not return // an usuable work dir value. if (aWorkPath.getLength() < 1) { @@ -767,8 +766,8 @@ rtl::OUString SubstitutePathVariables::GetWorkVariableValue() const rtl::OUString SubstitutePathVariables::GetHomeVariableValue() const { RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "SubstitutePathVariables::GetHomeVariableValue" ); - osl::Security aSecurity; - rtl::OUString aHomePath; + osl::Security aSecurity; + rtl::OUString aHomePath; aSecurity.getHomeDir( aHomePath ); return ConvertOSLtoUCBURL( aHomePath ); @@ -788,7 +787,7 @@ rtl::OUString SubstitutePathVariables::GetPathVariableValue() const rtl::OUString aPathList( pEnv, strlen( pEnv ), gsl_getSystemTextEncoding() ); rtl::OUStringBuffer aPathStrBuffer( aPathList.getLength() * PATH_EXTEND_FACTOR / 100 ); - sal_Bool bAppendSep = sal_False; + bool bAppendSep = false; sal_Int32 nToken = 0; do { @@ -799,7 +798,7 @@ rtl::OUString SubstitutePathVariables::GetPathVariableValue() const if ( bAppendSep ) aPathStrBuffer.appendAscii( ";" ); // Office uses ';' as path separator aPathStrBuffer.append( aTmp ); - bAppendSep = sal_True; + bAppendSep = true; } } while(nToken>=0); @@ -810,25 +809,25 @@ rtl::OUString SubstitutePathVariables::GetPathVariableValue() const return aRetStr; } -rtl::OUString SubstitutePathVariables::impl_substituteVariable( const ::rtl::OUString& rText, sal_Bool bSubstRequired ) +rtl::OUString SubstitutePathVariables::impl_substituteVariable( const ::rtl::OUString& rText, bool bSubstRequired ) throw ( NoSuchElementException, RuntimeException ) { RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "SubstitutePathVariables::impl_substituteVariable" ); // This is maximal recursive depth supported! const sal_Int32 nMaxRecursiveDepth = 8; - rtl::OUString aWorkText = rText; - rtl::OUString aResult; + rtl::OUString aWorkText = rText; + rtl::OUString aResult; // Use vector with strings to detect endless recursions! std::vector< rtl::OUString > aEndlessRecursiveDetector; // Search for first occure of "$(...". - sal_Int32 nDepth = 0; - sal_Int32 bSubstitutionCompleted = sal_False; - sal_Int32 nPosition = aWorkText.indexOf( m_aVarStart ); // = first position of "$(" in string - sal_Int32 nLength = 0; // = count of letters from "$(" to ")" in string - sal_Bool bVarNotSubstituted = sal_False; + sal_Int32 nDepth = 0; + sal_Int32 bSubstitutionCompleted = sal_False; + sal_Int32 nPosition = aWorkText.indexOf( m_aVarStart ); // = first position of "$(" in string + sal_Int32 nLength = 0; // = count of letters from "$(" to ")" in string + bool bVarNotSubstituted = false; // Have we found any variable like "$(...)"? if ( nPosition != STRPOS_NOTFOUND ) @@ -841,17 +840,17 @@ throw ( NoSuchElementException, RuntimeException ) } // Is there something to replace ? - sal_Bool bWorkRetrieved = sal_False; - sal_Bool bWorkDirURLRetrieved = sal_False; + bool bWorkRetrieved = false; + bool bWorkDirURLRetrieved = false; while ( !bSubstitutionCompleted && nDepth < nMaxRecursiveDepth ) { while ( ( nPosition != STRPOS_NOTFOUND ) && ( nLength > 3 ) ) // "$(" ")" { // YES; Get the next variable for replace. - sal_Int32 nReplaceLength = 0; - rtl::OUString aReplacement; - rtl::OUString aSubString = aWorkText.copy( nPosition, nLength ); - rtl::OUString aSubVarString; + sal_Int32 nReplaceLength = 0; + rtl::OUString aReplacement; + rtl::OUString aSubString = aWorkText.copy( nPosition, nLength ); + rtl::OUString aSubVarString; // Path variables are not case sensitive! aSubVarString = aSubString.toAsciiLowerCase(); @@ -866,17 +865,24 @@ throw ( NoSuchElementException, RuntimeException ) { // Transient value, retrieve it again m_aPreDefVars.m_FixedVar[ (PreDefVariable)nIndex ] = GetWorkVariableValue(); - bWorkRetrieved = sal_True; + bWorkRetrieved = true; } else if ( nIndex == PREDEFVAR_WORKDIRURL && !bWorkDirURLRetrieved ) { // Transient value, retrieve it again m_aPreDefVars.m_FixedVar[ (PreDefVariable)nIndex ] = GetWorkPath(); - bWorkDirURLRetrieved = sal_True; + bWorkDirURLRetrieved = true; } - aReplacement = m_aPreDefVars.m_FixedVar[ (PreDefVariable)nIndex ]; - nReplaceLength = nLength; + // Check preconditions to substitue path variables. + // 1. A path variable can only be substituted if it follows a SEARCHPATH_DELIMITER ';'! + // 2. It's located exactly at the start of the string being substituted! + if (( aFixedVarTable[ int( nIndex ) ].bAbsPath && (( nPosition == 0 ) || (( nPosition > 0 ) && ( aWorkText[nPosition-1] == ';')))) || + ( !aFixedVarTable[ int( nIndex ) ].bAbsPath )) + { + aReplacement = m_aPreDefVars.m_FixedVar[ (PreDefVariable)nIndex ]; + nReplaceLength = nLength; + } } else { @@ -885,7 +891,7 @@ throw ( NoSuchElementException, RuntimeException ) SubstituteVariables::const_iterator pIter = m_aSubstVarMap.find( aVarName ); if ( pIter != m_aSubstVarMap.end() ) { - // found! + // Found. aReplacement = pIter->second.aSubstValue; nReplaceLength = nLength; } @@ -900,7 +906,7 @@ throw ( NoSuchElementException, RuntimeException ) else { // Variable not known - bVarNotSubstituted = sal_False; + bVarNotSubstituted = false; nPosition += nLength; } @@ -924,7 +930,7 @@ throw ( NoSuchElementException, RuntimeException ) if ( nPosition != STRPOS_NOTFOUND ) { // Yes; Get length of found variable. If no ")" was found - nLength must set to 0! - nLength = 0; + nLength = 0; sal_Int32 nEndPosition = aWorkText.indexOf( m_aVarEnd, nPosition ); if ( nEndPosition != STRPOS_NOTFOUND ) nLength = nEndPosition - nPosition + 1; @@ -1032,8 +1038,8 @@ throw ( RuntimeException ) } // Due to a recursive definition this code must exchange variables with variables! - sal_Bool bResubstitutionCompleted = sal_False; - sal_Bool bVariableFound = sal_False; + bool bResubstitutionCompleted = false; + bool bVariableFound = false; // Get transient predefined path variable $(work) value before starting resubstitution m_aPreDefVars.m_FixedVar[ PREDEFVAR_WORK ] = GetWorkVariableValue(); @@ -1047,7 +1053,7 @@ throw ( RuntimeException ) sal_Int32 nPos = aURL.indexOf( aValue ); if ( nPos >= 0 ) { - sal_Bool bMatch = sal_True; + bool bMatch = true; if ( pIterFixed->eVariable == PREDEFVAR_LANG || pIterFixed->eVariable == PREDEFVAR_LANGID || pIterFixed->eVariable == PREDEFVAR_VLANG ) @@ -1073,7 +1079,7 @@ throw ( RuntimeException ) aStrBuffer.append( m_aPreDefVars.m_FixedVarNames[ (sal_Int32)pIterFixed->eVariable ] ); // Get the variable name for struct var name array! aStrBuffer.append( aURL.copy( nPos + aValue.getLength(), ( aURL.getLength() - ( nPos + aValue.getLength() )) )); aURL = aStrBuffer.makeStringAndClear(); - bVariableFound = sal_True; // Resubstitution not finished yet! + bVariableFound = true; // Resubstitution not finished yet! break; } } @@ -1094,12 +1100,12 @@ throw ( RuntimeException ) aStrBuffer.append( m_aVarEnd ); aStrBuffer.append( aURL.copy( nPos + aVarValue.getLength(), ( aURL.getLength() - ( nPos + aVarValue.getLength() )) )); aURL = aStrBuffer.makeStringAndClear(); - bVariableFound = sal_True; // Resubstitution not finished yet! + bVariableFound = true; // Resubstitution not finished yet! } } if ( !bVariableFound ) - bResubstitutionCompleted = sal_True; + bResubstitutionCompleted = true; else bVariableFound = sal_False; // Next resubstitution } @@ -1165,7 +1171,7 @@ throw ( NoSuchElementException, RuntimeException ) void SubstitutePathVariables::SetPredefinedPathVariables( PredefinedPathVariables& aPreDefPathVariables ) { RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "SubstitutePathVariables::SetPredefinedPathVariables" ); - Any aAny; + Any aAny; ::rtl::OUString aOfficePath; ::rtl::OUString aUserPath; ::rtl::OUString aTmp; @@ -1185,36 +1191,34 @@ void SubstitutePathVariables::SetPredefinedPathVariables( PredefinedPathVariable } aState = utl::Bootstrap::locateUserData( sVal ); + //There can be the valid case that there is no user installation. For example, "unopkg sync" + //is currently (OOo3.4) run as part of the setup. Then no user installation is required. + //Therefore we do not assert here. if( aState == ::utl::Bootstrap::PATH_EXISTS ) { aPreDefPathVariables.m_FixedVar[ PREDEFVAR_USERPATH ] = ConvertOSLtoUCBURL( sVal ); } - // We use to have a LOG_ERROR here in an else branch, but that - // always fired in some unit tests, and if you then just ignored - // it, nothing bad happened, so it seems fairly pointless. // Set $(inst), $(instpath), $(insturl) - aPreDefPathVariables.m_FixedVar[ PREDEFVAR_INSTURL ] = aPreDefPathVariables.m_FixedVar[ PREDEFVAR_INSTPATH ]; - aPreDefPathVariables.m_FixedVar[ PREDEFVAR_INST ] = aPreDefPathVariables.m_FixedVar[ PREDEFVAR_INSTPATH ]; + aPreDefPathVariables.m_FixedVar[ PREDEFVAR_INSTURL ] = aPreDefPathVariables.m_FixedVar[ PREDEFVAR_INSTPATH ]; + aPreDefPathVariables.m_FixedVar[ PREDEFVAR_INST ] = aPreDefPathVariables.m_FixedVar[ PREDEFVAR_INSTPATH ]; // New variable of hierachy service (#i32656#) aPreDefPathVariables.m_FixedVar[ PREDEFVAR_BASEINSTURL ]= aPreDefPathVariables.m_FixedVar[ PREDEFVAR_INSTPATH ]; // Set $(user), $(userpath), $(userurl) - aPreDefPathVariables.m_FixedVar[ PREDEFVAR_USERURL ] = aPreDefPathVariables.m_FixedVar[ PREDEFVAR_USERPATH ]; - aPreDefPathVariables.m_FixedVar[ PREDEFVAR_USER ] = aPreDefPathVariables.m_FixedVar[ PREDEFVAR_USERPATH ]; + aPreDefPathVariables.m_FixedVar[ PREDEFVAR_USERURL ] = aPreDefPathVariables.m_FixedVar[ PREDEFVAR_USERPATH ]; + aPreDefPathVariables.m_FixedVar[ PREDEFVAR_USER ] = aPreDefPathVariables.m_FixedVar[ PREDEFVAR_USERPATH ]; // New variable of hierachy service (#i32656#) aPreDefPathVariables.m_FixedVar[ PREDEFVAR_USERDATAURL ]= aPreDefPathVariables.m_FixedVar[ PREDEFVAR_USERPATH ]; // Detect the program directory // Set $(prog), $(progpath), $(progurl) INetURLObject aProgObj( - aPreDefPathVariables.m_FixedVar[ PREDEFVAR_INSTPATH ] ); - if ( !aProgObj.HasError() && - aProgObj.insertName( - rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("program")) ) ) + aPreDefPathVariables.m_FixedVar[ PREDEFVAR_INSTPATH ] ); + if ( !aProgObj.HasError() && aProgObj.insertName( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("program")) ) ) { - aPreDefPathVariables.m_FixedVar[ PREDEFVAR_PROGPATH ] = aProgObj.GetMainURL(INetURLObject::NO_DECODE); - aPreDefPathVariables.m_FixedVar[ PREDEFVAR_PROGURL ] = aPreDefPathVariables.m_FixedVar[ PREDEFVAR_PROGPATH ]; - aPreDefPathVariables.m_FixedVar[ PREDEFVAR_PROG ] = aPreDefPathVariables.m_FixedVar[ PREDEFVAR_PROGPATH ]; + aPreDefPathVariables.m_FixedVar[ PREDEFVAR_PROGPATH ] = aProgObj.GetMainURL(INetURLObject::NO_DECODE); + aPreDefPathVariables.m_FixedVar[ PREDEFVAR_PROGURL ] = aPreDefPathVariables.m_FixedVar[ PREDEFVAR_PROGPATH ]; + aPreDefPathVariables.m_FixedVar[ PREDEFVAR_PROG ] = aPreDefPathVariables.m_FixedVar[ PREDEFVAR_PROGPATH ]; } // Detect the language type of the current office @@ -1230,7 +1234,8 @@ void SubstitutePathVariables::SetPredefinedPathVariables( PredefinedPathVariable // Set $(lang) aPreDefPathVariables.m_FixedVar[ PREDEFVAR_LANG ] = ConvertOSLtoUCBURL( - rtl::OUString::createFromAscii( ResMgr::GetLang( aPreDefPathVariables.m_eLanguageType, 0 ) )); + rtl::OUString::createFromAscii( ResMgr::GetLang( aPreDefPathVariables.m_eLanguageType, 0 ) )); + // Set $(vlang) aPreDefPathVariables.m_FixedVar[ PREDEFVAR_VLANG ] = aLocaleStr; @@ -1255,7 +1260,7 @@ void SubstitutePathVariables::SetPredefinedPathVariables( PredefinedPathVariable aPreDefPathVariables.m_FixedVar[ PREDEFVAR_TEMP ] = ConvertOSLtoUCBURL( aTmp ); aPreDefPathVariables.m_FixedVar[PREDEFVAR_BRANDBASEURL] = rtl::OUString( - RTL_CONSTASCII_USTRINGPARAM("$BRAND_BASE_DIR")); + RTL_CONSTASCII_USTRINGPARAM("$BRAND_BASE_DIR")); rtl::Bootstrap::expandMacros( aPreDefPathVariables.m_FixedVar[PREDEFVAR_BRANDBASEURL]); } |