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