1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #ifndef EXTENSIONS_ABP_DATASOURCEHANDLING_HXX
25*b1cdbd2cSJim Jagielski #define EXTENSIONS_ABP_DATASOURCEHANDLING_HXX
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/Reference.hxx>
28*b1cdbd2cSJim Jagielski #include "abptypes.hxx"
29*b1cdbd2cSJim Jagielski 
30*b1cdbd2cSJim Jagielski //========================================================================
31*b1cdbd2cSJim Jagielski namespace com { namespace sun { namespace star {
32*b1cdbd2cSJim Jagielski 	namespace lang {
33*b1cdbd2cSJim Jagielski 		class XMultiServiceFactory;
34*b1cdbd2cSJim Jagielski 	}
35*b1cdbd2cSJim Jagielski 	namespace beans {
36*b1cdbd2cSJim Jagielski 		class XPropertySet;
37*b1cdbd2cSJim Jagielski 	}
38*b1cdbd2cSJim Jagielski } } }
39*b1cdbd2cSJim Jagielski 
40*b1cdbd2cSJim Jagielski class Window;
41*b1cdbd2cSJim Jagielski 
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski //.........................................................................
44*b1cdbd2cSJim Jagielski namespace abp
45*b1cdbd2cSJim Jagielski {
46*b1cdbd2cSJim Jagielski //.........................................................................
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski 	//=====================================================================
49*b1cdbd2cSJim Jagielski 	//= ODataSourceContext
50*b1cdbd2cSJim Jagielski 	//=====================================================================
51*b1cdbd2cSJim Jagielski 	struct ODataSourceContextImpl;
52*b1cdbd2cSJim Jagielski 	class ODataSource;
53*b1cdbd2cSJim Jagielski 	/// a non-UNO wrapper for the data source context
54*b1cdbd2cSJim Jagielski 	class ODataSourceContext
55*b1cdbd2cSJim Jagielski 	{
56*b1cdbd2cSJim Jagielski 	private:
57*b1cdbd2cSJim Jagielski 		ODataSourceContextImpl*		m_pImpl;
58*b1cdbd2cSJim Jagielski 
59*b1cdbd2cSJim Jagielski 	public:
60*b1cdbd2cSJim Jagielski 		ODataSourceContext(
61*b1cdbd2cSJim Jagielski 			const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB
62*b1cdbd2cSJim Jagielski 		);
63*b1cdbd2cSJim Jagielski 
64*b1cdbd2cSJim Jagielski 		/// retrieves the names of all data sources
65*b1cdbd2cSJim Jagielski 		void	getDataSourceNames( StringBag& _rNames ) const SAL_THROW (( ));
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski 		/// disambiguates the given name by appending auccessive numbers
68*b1cdbd2cSJim Jagielski 		::rtl::OUString& disambiguate(::rtl::OUString& _rDataSourceName);
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski 		/// creates a new MORK data source
71*b1cdbd2cSJim Jagielski 		ODataSource createNewMORK( const ::rtl::OUString& _rName ) SAL_THROW (( ));
72*b1cdbd2cSJim Jagielski 
73*b1cdbd2cSJim Jagielski 		/// creates a new Thunderbird data source
74*b1cdbd2cSJim Jagielski 		ODataSource createNewThunderbird( const ::rtl::OUString& _rName ) SAL_THROW (( ));
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski 		/// creates a new Evolution local data source
77*b1cdbd2cSJim Jagielski 		ODataSource createNewEvolution( const ::rtl::OUString& _rName ) SAL_THROW (( ));
78*b1cdbd2cSJim Jagielski 
79*b1cdbd2cSJim Jagielski 		/// creates a new Evolution LDAP data source
80*b1cdbd2cSJim Jagielski 		ODataSource createNewEvolutionLdap( const ::rtl::OUString& _rName ) SAL_THROW (( ));
81*b1cdbd2cSJim Jagielski 
82*b1cdbd2cSJim Jagielski 		/// creates a new Evolution GROUPWISE data source
83*b1cdbd2cSJim Jagielski 		ODataSource createNewEvolutionGroupwise( const ::rtl::OUString& _rName ) SAL_THROW (( ));
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski 		/// creates a new KDE address book data source
86*b1cdbd2cSJim Jagielski 		ODataSource createNewKab( const ::rtl::OUString& _rName ) SAL_THROW (( ));
87*b1cdbd2cSJim Jagielski 
88*b1cdbd2cSJim Jagielski 		/// creates a new Mac OS X address book data source
89*b1cdbd2cSJim Jagielski 		ODataSource createNewMacab( const ::rtl::OUString& _rName ) SAL_THROW (( ));
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski 		/// creates a new LDAP data source
92*b1cdbd2cSJim Jagielski 		ODataSource	createNewLDAP( const ::rtl::OUString& _rName ) SAL_THROW (( ));
93*b1cdbd2cSJim Jagielski 
94*b1cdbd2cSJim Jagielski 		/// creates a new Outlook data source
95*b1cdbd2cSJim Jagielski 		ODataSource	createNewOutlook( const ::rtl::OUString& _rName ) SAL_THROW (( ));
96*b1cdbd2cSJim Jagielski 
97*b1cdbd2cSJim Jagielski 		/// creates a new Outlook express data source
98*b1cdbd2cSJim Jagielski 		ODataSource	createNewOE( const ::rtl::OUString& _rName ) SAL_THROW (( ));
99*b1cdbd2cSJim Jagielski 
100*b1cdbd2cSJim Jagielski 		/// creates a new dBase data source
101*b1cdbd2cSJim Jagielski 		ODataSource	createNewDBase( const ::rtl::OUString& _rName ) SAL_THROW (( ));
102*b1cdbd2cSJim Jagielski 	};
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski 	//=====================================================================
105*b1cdbd2cSJim Jagielski 	//= ODataSource
106*b1cdbd2cSJim Jagielski 	//=====================================================================
107*b1cdbd2cSJim Jagielski 	struct ODataSourceImpl;
108*b1cdbd2cSJim Jagielski 	struct PackageAccessControl;
109*b1cdbd2cSJim Jagielski 	/** a non-UNO wrapper for a data source
110*b1cdbd2cSJim Jagielski 		<p>This class allows to access data sources without the need to compile the respective file with
111*b1cdbd2cSJim Jagielski 		exception handling enabled (hopefully :).</p>
112*b1cdbd2cSJim Jagielski 		<p>In addition to wrapping an UNO data source, an instance of this class can handle at most
113*b1cdbd2cSJim Jagielski 		one valid connection, as obtained from the data source.</p>
114*b1cdbd2cSJim Jagielski 	*/
115*b1cdbd2cSJim Jagielski 	class ODataSource
116*b1cdbd2cSJim Jagielski 	{
117*b1cdbd2cSJim Jagielski 	private:
118*b1cdbd2cSJim Jagielski 		ODataSourceImpl*	m_pImpl;
119*b1cdbd2cSJim Jagielski 
120*b1cdbd2cSJim Jagielski 	public:
121*b1cdbd2cSJim Jagielski 		// ----------------------------------------------------------------
122*b1cdbd2cSJim Jagielski 		// - ctor/dtor/assignment
123*b1cdbd2cSJim Jagielski 		// ----------------------------------------------------------------
124*b1cdbd2cSJim Jagielski 		/// constructs an object which is initially invalid
125*b1cdbd2cSJim Jagielski 		ODataSource(
126*b1cdbd2cSJim Jagielski 			const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB
127*b1cdbd2cSJim Jagielski 		);
128*b1cdbd2cSJim Jagielski 
129*b1cdbd2cSJim Jagielski 		/// copy ctor
130*b1cdbd2cSJim Jagielski 		ODataSource( const ODataSource& _rSource );
131*b1cdbd2cSJim Jagielski 
132*b1cdbd2cSJim Jagielski 		/// dtor
133*b1cdbd2cSJim Jagielski 		~ODataSource( );
134*b1cdbd2cSJim Jagielski 
135*b1cdbd2cSJim Jagielski 		/// assignment
136*b1cdbd2cSJim Jagielski 		ODataSource& operator=( const ODataSource& _rSource );
137*b1cdbd2cSJim Jagielski 
138*b1cdbd2cSJim Jagielski 		// ----------------------------------------------------------------
139*b1cdbd2cSJim Jagielski 		/// checks whether or not the object represents a valid data source
140*b1cdbd2cSJim Jagielski 		sal_Bool	isValid() const SAL_THROW (( ));
141*b1cdbd2cSJim Jagielski 
142*b1cdbd2cSJim Jagielski 		// ----------------------------------------------------------------
143*b1cdbd2cSJim Jagielski 		/// removes the data source represented by the object from the data source context
144*b1cdbd2cSJim Jagielski 		void		remove() SAL_THROW (( ));
145*b1cdbd2cSJim Jagielski 			// TODO: put this into the context class
146*b1cdbd2cSJim Jagielski 
147*b1cdbd2cSJim Jagielski 		/// returns the name of the data source
148*b1cdbd2cSJim Jagielski 		::rtl::OUString
149*b1cdbd2cSJim Jagielski 					getName() const SAL_THROW (( ));
150*b1cdbd2cSJim Jagielski 
151*b1cdbd2cSJim Jagielski 		/// renames the data source
152*b1cdbd2cSJim Jagielski 		sal_Bool	rename( const ::rtl::OUString& _rName ) SAL_THROW (( ));
153*b1cdbd2cSJim Jagielski 			// TODO: put this into the context class
154*b1cdbd2cSJim Jagielski 
155*b1cdbd2cSJim Jagielski 		// ----------------------------------------------------------------
156*b1cdbd2cSJim Jagielski 		// - connection handling
157*b1cdbd2cSJim Jagielski 		// ----------------------------------------------------------------
158*b1cdbd2cSJim Jagielski 		/** connects to the data source represented by this object
159*b1cdbd2cSJim Jagielski 			@param _pMessageParent
160*b1cdbd2cSJim Jagielski 				the window to use as parent for any error messages. If this is <NULL/>, no messages are displayed
161*b1cdbd2cSJim Jagielski 				at all.
162*b1cdbd2cSJim Jagielski 			@see isConnected
163*b1cdbd2cSJim Jagielski 		*/
164*b1cdbd2cSJim Jagielski 		sal_Bool	connect( Window* _pMessageParent ) SAL_THROW (( ));
165*b1cdbd2cSJim Jagielski 
166*b1cdbd2cSJim Jagielski 		/// returns <TRUE/> if the object has a valid connection, obtained from it's data source
167*b1cdbd2cSJim Jagielski 		sal_Bool	isConnected( ) const SAL_THROW (( ));
168*b1cdbd2cSJim Jagielski 
169*b1cdbd2cSJim Jagielski 		/// disconnects from the data source (i.e. disposes the UNO connection hold internally)
170*b1cdbd2cSJim Jagielski 		void		disconnect( ) SAL_THROW (( ));
171*b1cdbd2cSJim Jagielski 
172*b1cdbd2cSJim Jagielski 		/// stores the database file
173*b1cdbd2cSJim Jagielski 		void		store() SAL_THROW (( ));
174*b1cdbd2cSJim Jagielski 
175*b1cdbd2cSJim Jagielski 		/// register the data source under the given name in the configuration
176*b1cdbd2cSJim Jagielski 		void		registerDataSource( const ::rtl::OUString& _sRegisteredDataSourceName )  SAL_THROW (( ));
177*b1cdbd2cSJim Jagielski 
178*b1cdbd2cSJim Jagielski 		// ----------------------------------------------------------------
179*b1cdbd2cSJim Jagielski 		/** retrieves the tables names from the connection
180*b1cdbd2cSJim Jagielski 			<p>to be called when <method>isConnection</method> returns <TRUE/> only</p>
181*b1cdbd2cSJim Jagielski 		*/
182*b1cdbd2cSJim Jagielski 		const StringBag&	getTableNames() const SAL_THROW (( ));
183*b1cdbd2cSJim Jagielski 
184*b1cdbd2cSJim Jagielski         /** determines whether a given table exists
185*b1cdbd2cSJim Jagielski         */
186*b1cdbd2cSJim Jagielski         bool    hasTable( const ::rtl::OUString& _rTableName ) const;
187*b1cdbd2cSJim Jagielski 
188*b1cdbd2cSJim Jagielski 		/// return the intern data source object
189*b1cdbd2cSJim Jagielski 		::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > getDataSource() const SAL_THROW (( ));
190*b1cdbd2cSJim Jagielski 
191*b1cdbd2cSJim Jagielski 
192*b1cdbd2cSJim Jagielski 		// ----------------------------------------------------------------
193*b1cdbd2cSJim Jagielski 		/** set a new data source.
194*b1cdbd2cSJim Jagielski 			<p>Available to selected clients only</p>
195*b1cdbd2cSJim Jagielski 		*/
196*b1cdbd2cSJim Jagielski 		void		setDataSource(
197*b1cdbd2cSJim Jagielski 			const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxDS
198*b1cdbd2cSJim Jagielski 			,const ::rtl::OUString& _sName
199*b1cdbd2cSJim Jagielski 			,PackageAccessControl
200*b1cdbd2cSJim Jagielski 		);
201*b1cdbd2cSJim Jagielski 
202*b1cdbd2cSJim Jagielski 	private:
203*b1cdbd2cSJim Jagielski 		ODataSource( ); // never implemented
204*b1cdbd2cSJim Jagielski 	};
205*b1cdbd2cSJim Jagielski 
206*b1cdbd2cSJim Jagielski //.........................................................................
207*b1cdbd2cSJim Jagielski }	// namespace abp
208*b1cdbd2cSJim Jagielski //.........................................................................
209*b1cdbd2cSJim Jagielski 
210*b1cdbd2cSJim Jagielski #endif // EXTENSIONS_ABP_DATASOURCEHANDLING_HXX
211*b1cdbd2cSJim Jagielski 
212