summaryrefslogtreecommitdiff
path: root/dbaccess/source/inc/dsntypes.hxx
blob: 0651c0d5babc2f7926032ee0502662753d9455cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
/*************************************************************************
 *
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * Copyright 2008 by Sun Microsystems, Inc.
 *
 * OpenOffice.org - a multi-platform office productivity suite
 *
 * $RCSfile: dsntypes.hxx,v $
 *
 * $Revision: 1.3.68.4 $
 *
 * This file is part of OpenOffice.org.
 *
 * OpenOffice.org is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License version 3
 * only, as published by the Free Software Foundation.
 *
 * OpenOffice.org is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License version 3 for more details
 * (a copy is included in the LICENSE file that accompanied this code).
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with OpenOffice.org.  If not, see
 * <http://www.openoffice.org/license.html>
 * for a copy of the LGPLv3 License.
 *
 ************************************************************************/

#ifndef _DBACCESS_DSNTYPES_HXX_
#define _DBACCESS_DSNTYPES_HXX_

#include <com/sun/star/lang/XMultiServiceFactory.hpp>

#include <comphelper/stl_types.hxx>
#include "dbaccessdllapi.h"
#include <tools/string.hxx>

//.........................................................................
namespace dbaccess
{
//.........................................................................

//=========================================================================
//= DATASOURCE_TYPE
//=========================================================================
/// known datasource types
enum DATASOURCE_TYPE
{
    DST_MSACCESS            =  1,
    DST_MYSQL_ODBC          =  2,
    DST_MYSQL_JDBC          =  3,
    DST_ORACLE_JDBC         =  4,
    DST_ADABAS              =  5,
    DST_CALC                =  6,
    DST_DBASE               =  7,
    DST_FLAT                =  8,
    DST_JDBC                =  9,
    DST_ODBC                = 10,
    DST_ADO                 = 11,
    DST_MOZILLA             = 12,
     DST_THUNDERBIRD         = 13,
    DST_LDAP                = 14,
    DST_OUTLOOK             = 15,
    DST_OUTLOOKEXP          = 16,
    DST_EVOLUTION           = 17,
    DST_EVOLUTION_GROUPWISE = 18,
    DST_EVOLUTION_LDAP      = 19,
     DST_KAB                 = 20,
     DST_MACAB               = 21,
    DST_MSACCESS_2007       = 22,
     DST_EMBEDDED_HSQLDB    = 23,
    DST_MYSQL_NATIVE        = 24,

    DST_USERDEFINE1,    /// first user defined driver
    DST_USERDEFINE2,
    DST_USERDEFINE3,
    DST_USERDEFINE4,
    DST_USERDEFINE5,
    DST_USERDEFINE6,
    DST_USERDEFINE7,
    DST_USERDEFINE8,
    DST_USERDEFINE9,
    DST_USERDEFINE10,


    DST_UNKNOWN         /// unrecognized type
};

//=========================================================================
//= ODsnTypeCollection
//=========================================================================
class DBACCESS_DLLPUBLIC ODsnTypeCollection
{
protected:
    DECLARE_STL_VECTOR(String, StringVector);
    DECLARE_STL_VECTOR(DATASOURCE_TYPE, TypeVector);
    typedef ::std::map<DATASOURCE_TYPE,DATASOURCE_TYPE> TRelatedTypes;

    StringVector    m_aDsnTypesDisplayNames;    /// user readable names for the datasource types
    StringVector    m_aDsnPrefixes;             /// DSN prefixes which determine the type of a datasource
    TypeVector      m_aDsnTypes;                /// types of datasources we know
    StringVector    m_aUserExtensions;          /// extensions of user defined types

#ifdef DBG_UTIL
    sal_Int32       m_nLivingIterators;         /// just for debugging reasons, counts the living iterators
#endif

public:
    class TypeIterator;
    friend class ODsnTypeCollection::TypeIterator;

