Package org.geotools.gce.imagemosaic.jdbc

Source Code of org.geotools.gce.imagemosaic.jdbc.JDBCAccessFactory

/*
*    GeoTools - The Open Source Java GIS Toolkit
*    http://geotools.org
*
*    (C) 2008, Open Source Geospatial Foundation (OSGeo)
*
*    This library is free software; you can redistribute it and/or
*    modify it under the terms of the GNU Lesser General Public
*    License as published by the Free Software Foundation;
*    version 2.1 of the License.
*
*    This library 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 for more details.
*/
package org.geotools.gce.imagemosaic.jdbc;

import java.lang.reflect.Constructor;
import java.util.HashMap;
import java.util.Map;

import org.geotools.gce.imagemosaic.jdbc.custom.JDBCAccessOracleGeoRaster;
import org.geotools.gce.imagemosaic.jdbc.custom.JDBCAccessPGRaster;

/**
* Factory for JDBCAccess Objects.
*
* The following rule applies:
*
* For each Config object exists exactly one JDBCAccess object !
*
* @author mcr
*
*/
class JDBCAccessFactory {
  static Map<String, JDBCAccess> JDBCAccessMap = new HashMap<String, JDBCAccess>();

  /**
   * Factory method
   *
   * @param config
   *            The Config object
   * @return the corresponding JDBCAccess object
   * @throws Exception
   */
  @SuppressWarnings("unchecked")
    static synchronized JDBCAccess getJDBCAcess(Config config) throws Exception {
    JDBCAccess jdbcAccess = JDBCAccessMap.get(config.getXmlUrl());

    if (jdbcAccess != null) {
      return jdbcAccess;
    }

    SpatialExtension type = config.getSpatialExtension();

    if (type == null) {
      throw new Exception("Property <spatialExtension> missing");
    }

    if (type == SpatialExtension.DB2) {
      jdbcAccess = new JDBCAccessDB2(config);
    } else if (type == SpatialExtension.POSTGIS) {
      jdbcAccess = new JDBCAccessPostGis(config);
    } else if (type == SpatialExtension.MYSQL) {
      jdbcAccess = new JDBCAccessMySql(config);
    } else if (type == SpatialExtension.UNIVERSAL) {
      jdbcAccess = new JDBCAccessUniversal(config);
    } else if (type == SpatialExtension.ORACLE) {
      jdbcAccess = new JDBCAccessOracle(config);
                } else if (type == SpatialExtension.GEORASTER) {
                    jdbcAccess = new JDBCAccessOracleGeoRaster(config);
                } else if (type == SpatialExtension.PGRASTER) {
                    jdbcAccess = new JDBCAccessPGRaster(config);                   
                } else if (type == SpatialExtension.CUSTOM) {
                    String jdbcAccessClassName = config.getJdbcAccessClassName();
                    Class jdbcAccessClass = Class.forName(jdbcAccessClassName);
                    try {
                        Constructor cons = jdbcAccessClass.getConstructor(new Class[] { Config.class });
                        jdbcAccess = (JDBCAccess) cons.newInstance(new Object[] {config });
                    } catch (Exception ex) {
                        String msg = "No public Constructor with an "+config.getClass().getName()+
                               " argument for class "+jdbcAccessClassName ;
                        throw new RuntimeException(msg, ex);
                    }
                                       
    } else {
      throw new Exception("spatialExtension: " + type + " not supported");
    }

    jdbcAccess.initialize();
    JDBCAccessMap.put(config.getXmlUrl(), jdbcAccess);

    return jdbcAccess;
  }
}
TOP

Related Classes of org.geotools.gce.imagemosaic.jdbc.JDBCAccessFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.