001: /*
002: * This file is part of the GeOxygene project source files.
003: *
004: * GeOxygene aims at providing an open framework which implements OGC/ISO specifications for
005: * the development and deployment of geographic (GIS) applications. It is a open source
006: * contribution of the COGIT laboratory at the Institut Géographique National (the French
007: * National Mapping Agency).
008: *
009: * See: http://oxygene-project.sourceforge.net
010: *
011: * Copyright (C) 2005 Institut Géographique National
012: *
013: * This library is free software; you can redistribute it and/or modify it under the terms
014: * of the GNU Lesser General Public License as published by the Free Software Foundation;
015: * either version 2.1 of the License, or any later version.
016: *
017: * This library is distributed in the hope that it will be useful, but WITHOUT ANY
018: * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
019: * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
020: *
021: * You should have received a copy of the GNU Lesser General Public License along with
022: * this library (see file LICENSE if present); if not, write to the Free Software
023: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024: *
025: */
026:
027: package fr.ign.cogit.geoxygene.datatools.ojb;
028:
029: import java.lang.reflect.Constructor;
030: import java.sql.SQLException;
031:
032: import fr.ign.cogit.geoxygene.datatools.Geodatabase;
033:
034: /**
035: * Constructeur de GeodatabaseOjb (Oracle ou Postgis) a partir d'un alias de connection
036: * defini dans le fichier de configuration repository_database.xml.
037: *
038: * @author Thierry Badard & Arnaud Braun
039: * @version 1.1
040: *
041: */
042: public class GeodatabaseOjbFactory {
043:
044: private final static String ORACLE_PRODUCT_NAME = "Oracle";
045: private final static String POSTGRES_PRODUCT_NAME = "PostgreSQL";
046: private final static String GEODATABASE_OJB_ORACLE_CLASS_NAME = "fr.ign.cogit.geoxygene.datatools.oracle.GeodatabaseOjbOracle";
047: private final static String GEODATABASE_OJB_POSTGIS_CLASS_NAME = "fr.ign.cogit.geoxygene.datatools.postgis.GeodatabaseOjbPostgis";
048:
049: /** Constructeur de GeodatabaseOjb (Oracle ou Postgis) a partir d'un alias de connection
050: * defini dans le fichier de configuration repository_database.xml.*/
051: public static Geodatabase newInstance(String jcdAlias) {
052: GeodatabaseOjb ojb = new GeodatabaseOjb(jcdAlias);
053:
054: /* if (ojb._conn instanceof PGConnection)
055: return new GeodatabaseOjbPostgis(ojb);
056: else if (ojb._conn instanceof OracleConnection)
057: return new GeodatabaseOjbOracle(ojb);
058: else {
059: System.out.println("### Cas non traite : "+ojb._conn.getClass().getName());
060: System.exit(0);
061: return null;
062: }*/
063:
064: Constructor geodatabaseConstructor = null;
065:
066: try {
067: if (ojb._conn.getMetaData().getDatabaseProductName()
068: .compareToIgnoreCase(ORACLE_PRODUCT_NAME) == 0) {
069: try {
070: Class geodatabaseClass = Class
071: .forName(GEODATABASE_OJB_ORACLE_CLASS_NAME);
072: geodatabaseConstructor = geodatabaseClass
073: .getConstructor(new Class[] { GeodatabaseOjb.class });
074: } catch (Exception notfound) {
075: System.out.println("Classe "
076: + GEODATABASE_OJB_ORACLE_CLASS_NAME
077: + " non trouvée dans le CLASSPATH");
078: notfound.printStackTrace();
079: System.out.println("## PROGRAMME ARRETE !! ## ");
080: System.exit(0);
081: return null;
082: }
083: }
084:
085: else if (ojb._conn.getMetaData().getDatabaseProductName()
086: .compareToIgnoreCase(POSTGRES_PRODUCT_NAME) == 0) {
087: try {
088: Class geodatabaseClass = Class
089: .forName(GEODATABASE_OJB_POSTGIS_CLASS_NAME);
090: geodatabaseConstructor = geodatabaseClass
091: .getConstructor(new Class[] { GeodatabaseOjb.class });
092: } catch (Exception notfound) {
093: System.out.println("Classe "
094: + GEODATABASE_OJB_POSTGIS_CLASS_NAME
095: + " non trouvée dans le CLASSPATH");
096: notfound.printStackTrace();
097: System.out.println("## PROGRAMME ARRETE !! ## ");
098: System.exit(0);
099: return null;
100: }
101: }
102:
103: else {
104: System.out.println("### Cas non traite : "
105: + ojb._conn.getClass().getName());
106: System.out.println("## PROGRAMME ARRETE !! ## ");
107: System.exit(0);
108: return null;
109: }
110:
111: } catch (SQLException sqlex) {
112: sqlex.printStackTrace();
113: System.out.println("## PROGRAMME ARRETE !! ## ");
114: System.exit(0);
115: return null;
116: }
117:
118: try {
119: return (Geodatabase) geodatabaseConstructor
120: .newInstance(new Object[] { ojb });
121: } catch (Exception ex) {
122: ex.printStackTrace();
123: System.out.println("## PROGRAMME ARRETE !! ## ");
124: System.exit(0);
125: return null;
126: }
127:
128: }
129:
130: /** Constructeur de GeodatabaseOjb (Oracle ou Postgis) a partir de la connection par defaut
131: * definie dans le fichier de configuration repository_database.xml.*/
132: public static Geodatabase newInstance() {
133: return GeodatabaseOjbFactory.newInstance(null);
134: }
135:
136: }
|