    ODsnTypeCollection();
    ~ODsnTypeCollection();

    /// get the datasource type from a DSN string
    DATASOURCE_TYPE getType(const String& _rDsn) const;

    /// get the datasource type display name from a DSN string
    String getTypeDisplayName(DATASOURCE_TYPE _eType) const;

    /// the the DSN prefix associated with a given type
    String getDatasourcePrefix(DATASOURCE_TYPE _eType) const;

    /// returns the extension of the user defined type
    String getTypeExtension(DATASOURCE_TYPE _eType) const;

    /// on a given string, cut the type prefix and return the result
    String cutPrefix(const String& _rDsn) const;

    /// returns the media type of a file based database
    String getMediaType(DATASOURCE_TYPE _eType) const;

    /// returns the dsn prefix for a given media type
    static String getDatasourcePrefixFromMediaType(const String& _sMediaType,const String& _sExtension = String() );

    void extractHostNamePort(const String& _rDsn,String& _sDatabaseName,String& _rHostname,sal_Int32& _nPortNumber) const;

    /// check if the given data source allows creation of tables
    sal_Bool supportsTableCreation(DATASOURCE_TYPE _eType);

    // check if a Browse button may be shown to insert connection url
    sal_Bool supportsBrowsing(DATASOURCE_TYPE _eType);

    /// check if the given data source tyoe is based on the file system - i.e. the URL is a prefix plus a file URL
    sal_Bool isFileSystemBased(DATASOURCE_TYPE _eType) const;

    /// checks if the given data source type embeds its data into the database document
    bool isEmbeddedDatabase( DATASOURCE_TYPE _eType ) const;

    /** returns default settings for newly created databases of the given type.

        Currently implemented (and used) for DST_EMBEDDED_HSQLDB only
    */
    ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue>
            getDefaultDBSettings( DATASOURCE_TYPE _eType ) const;

    /// get access to the first element of the types collection
    TypeIterator    begin() const;
    /// get access to the (last + 1st) element of the types collection
    TypeIterator    end() const;

    /** read all user defined driver types.
        @param  _rxORB
            The service factory
    */
    void initUserDriverTypes(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxORB);

protected:
    /// return the connection type a DSN string represents
    DATASOURCE_TYPE implDetermineType(const String& _rDsn) const;

    /// return the index within the internal structures for the connection type given
    sal_Int32 implDetermineTypeIndex(DATASOURCE_TYPE _eType) const;
};

//-------------------------------------------------------------------------
//- ODsnTypeCollection::TypeIterator
//-------------------------------------------------------------------------
class DBACCESS_DLLPUBLIC ODsnTypeCollection::TypeIterator
{
    friend class ODsnTypeCollection;

    friend bool DBACCESS_DLLPUBLIC operator==(const TypeIterator& lhs, const TypeIterator& rhs);
    friend bool DBACCESS_DLLPUBLIC operator!=(const TypeIterator& lhs, const TypeIterator& rhs) { return !(lhs == rhs); }

protected:
    const ODsnTypeCollection*   m_pContainer;
    sal_Int32                   m_nPosition;

public:
    TypeIterator(const TypeIterator& _rSource);
    ~TypeIterator();

    DATASOURCE_TYPE getType() const;
    String          getDisplayName() const;

    /// prefix increment
    const TypeIterator& operator++();
    /// postfix increment
    const TypeIterator  operator++(int) { TypeIterator hold(*this); ++*this; return hold; }

    /// prefix decrement
    const TypeIterator& operator--();
    /// postfix decrement
    const TypeIterator  operator--(int) { TypeIterator hold(*this); --*this; return hold; }

protected:
    TypeIterator(const ODsnTypeCollection* _pContainer, sal_Int32 _nInitialPos = 0);
};

//.........................................................................
}   // namespace dbaccess
//.........................................................................

#endif // _DBACCESS_DSNTYPES_HXX_