xref: /aoo41x/main/dbaccess/source/ui/misc/dsmeta.cxx (revision 96de5490)
1*96de5490SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*96de5490SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*96de5490SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*96de5490SAndrew Rist  * distributed with this work for additional information
6*96de5490SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*96de5490SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*96de5490SAndrew Rist  * "License"); you may not use this file except in compliance
9*96de5490SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*96de5490SAndrew Rist  *
11*96de5490SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*96de5490SAndrew Rist  *
13*96de5490SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*96de5490SAndrew Rist  * software distributed under the License is distributed on an
15*96de5490SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*96de5490SAndrew Rist  * KIND, either express or implied.  See the License for the
17*96de5490SAndrew Rist  * specific language governing permissions and limitations
18*96de5490SAndrew Rist  * under the License.
19*96de5490SAndrew Rist  *
20*96de5490SAndrew Rist  *************************************************************/
21*96de5490SAndrew Rist 
22*96de5490SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #include "dsmeta.hxx"
25cdf0e10cSrcweir #include <connectivity/DriversConfig.hxx>
26cdf0e10cSrcweir #include "dsntypes.hxx"
27cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
28cdf0e10cSrcweir /** === begin UNO includes === **/
29cdf0e10cSrcweir /** === end UNO includes === **/
30cdf0e10cSrcweir 
31cdf0e10cSrcweir #include <map>
32cdf0e10cSrcweir 
33cdf0e10cSrcweir //........................................................................
34cdf0e10cSrcweir namespace dbaui
35cdf0e10cSrcweir {
36cdf0e10cSrcweir //........................................................................
37cdf0e10cSrcweir 
38cdf0e10cSrcweir 	/** === begin UNO using === **/
39cdf0e10cSrcweir     using namespace dbaccess;
40cdf0e10cSrcweir     using namespace ::com::sun::star;
41cdf0e10cSrcweir 	/** === end UNO using === **/
42cdf0e10cSrcweir 
43cdf0e10cSrcweir     struct FeatureSupport
44cdf0e10cSrcweir     {
45cdf0e10cSrcweir         // authentication mode of the data source
46cdf0e10cSrcweir         AuthenticationMode      eAuthentication;
47cdf0e10cSrcweir 
FeatureSupportdbaui::FeatureSupport48cdf0e10cSrcweir         FeatureSupport()
49cdf0e10cSrcweir             :eAuthentication( AuthUserPwd )
50cdf0e10cSrcweir         {
51cdf0e10cSrcweir         }
52cdf0e10cSrcweir 
FeatureSupportdbaui::FeatureSupport53cdf0e10cSrcweir         FeatureSupport( AuthenticationMode _Auth )
54cdf0e10cSrcweir             :eAuthentication( _Auth )
55cdf0e10cSrcweir         {
56cdf0e10cSrcweir         }
57cdf0e10cSrcweir     };
58cdf0e10cSrcweir 
59cdf0e10cSrcweir     struct FeatureMapping
60cdf0e10cSrcweir     {
61cdf0e10cSrcweir         /// one of the items from dsitems.hxx
62cdf0e10cSrcweir         ItemID          nItemID;
63cdf0e10cSrcweir         const sal_Char* pAsciiFeatureName;
64cdf0e10cSrcweir     };
65cdf0e10cSrcweir 
66cdf0e10cSrcweir 	//====================================================================
67cdf0e10cSrcweir 	//= global tables
68cdf0e10cSrcweir 	//====================================================================
69cdf0e10cSrcweir 	//--------------------------------------------------------------------
lcl_getFeatureMappings()70cdf0e10cSrcweir     static const FeatureMapping* lcl_getFeatureMappings()
71cdf0e10cSrcweir     {
72cdf0e10cSrcweir         static const FeatureMapping s_aMappings[] = {
73cdf0e10cSrcweir             { DSID_AUTORETRIEVEENABLED,     "GeneratedValues" },
74cdf0e10cSrcweir             { DSID_AUTOINCREMENTVALUE,      "GeneratedValues" },
75cdf0e10cSrcweir             { DSID_AUTORETRIEVEVALUE,       "GeneratedValues" },
76cdf0e10cSrcweir             { DSID_SQL92CHECK,              "UseSQL92NamingConstraints" },
77cdf0e10cSrcweir             { DSID_APPEND_TABLE_ALIAS,      "AppendTableAliasInSelect" },
78cdf0e10cSrcweir             { DSID_AS_BEFORE_CORRNAME,      "UseKeywordAsBeforeAlias" },
79cdf0e10cSrcweir             { DSID_ENABLEOUTERJOIN,         "UseBracketedOuterJoinSyntax" },
80cdf0e10cSrcweir             { DSID_IGNOREDRIVER_PRIV,       "IgnoreDriverPrivileges" },
81cdf0e10cSrcweir             { DSID_PARAMETERNAMESUBST,      "ParameterNameSubstitution" },
82cdf0e10cSrcweir             { DSID_SUPPRESSVERSIONCL,       "DisplayVersionColumns" },
83cdf0e10cSrcweir             { DSID_CATALOG,                 "UseCatalogInSelect" },
84cdf0e10cSrcweir             { DSID_SCHEMA,                  "UseSchemaInSelect" },
85cdf0e10cSrcweir             { DSID_INDEXAPPENDIX,           "UseIndexDirectionKeyword" },
86cdf0e10cSrcweir             { DSID_DOSLINEENDS,             "UseDOSLineEnds" },
87cdf0e10cSrcweir             { DSID_BOOLEANCOMPARISON,       "BooleanComparisonMode" },
88cdf0e10cSrcweir             { DSID_CHECK_REQUIRED_FIELDS,   "FormsCheckRequiredFields" },
89cdf0e10cSrcweir             { DSID_IGNORECURRENCY,          "IgnoreCurrency" },
90cdf0e10cSrcweir             { DSID_ESCAPE_DATETIME,         "EscapeDateTime" },
91cdf0e10cSrcweir             { DSID_PRIMARY_KEY_SUPPORT,     "PrimaryKeySupport" },
92cdf0e10cSrcweir             { DSID_RESPECTRESULTSETTYPE,    "RespectDriverResultSetType" },
93cdf0e10cSrcweir             { DSID_MAX_ROW_SCAN,            "MaxRowScan" },
94cdf0e10cSrcweir             { 0, NULL }
95cdf0e10cSrcweir         };
96cdf0e10cSrcweir         return s_aMappings;
97cdf0e10cSrcweir     }
98cdf0e10cSrcweir 
99cdf0e10cSrcweir 	//--------------------------------------------------------------------
lcl_getFeatureSet(const::rtl::OUString _rURL)100cdf0e10cSrcweir     static const FeatureSet& lcl_getFeatureSet( const ::rtl::OUString _rURL )
101cdf0e10cSrcweir     {
102cdf0e10cSrcweir         typedef ::std::map< ::rtl::OUString, FeatureSet, ::comphelper::UStringLess >    FeatureSets;
103cdf0e10cSrcweir         static FeatureSets s_aFeatureSets;
104cdf0e10cSrcweir         if ( s_aFeatureSets.empty() )
105cdf0e10cSrcweir         {
106cdf0e10cSrcweir             ::connectivity::DriversConfig aDriverConfig( ::comphelper::getProcessServiceFactory() );
107cdf0e10cSrcweir             const uno::Sequence< ::rtl::OUString > aPatterns = aDriverConfig.getURLs();
108cdf0e10cSrcweir             for (   const ::rtl::OUString* pattern = aPatterns.getConstArray();
109cdf0e10cSrcweir                     pattern != aPatterns.getConstArray() + aPatterns.getLength();
110cdf0e10cSrcweir                     ++pattern
111cdf0e10cSrcweir                 )
112cdf0e10cSrcweir             {
113cdf0e10cSrcweir                 FeatureSet aCurrentSet;
114cdf0e10cSrcweir                 const ::comphelper::NamedValueCollection aCurrentFeatures( aDriverConfig.getFeatures( *pattern ).getNamedValues() );
115cdf0e10cSrcweir 
116cdf0e10cSrcweir                 const FeatureMapping* pFeatureMapping = lcl_getFeatureMappings();
117cdf0e10cSrcweir                 while ( pFeatureMapping->pAsciiFeatureName )
118cdf0e10cSrcweir                 {
119cdf0e10cSrcweir                     if ( aCurrentFeatures.has( pFeatureMapping->pAsciiFeatureName ) )
120cdf0e10cSrcweir                         aCurrentSet.put( pFeatureMapping->nItemID );
121cdf0e10cSrcweir                     ++pFeatureMapping;
122cdf0e10cSrcweir                 }
123cdf0e10cSrcweir 
124cdf0e10cSrcweir                 s_aFeatureSets[ *pattern ] = aCurrentSet;
125cdf0e10cSrcweir             }
126cdf0e10cSrcweir         }
127cdf0e10cSrcweir 
128cdf0e10cSrcweir         OSL_ENSURE( s_aFeatureSets.find( _rURL ) != s_aFeatureSets.end(), "invalid URL/pattern!" );
129cdf0e10cSrcweir         return s_aFeatureSets[ _rURL ];
130cdf0e10cSrcweir     }
131cdf0e10cSrcweir 
132cdf0e10cSrcweir 	//--------------------------------------------------------------------
getAuthenticationMode(const::rtl::OUString & _sURL)133cdf0e10cSrcweir     static AuthenticationMode getAuthenticationMode( const ::rtl::OUString& _sURL )
134cdf0e10cSrcweir     {
135cdf0e10cSrcweir         DECLARE_STL_USTRINGACCESS_MAP( FeatureSupport, Supported);
136cdf0e10cSrcweir         static Supported s_aSupport;
137cdf0e10cSrcweir         if ( s_aSupport.empty() )
138cdf0e10cSrcweir         {
139cdf0e10cSrcweir             ::connectivity::DriversConfig aDriverConfig(::comphelper::getProcessServiceFactory());
140cdf0e10cSrcweir             const uno::Sequence< ::rtl::OUString > aURLs = aDriverConfig.getURLs();
141cdf0e10cSrcweir             const ::rtl::OUString* pIter = aURLs.getConstArray();
142cdf0e10cSrcweir             const ::rtl::OUString* pEnd = pIter + aURLs.getLength();
143cdf0e10cSrcweir             for(;pIter != pEnd;++pIter)
144cdf0e10cSrcweir             {
145cdf0e10cSrcweir                 FeatureSupport aInit( AuthNone );
146cdf0e10cSrcweir                 const ::comphelper::NamedValueCollection& aMetaData = aDriverConfig.getMetaData(*pIter);
147cdf0e10cSrcweir                 if ( aMetaData.has("Authentication") )
148cdf0e10cSrcweir                 {
149cdf0e10cSrcweir                     ::rtl::OUString sAuth;
150cdf0e10cSrcweir                     aMetaData.get("Authentication") >>= sAuth;
151cdf0e10cSrcweir                     if ( sAuth.equalsAscii("UserPassword") )
152cdf0e10cSrcweir                         aInit = AuthUserPwd;
153cdf0e10cSrcweir                     else if ( sAuth.equalsAscii("Password") )
154cdf0e10cSrcweir                         aInit = AuthPwd;
155cdf0e10cSrcweir                 }
156cdf0e10cSrcweir                 s_aSupport.insert(Supported::value_type(*pIter,aInit));
157cdf0e10cSrcweir             }
158cdf0e10cSrcweir         }
159cdf0e10cSrcweir         OSL_ENSURE(s_aSupport.find(_sURL) != s_aSupport.end(),"Illegal URL!");
160cdf0e10cSrcweir         return s_aSupport[ _sURL ].eAuthentication;
161cdf0e10cSrcweir     }
162cdf0e10cSrcweir 
163cdf0e10cSrcweir 	//====================================================================
164cdf0e10cSrcweir 	//= DataSourceMetaData_Impl
165cdf0e10cSrcweir 	//====================================================================
166cdf0e10cSrcweir     class DataSourceMetaData_Impl
167cdf0e10cSrcweir     {
168cdf0e10cSrcweir     public:
169cdf0e10cSrcweir         DataSourceMetaData_Impl( const ::rtl::OUString& _sURL );
170cdf0e10cSrcweir 
getType() const171cdf0e10cSrcweir         inline ::rtl::OUString getType() const { return m_sURL; }
172cdf0e10cSrcweir 
173cdf0e10cSrcweir     private:
174cdf0e10cSrcweir         const ::rtl::OUString m_sURL;
175cdf0e10cSrcweir     };
176cdf0e10cSrcweir 
177cdf0e10cSrcweir 	//--------------------------------------------------------------------
DataSourceMetaData_Impl(const::rtl::OUString & _sURL)178cdf0e10cSrcweir     DataSourceMetaData_Impl::DataSourceMetaData_Impl( const ::rtl::OUString& _sURL )
179cdf0e10cSrcweir         :m_sURL( _sURL )
180cdf0e10cSrcweir     {
181cdf0e10cSrcweir     }
182cdf0e10cSrcweir 
183cdf0e10cSrcweir 	//====================================================================
184cdf0e10cSrcweir 	//= DataSourceMetaData
185cdf0e10cSrcweir 	//====================================================================
186cdf0e10cSrcweir 	//--------------------------------------------------------------------
DataSourceMetaData(const::rtl::OUString & _sURL)187cdf0e10cSrcweir     DataSourceMetaData::DataSourceMetaData( const ::rtl::OUString& _sURL )
188cdf0e10cSrcweir         :m_pImpl( new DataSourceMetaData_Impl( _sURL ) )
189cdf0e10cSrcweir     {
190cdf0e10cSrcweir     }
191cdf0e10cSrcweir 
192cdf0e10cSrcweir 	//--------------------------------------------------------------------
~DataSourceMetaData()193cdf0e10cSrcweir     DataSourceMetaData::~DataSourceMetaData()
194cdf0e10cSrcweir     {
195cdf0e10cSrcweir     }
196cdf0e10cSrcweir 
197cdf0e10cSrcweir 	//--------------------------------------------------------------------
getFeatureSet() const198cdf0e10cSrcweir     const FeatureSet& DataSourceMetaData::getFeatureSet() const
199cdf0e10cSrcweir     {
200cdf0e10cSrcweir         return lcl_getFeatureSet( m_pImpl->getType() );
201cdf0e10cSrcweir     }
202cdf0e10cSrcweir 
203cdf0e10cSrcweir 	//--------------------------------------------------------------------
getAuthentication(const::rtl::OUString & _sURL)204cdf0e10cSrcweir     AuthenticationMode  DataSourceMetaData::getAuthentication( const ::rtl::OUString& _sURL )
205cdf0e10cSrcweir     {
206cdf0e10cSrcweir         return getAuthenticationMode( _sURL );
207cdf0e10cSrcweir     }
208cdf0e10cSrcweir 
209cdf0e10cSrcweir //........................................................................
210cdf0e10cSrcweir } // namespace dbaui
211cdf0e10cSrcweir //........................................................................
212