01: /*
02: * GeoTools - OpenSource mapping toolkit
03: * http://geotools.org
04: * (C) 2005-2006, GeoTools Project Managment Committee (PMC)
05: * (C) 2005, Institut de Recherche pour le Développement
06: *
07: * This library is free software; you can redistribute it and/or
08: * modify it under the terms of the GNU Lesser General Public
09: * License as published by the Free Software Foundation;
10: * version 2.1 of the License.
11: *
12: * This library is distributed in the hope that it will be useful,
13: * but WITHOUT ANY WARRANTY; without even the implied warranty of
14: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15: * Lesser General Public License for more details.
16: */
17: package org.geotools.referencing.factory.epsg;
18:
19: // J2SE dependencies
20: import java.sql.Connection;
21: import java.sql.SQLException;
22: import java.util.logging.Level;
23: import java.util.logging.LogRecord;
24:
25: // Geotools dependencies
26: import org.geotools.factory.Hints;
27: import org.geotools.referencing.factory.AbstractAuthorityFactory;
28:
29: /**
30: * Connection to the EPSG database in MS-Access format using JDBC-ODBC bridge. The EPSG
31: * database can be downloaded from <A HREF="http://www.epsg.org">http://www.epsg.org</A>.
32: * The JDBC-ODBC bridge is a documented feature of Sun's J2SE distribution. See
33: * <A HREF="http://java.sun.com/j2se/1.5/docs/guide/jdbc/bridge.html">New data source
34: * implementations in the JDBC-ODBC bridge</A>.
35: * <P>
36: * Just having this class accessible in the classpath, together with the registration in
37: * the {@code META-INF/services/} directory, is suffisient to get a working EPSG authority
38: * factory backed by this database. Vendors can create a copy of this class, modify it and
39: * bundle it with their own distribution if they want to connect their users to an other
40: * database (for example a PostgreSQL database reachable on internet).
41: *
42: * @since 2.1
43: * @source $URL: http://svn.geotools.org/geotools/tags/2.4.1/modules/plugin/epsg-access/src/main/java/org/geotools/referencing/factory/epsg/AccessDataSource.java $
44: * @version $Id: AccessDataSource.java 26328 2007-07-24 16:57:19Z desruisseaux $
45: * @author Martin Desruisseaux
46: *
47: * @deprecated Replaced by {@link FactoryOnAccess}.
48: */
49: public class AccessDataSource extends sun.jdbc.odbc.ee.DataSource
50: implements DataSource {
51: /**
52: * Creates a new instance of this data source
53: */
54: public AccessDataSource() {
55: setDatabaseName("EPSG");
56: }
57:
58: /**
59: * Returns the priority for this data source. The default implementation returns
60: * <code>{@linkplain #NORMAL_PRIORITY NORMAL_PRIORITY} - 10</code>.
61: */
62: public int getPriority() {
63: return NORMAL_PRIORITY;
64: }
65:
66: /**
67: * Open a connection and creates an {@linkplain FactoryUsingSQL EPSG factory} for it.
68: *
69: * @param hints A map of hints, including the low-level factories to use for CRS creation.
70: * @return The EPSG factory using MS-Access SQL syntax.
71: * @throws SQLException if connection to the database failed.
72: */
73: public AbstractAuthorityFactory createFactory(final Hints hints)
74: throws SQLException {
75: final Connection connection;
76: try {
77: connection = getConnection();
78: } catch (NullPointerException exception) {
79: /*
80: * This try...catch block should NOT be needed. We added it as a workaround because
81: * the JDBC-ODBC bridge on Linux throws a NullPointerException when trying to log a
82: * warning to the tracer.
83: */
84: SQLException e = new SQLException(
85: "Unexpected exception in JDBC data source.");
86: e.initCause(exception);
87: throw e;
88: }
89: return new FactoryUsingSQL(hints, connection);
90: }
91: }
|