diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2016-09-27 18:10:32 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2016-09-27 18:12:11 +0200 |
commit | 47f7e30f3584cbccd02cf3748399079778facd0d (patch) | |
tree | 3fa6e370d9702a8820b2dc594426be870a1fe443 | |
parent | 0901c29d522f03c29c60fcda537918c2bf9eda63 (diff) |
tdf#102630: [API CHANGE] Remove SharePoints support from PathSubstitution
...apparently unused and broken (see issue)
Change-Id: Ic20d287b59d3317fecdba03a3edf8f51611c91ba
-rw-r--r-- | framework/source/services/substitutepathvars.cxx | 560 |
1 files changed, 0 insertions, 560 deletions
diff --git a/framework/source/services/substitutepathvars.cxx b/framework/source/services/substitutepathvars.cxx index 4d0299886c7c..b26dc9da6950 100644 --- a/framework/source/services/substitutepathvars.cxx +++ b/framework/source/services/substitutepathvars.cxx @@ -61,103 +61,6 @@ using namespace framework; 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() - : aEnvType(ET_UNKNOWN) - {} - - SubstituteRule( const OUString& aVarName, - const OUString& aValue, - const css::uno::Any& aVal, - EnvironmentType aType ) - : aSubstVariable(aVarName) - , aSubstValue(aValue) - , aEnvValue(aVal) - , aEnvType(aType) - {} - - OUString aSubstVariable; - OUString aSubstValue; - css::uno::Any aEnvValue; - EnvironmentType aEnvType; -}; - -typedef std::unordered_map<OUString, SubstituteRule, OUStringHash> - SubstituteVariables; - -typedef std::vector< SubstituteRule > SubstituteRuleVector; -class SubstitutePathVariables_Impl : public utl::ConfigItem -{ - public: - SubstitutePathVariables_Impl(); - virtual ~SubstitutePathVariables_Impl() override; - - 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 css::uno::Sequence< OUString >& aPropertyNames ) override; - - private: - - virtual void ImplCommit() override; - - // Wrapper methods for low-level functions - const OUString& GetYPDomainName(); - const OUString& GetDNSDomainName(); - const OUString& GetNTDomainName(); - const OUString& GetHostName(); - - bool FilterRuleSet(const SubstituteRuleVector& aRuleSet, SubstituteRule& aActiveRule); - - void ReadSharePointsFromConfiguration(css::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; - - const OUString m_aSharePointsNodeName; - const OUString m_aDirPropertyName; - const OUString m_aEnvPropertyName; - const OUString m_aLevelSep; -}; - enum PreDefVariable { PREDEFVAR_INST, @@ -238,18 +141,6 @@ struct ReSubstFixedVarOrder } }; -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 ::cppu::WeakComponentImplHelper< css::util::XStringSubstitution, css::lang::XServiceInfo > SubstitutePathVariables_BASE; @@ -257,8 +148,6 @@ typedef ::cppu::WeakComponentImplHelper< class SubstitutePathVariables : private cppu::BaseMutex, public SubstitutePathVariables_BASE { -friend class SubstitutePathVariables_Impl; - public: explicit SubstitutePathVariables(const css::uno::Reference< css::uno::XComponentContext >& xContext); virtual ~SubstitutePathVariables() override; @@ -314,408 +203,16 @@ private: VarNameToIndexMap; 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 std::list<ReSubstFixedVarOrder> m_aReSubstFixedVarOrder; // To speed up resubstitution fixed variables (order for lookup) - std::list<ReSubstUserVarOrder> m_aReSubstUserVarOrder; // To speed up resubstitution user variables css::uno::Reference< css::uno::XComponentContext > m_xContext; }; -struct TableEntry -{ - const char* pOSString; - sal_Int32 nStrLen; -}; - -// Table with valid operating system strings -// Name of the os as char* and the length -// of the string -static const TableEntry aOSTable[OS_COUNT] = -{ - { RTL_CONSTASCII_STRINGPARAM("WINDOWS") }, - { RTL_CONSTASCII_STRINGPARAM("UNIX") }, - { RTL_CONSTASCII_STRINGPARAM("SOLARIS") }, - { RTL_CONSTASCII_STRINGPARAM("LINUX") }, - { RTL_CONSTASCII_STRINGPARAM("") } // unknown -}; - -// Table with valid environment variables -// Name of the environment type as a char* and -// the length of the string. -static const TableEntry aEnvTable[ET_COUNT] = -{ - { RTL_CONSTASCII_STRINGPARAM("HOST") }, - { RTL_CONSTASCII_STRINGPARAM("YPDOMAIN") }, - { RTL_CONSTASCII_STRINGPARAM("DNSDOMAIN") }, - { RTL_CONSTASCII_STRINGPARAM("NTDOMAIN") }, - { RTL_CONSTASCII_STRINGPARAM("OS") }, - { RTL_CONSTASCII_STRINGPARAM("") } // unknown -}; - -// Priority table for the environment types. Lower numbers define -// a higher priority. Equal numbers has the same priority that means -// that the first match wins!! -static const sal_Int16 aEnvPrioTable[ET_COUNT] = -{ - 1, // ET_HOST - 2, // ET_IPDOMAIN - 2, // ET_DNSDOMAIN - 2, // ET_NTDOMAIN - 3, // ET_OS - 99, // ET_UNKNOWN -}; - -// Implementation helper classes - -OperatingSystem SubstitutePathVariables_Impl::GetOperatingSystemFromString( const OUString& aOSString ) -{ - for ( int i = 0; i < OS_COUNT; i++ ) - { - if ( aOSString.equalsIgnoreAsciiCaseAsciiL( aOSTable[i].pOSString, aOSTable[i].nStrLen )) - return (OperatingSystem)i; - } - - return OS_UNKNOWN; -} - -EnvironmentType SubstitutePathVariables_Impl::GetEnvTypeFromString( const OUString& aEnvTypeString ) -{ - for ( int i = 0; i < ET_COUNT; i++ ) - { - if ( aEnvTypeString.equalsIgnoreAsciiCaseAsciiL( aEnvTable[i].pOSString, aEnvTable[i].nStrLen )) - return (EnvironmentType)i; - } - - return ET_UNKNOWN; -} - -SubstitutePathVariables_Impl::SubstitutePathVariables_Impl() : - utl::ConfigItem( OUString( "Office.Substitution" )), - m_bYPDomainRetrieved( false ), - m_bDNSDomainRetrieved( false ), - m_bNTDomainRetrieved( false ), - m_bHostRetrieved( false ), - m_aSharePointsNodeName( OUString( "SharePoints" )), - m_aDirPropertyName( OUString( "/Directory" )), - m_aEnvPropertyName( OUString( "/Environment" )), - m_aLevelSep( OUString( "/" )) -{ - // Enable notification mechanism - // We need it to get information about changes outside these class on our configuration branch - Sequence<OUString> aNotifySeq { "SharePoints" }; - EnableNotification( aNotifySeq, true ); -} - -SubstitutePathVariables_Impl::~SubstitutePathVariables_Impl() -{ -} - -void SubstitutePathVariables_Impl::GetSharePointsRules( SubstituteVariables& aSubstVarMap ) -{ - Sequence< OUString > aSharePointNames; - ReadSharePointsFromConfiguration( aSharePointNames ); - - if ( aSharePointNames.getLength() > 0 ) - { - sal_Int32 nSharePoints = 0; - - // Read SharePoints container from configuration - while ( nSharePoints < aSharePointNames.getLength() ) - { - OUString aSharePointNodeName( m_aSharePointsNodeName ); - aSharePointNodeName += "/"; - aSharePointNodeName += aSharePointNames[ nSharePoints ]; - - SubstituteRuleVector aRuleSet; - ReadSharePointRuleSetFromConfiguration( aSharePointNames[ nSharePoints ], aSharePointNodeName, aRuleSet ); - if ( !aRuleSet.empty() ) - { - // We have at minimum one rule. Filter the correct rule out of the rule set - // and put into our SubstituteVariable map - SubstituteRule aActiveRule; - if ( FilterRuleSet( aRuleSet, aActiveRule )) - { - // We have found an active rule - aActiveRule.aSubstVariable = aSharePointNames[ nSharePoints ]; - aSubstVarMap.insert( SubstituteVariables::value_type( - aActiveRule.aSubstVariable, aActiveRule )); - } - } - ++nSharePoints; - } - } -} - -void SubstitutePathVariables_Impl::Notify( const css::uno::Sequence< OUString >& /*aPropertyNames*/ ) -{ - // NOT implemented yet! -} - -void SubstitutePathVariables_Impl::ImplCommit() -{ -} - -inline OperatingSystem GetOperatingSystem() -{ -#ifdef SOLARIS - return OS_SOLARIS; -#elif defined LINUX - return OS_LINUX; -#elif defined WIN32 - return OS_WINDOWS; -#elif defined UNIX - return OS_UNIX; -#else - return OS_UNKNOWN; -#endif -} - -const OUString& SubstitutePathVariables_Impl::GetYPDomainName() -{ - if ( !m_bYPDomainRetrieved ) - { - m_aYPDomain = NetworkDomain::GetYPDomainName().toAsciiLowerCase(); - m_bYPDomainRetrieved = true; - } - - return m_aYPDomain; -} - -const OUString& SubstitutePathVariables_Impl::GetDNSDomainName() -{ - if ( !m_bDNSDomainRetrieved ) - { - OUString aTemp; - osl::SocketAddr aSockAddr; - oslSocketResult aResult; - - OUString aHostName = GetHostName(); - osl::SocketAddr::resolveHostname( aHostName, aSockAddr ); - aTemp = aSockAddr.getHostname( &aResult ); - - // DNS domain name begins after the first "." - sal_Int32 nIndex = aTemp.indexOf( '.' ); - if ( nIndex >= 0 && aTemp.getLength() > nIndex+1 ) - m_aDNSDomain = aTemp.copy( nIndex+1 ).toAsciiLowerCase(); - else - m_aDNSDomain.clear(); - - m_bDNSDomainRetrieved = true; - } - - return m_aDNSDomain; -} - -const OUString& SubstitutePathVariables_Impl::GetNTDomainName() -{ - if ( !m_bNTDomainRetrieved ) - { - m_aNTDomain = NetworkDomain::GetNTDomainName().toAsciiLowerCase(); - m_bNTDomainRetrieved = true; - } - - return m_aNTDomain; -} - -const OUString& SubstitutePathVariables_Impl::GetHostName() -{ - if (!m_bHostRetrieved) - { - oslSocketResult aSocketResult; - m_aHost = osl::SocketAddr::getLocalHostname( &aSocketResult ).toAsciiLowerCase(); - m_bHostRetrieved = true; - } - - return m_aHost; -} - -bool SubstitutePathVariables_Impl::FilterRuleSet( const SubstituteRuleVector& aRuleSet, SubstituteRule& aActiveRule ) -{ - bool bResult = false; - - if ( !aRuleSet.empty() ) - { - 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; - - // Check if environment type has a higher priority than current one! - if ( nPrioCurrentRule > aEnvPrioTable[eEnvType] ) - { - switch ( eEnvType ) - { - case ET_HOST: - { - OUString aHost = GetHostName(); - OUString aHostStr; - aRule.aEnvValue >>= aHostStr; - aHostStr = aHostStr.toAsciiLowerCase(); - - // Pattern match if domain environment match - WildCard aPattern(aHostStr); - bool bMatch = aPattern.Matches(aHost); - if ( bMatch ) - { - aActiveRule = aRule; - bResult = true; - nPrioCurrentRule = aEnvPrioTable[eEnvType]; - } - } - break; - - case ET_YPDOMAIN: - case ET_DNSDOMAIN: - case ET_NTDOMAIN: - { - OUString aDomain; - OUString aDomainStr; - aRule.aEnvValue >>= aDomainStr; - aDomainStr = aDomainStr.toAsciiLowerCase(); - - // Retrieve the correct domain value - if ( eEnvType == ET_YPDOMAIN ) - aDomain = GetYPDomainName(); - else if ( eEnvType == ET_DNSDOMAIN ) - aDomain = GetDNSDomainName(); - else - aDomain = GetNTDomainName(); - - // Pattern match if domain environment match - WildCard aPattern(aDomainStr); - bool bMatch = aPattern.Matches(aDomain); - if ( bMatch ) - { - aActiveRule = aRule; - bResult = true; - nPrioCurrentRule = aEnvPrioTable[eEnvType]; - } - } - break; - - case ET_OS: - { - // No pattern matching for OS type - OperatingSystem eOSType = GetOperatingSystem(); - - sal_Int16 nValue = 0; - aRule.aEnvValue >>= 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 = true; - nPrioCurrentRule = aEnvPrioTable[eEnvType]; - } - } - break; - - case ET_UNKNOWN: // nothing to do - break; - - default: - break; - } - } - } - } - - return bResult; -} - -void SubstitutePathVariables_Impl::ReadSharePointsFromConfiguration( Sequence< OUString >& aSharePointsSeq ) -{ - //returns all the names of all share point nodes - aSharePointsSeq = GetNodeNames( m_aSharePointsNodeName ); -} - -void SubstitutePathVariables_Impl::ReadSharePointRuleSetFromConfiguration( - const OUString& aSharePointName, - const OUString& aSharePointNodeName, - SubstituteRuleVector& rRuleSet ) -{ - Sequence< OUString > aSharePointMappingsNodeNames = GetNodeNames( aSharePointNodeName, utl::CONFIG_NAME_LOCAL_PATH ); - - sal_Int32 nSharePointMapping = 0; - while ( nSharePointMapping < aSharePointMappingsNodeNames.getLength() ) - { - OUString aSharePointMapping( aSharePointNodeName ); - aSharePointMapping += m_aLevelSep; - aSharePointMapping += aSharePointMappingsNodeNames[ nSharePointMapping ]; - - // Read SharePointMapping - OUString aDirValue; - OUString aDirProperty( aSharePointMapping ); - aDirProperty += m_aDirPropertyName; - - // Read only the directory property - Sequence<OUString> aDirPropertySeq { aDirProperty }; - - Sequence< Any > aValueSeq = GetProperties( aDirPropertySeq ); - if ( aValueSeq.getLength() == 1 ) - aValueSeq[0] >>= aDirValue; - - // Read the environment setting - OUString aEnvUsed; - OUString aEnvProperty( aSharePointMapping ); - aEnvProperty += m_aEnvPropertyName; - Sequence< OUString > aEnvironmentVariable = GetNodeNames( aEnvProperty ); - - // Filter the property which has a value set - Sequence< OUString > aEnvUsedPropertySeq( aEnvironmentVariable.getLength() ); - - OUString aEnvUsePropNameTemplate( aEnvProperty ); - aEnvUsePropNameTemplate += m_aLevelSep; - - for ( sal_Int32 nProperty = 0; nProperty < aEnvironmentVariable.getLength(); nProperty++ ) - aEnvUsedPropertySeq[nProperty] = aEnvUsePropNameTemplate + aEnvironmentVariable[nProperty]; - - Sequence< Any > aEnvUsedValueSeq; - aEnvUsedValueSeq = GetProperties( aEnvUsedPropertySeq ); - - OUString aEnvUsedValue; - for ( sal_Int32 nIndex = 0; nIndex < aEnvironmentVariable.getLength(); nIndex++ ) - { - if ( aEnvUsedValueSeq[nIndex] >>= aEnvUsedValue ) - { - aEnvUsed = aEnvironmentVariable[nIndex]; - break; - } - } - - // Decode the environment and optional the operating system settings - Any aEnvValue; - EnvironmentType eEnvType = GetEnvTypeFromString( aEnvUsed ); - if ( eEnvType == ET_OS ) - { - OperatingSystem eOSType = GetOperatingSystemFromString( aEnvUsedValue ); - aEnvValue <<= (sal_Int16)eOSType; - } - else - aEnvValue <<= aEnvUsedValue; - - // Create rule struct and push it into the rule set - SubstituteRule aRule( aSharePointName, aDirValue, aEnvValue, eEnvType ); - rRuleSet.push_back( aRule ); - - ++nSharePointMapping; - } -} - SubstitutePathVariables::SubstitutePathVariables( const Reference< XComponentContext >& xContext ) : SubstitutePathVariables_BASE(m_aMutex), m_xContext( xContext ) { SetPredefinedPathVariables(); - m_aImpl.GetSharePointsRules( m_aSubstVarMap ); // Init the predefined/fixed variable to index hash map for ( int i = 0; i < PREDEFVAR_COUNT; i++ ) @@ -744,16 +241,6 @@ SubstitutePathVariables::SubstitutePathVariables( const Reference< XComponentCon } } m_aReSubstFixedVarOrder.sort(); - - // Sort user variables to path length - for (auto const & i: m_aSubstVarMap) - { - ReSubstUserVarOrder aUserOrderVar; - aUserOrderVar.aVarName = "$(" + i.second.aSubstVariable + ")"; - aUserOrderVar.nVarValueLength = i.second.aSubstVariable.getLength(); - m_aReSubstUserVarOrder.push_back( aUserOrderVar ); - } - m_aReSubstUserVarOrder.sort(); } SubstitutePathVariables::~SubstitutePathVariables() @@ -927,18 +414,6 @@ throw ( NoSuchElementException, RuntimeException ) nReplaceLength = nLength; } } - else - { - // Extract the variable name and try to find in the user defined variable set - OUString aVarName = aSubString.copy( 2, nLength-3 ); - SubstituteVariables::const_iterator pIter = m_aSubstVarMap.find( aVarName ); - if ( pIter != m_aSubstVarMap.end() ) - { - // Found. - aReplacement = pIter->second.aSubstValue; - nReplaceLength = nLength; - } - } // Have we found something to replace? if ( nReplaceLength > 0 ) @@ -1125,19 +600,6 @@ throw ( RuntimeException ) } } - // This part can be iterated more than one time as variables can contain variables again! - for (auto const & i: m_aReSubstUserVarOrder) - { - OUString aVarValue = i.aVarName; - sal_Int32 nPos = aURL.indexOf( aVarValue ); - if ( nPos >= 0 ) - { - aURL = aURL.replaceAt( - nPos, aVarValue.getLength(), "$(" + aVarValue + ")"); - bVariableFound = true; // Resubstitution not finished yet! - } - } - if ( !bVariableFound ) { return aURL; @@ -1168,28 +630,6 @@ throw ( NoSuchElementException, RuntimeException ) } else { - // Prepare variable name before hash map access - if ( nPos >= 0 ) - { - if ( rVariable.getLength() > 3 ) - aVariable = rVariable.copy( 2, rVariable.getLength() - 3 ); - else - { - OUString aExceptionText("Unknown variable!"); - throw NoSuchElementException(aExceptionText, static_cast<cppu::OWeakObject *>(this)); - } - } - else - aVariable = rVariable; - - // User defined variable - SubstituteVariables::const_iterator pIter = m_aSubstVarMap.find( aVariable ); - if ( pIter != m_aSubstVarMap.end() ) - { - // found! - return pIter->second.aSubstValue; - } - OUString aExceptionText("Unknown variable!"); throw NoSuchElementException(aExceptionText, static_cast<cppu::OWeakObject *>(this)); } |