xref: /AOO41X/main/connectivity/source/drivers/evoab2/NDriver.cxx (revision 9b5730f6ddef7eb82608ca4d31dc0d7678e652cf)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_connectivity.hxx"
26 #include "NDriver.hxx"
27 #include "NConnection.hxx"
28 #include <com/sun/star/lang/DisposedException.hpp>
29 #include "connectivity/dbexception.hxx"
30 //#ifndef _CONNECTIVITY_EVOAB_CONFIGACCESS_HXX_
31 //#include "LConfigAccess.hxx"
32 //#endif
33 #include <osl/file.hxx>
34 #include "osl/security.hxx"
35 #include <comphelper/processfactory.hxx>
36 #include <com/sun/star/ucb/XContentAccess.hpp>
37 #include <com/sun/star/ucb/XCommandEnvironment.hpp>
38 #include <ucbhelper/content.hxx>
39 #include <tools/debug.hxx>
40 #include "NDebug.hxx"
41 #include <signal.h>
42 #include "resource/common_res.hrc"
43 #include "resource/sharedresources.hxx"
44 
45 using namespace osl;
46 using namespace connectivity::evoab;
47 //using namespace connectivity::file;
48 using namespace ::com::sun::star::uno;
49 using namespace ::com::sun::star::beans;
50 using namespace ::com::sun::star::sdbcx;
51 using namespace ::com::sun::star::sdbc;
52 using namespace ::com::sun::star::lang;
53 using namespace ::com::sun::star::ucb;
54 
55 // --------------------------------------------------------------------------------
OEvoabDriver(const Reference<XMultiServiceFactory> & _rxFactory)56 OEvoabDriver::OEvoabDriver(const Reference< XMultiServiceFactory >& _rxFactory) :
57         ODriver_BASE( m_aMutex ), m_xFactory( _rxFactory )
58 {
59 }
60 // -----------------------------------------------------------------------------
~OEvoabDriver()61 OEvoabDriver::~OEvoabDriver()
62 {
63 }
64 // -----------------------------------------------------------------------------
disposing()65 void OEvoabDriver::disposing()
66 {
67     ::osl::MutexGuard aGuard(m_aMutex);
68 
69     // when driver will be destroied so all our connections have to be destroied as well
70     for (OWeakRefArray::iterator i = m_xConnections.begin(); m_xConnections.end() != i; ++i)
71     {
72         Reference< XComponent > xComp(i->get(), UNO_QUERY);
73         if (xComp.is()) {
74             try {
75             xComp->dispose();
76             }
77             catch (com::sun::star::lang::DisposedException e) {
78              xComp.clear();
79             }
80         }
81     }
82     m_xConnections.clear();
83     connectivity::OWeakRefArray().swap(m_xConnections); // this really clears
84 
85     ODriver_BASE::disposing();
86 }
87 
88 // static ServiceInfo
89 //------------------------------------------------------------------------------
getImplementationName_Static()90 rtl::OUString OEvoabDriver::getImplementationName_Static(  ) throw(RuntimeException)
91 {
92     return rtl::OUString::createFromAscii(EVOAB_DRIVER_IMPL_NAME);
93     // this name is referenced in the configuration and in the evoab.xml
94     // Please take care when changing it.
95 }
96 
97 //------------------------------------------------------------------
getSupportedServiceNames_Static()98 Sequence< ::rtl::OUString > OEvoabDriver::getSupportedServiceNames_Static(  ) throw (RuntimeException)
99 {
100     // which service is supported
101     // for more information @see com.sun.star.sdbc.Driver
102     Sequence< ::rtl::OUString > aSNS( 1 );
103     aSNS[0] = ::rtl::OUString::createFromAscii("com.sun.star.sdbc.Driver");
104     return aSNS;
105 }
106 //------------------------------------------------------------------
getImplementationName()107 ::rtl::OUString SAL_CALL OEvoabDriver::getImplementationName(  ) throw(RuntimeException)
108 {
109     return getImplementationName_Static();
110 }
111 //------------------------------------------------------------------
supportsService(const::rtl::OUString & _rServiceName)112 sal_Bool SAL_CALL OEvoabDriver::supportsService( const ::rtl::OUString& _rServiceName ) throw(RuntimeException)
113 {
114     Sequence< ::rtl::OUString > aSupported(getSupportedServiceNames());
115     const ::rtl::OUString* pSupported = aSupported.getConstArray();
116     const ::rtl::OUString* pEnd = pSupported + aSupported.getLength();
117     for (;pSupported != pEnd && !pSupported->equals(_rServiceName); ++pSupported)
118         ;
119 
120     return pSupported != pEnd;
121 }
122 //------------------------------------------------------------------
getSupportedServiceNames()123 Sequence< ::rtl::OUString > SAL_CALL OEvoabDriver::getSupportedServiceNames(  ) throw(RuntimeException)
124 {
125     return getSupportedServiceNames_Static();
126 }
127 
128 //------------------------------------------------------------------
OEvoabDriver_CreateInstance(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & _rxFactory)129 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >  SAL_CALL connectivity::evoab::OEvoabDriver_CreateInstance(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory) throw( ::com::sun::star::uno::Exception )
130 {
131     return *(new OEvoabDriver(_rxFactory));
132 }
133 // --------------------------------------------------------------------------------
connect(const::rtl::OUString & url,const Sequence<PropertyValue> & info)134 Reference< XConnection > SAL_CALL OEvoabDriver::connect( const ::rtl::OUString& url, const Sequence< PropertyValue >& info ) throw(SQLException, RuntimeException)
135 {
136     ::osl::MutexGuard aGuard( m_aMutex );
137     if (ODriver_BASE::rBHelper.bDisposed)
138         throw DisposedException();
139 
140     if ( ! acceptsURL(url) )
141         return NULL;
142 
143     OEvoabConnection* pCon = new OEvoabConnection( *this );
144     pCon->construct(url,info);
145         Reference< XConnection > xCon = pCon;
146         m_xConnections.push_back(WeakReferenceHelper(*pCon));
147 
148     return xCon;
149 }
150 // --------------------------------------------------------------------------------
acceptsURL(const::rtl::OUString & url)151 sal_Bool SAL_CALL OEvoabDriver::acceptsURL( const ::rtl::OUString& url )
152     throw(SQLException, RuntimeException)
153 {
154     return acceptsURL_Stat(url);
155 }
156 
157 // --------------------------------------------------------------------------------
getPropertyInfo(const::rtl::OUString & url,const Sequence<PropertyValue> &)158 Sequence< DriverPropertyInfo > SAL_CALL OEvoabDriver::getPropertyInfo( const ::rtl::OUString& url, const Sequence< PropertyValue >& /*info*/ ) throw(SQLException, RuntimeException)
159 {
160     if ( ! acceptsURL(url) )
161     {
162         ::connectivity::SharedResources aResources;
163         const ::rtl::OUString sMessage = aResources.getResourceString(STR_URI_SYNTAX_ERROR);
164         ::dbtools::throwGenericSQLException(sMessage ,*this);
165     } // if ( ! acceptsURL(url) )
166 
167     // if you have somthing special to say return it here :-)
168     return Sequence< DriverPropertyInfo >();
169 }
170 
171 // --------------------------------------------------------------------------------
getMajorVersion()172 sal_Int32 SAL_CALL OEvoabDriver::getMajorVersion(  ) throw(RuntimeException)
173 {
174     return 1;
175 }
176 // --------------------------------------------------------------------------------
getMinorVersion()177 sal_Int32 SAL_CALL OEvoabDriver::getMinorVersion(  ) throw(RuntimeException)
178 {
179     return 0;
180 }
181 // --------------------------------------------------------------------------------
acceptsURL_Stat(const::rtl::OUString & url)182 sal_Bool OEvoabDriver::acceptsURL_Stat( const ::rtl::OUString& url )
183 {
184     return (url.equalsAscii("sdbc:address:evolution:local") || url.equalsAscii("sdbc:address:evolution:groupwise")||url.equalsAscii("sdbc:address:evolution:ldap"))&& EApiInit();
185 }
186 // -----------------------------------------------------------------------------
187