tim@129: /* Copyright (C) 2007 con terra GmbH (http://www.conterra.de) tim@129: * All rights reserved tim@129: * tim@129: * $Id: Datasource.java,v 1.4 2008/01/30 12:38:34 blume Exp $ tim@129: * tim@129: * created by: drewnak tim@129: * created at : 21.11.2007 tim@129: * created at : 14:25:50 tim@129: * tim@129: * modified by: $Author: blume $ tim@129: * modified at: $Date: 2008/01/30 12:38:34 $ tim@129: */ tim@129: package de.intevation.gnv.geobackend.sde.datasources; tim@129: tim@129: import java.util.Map; tim@129: tim@129: import de.intevation.gnv.geobackend.sde.datasources.exception.DatasourceException; tim@129: tim@129: /** tim@129: * Abstract class for handling different datasources. tim@129: * This method provides a static method for creating dataosurce objects. tim@129: * tim@129: * @author drewnak tim@129: */ tim@129: public abstract class Datasource { tim@129: tim@129: protected Map mParameters; tim@129: tim@129: protected String mName; tim@129: tim@129: tim@129: /** tim@129: * Triggers the creation of a dataosurce object. Following the guidelines, the parameters for creating this datasource are delivered by the configuration file. tim@129: * tim@129: * @param pName a name for the datasource. tim@129: * @param pClassname The name of the class extending this abstract datasource class. Used to create a new instance. tim@129: * @param pParams a Map of Parameters needed for the initialization of the datasource. tim@129: * @return a datasourceobject tim@129: * @throws DatasourceException if the class could not be found or the initialization of the datasource fails. tim@129: */ tim@129: public static final Datasource create(String pName, String pClassname, tim@129: Map pParams) throws DatasourceException { tim@129: Class lDatasourceClass; tim@129: try { tim@129: lDatasourceClass = Class.forName(pClassname); tim@129: } catch (ClassNotFoundException e) { tim@129: throw new DatasourceException("Could not load class " + pClassname); tim@129: } tim@129: Datasource lNewInstance; tim@129: try { tim@129: lNewInstance = (Datasource) lDatasourceClass.newInstance(); tim@129: } catch (Exception e) { tim@129: throw new DatasourceException("Could not create instance of " + pClassname, e); tim@129: } tim@129: lNewInstance.init(pName, pParams); tim@129: tim@129: return lNewInstance; tim@129: } tim@129: tim@129: /** tim@129: * An abstract method for the initialization of a datasource instance. tim@129: * Of course, only the concrete implementation knwos about the ncessary parameters for the initialization. tim@129: * tim@129: * @param pName a name for the datasource. tim@129: * @param pParams a Map of Parameters needed for the initialization of the datasource. tim@129: */ tim@129: protected abstract void init(String pName, Map pParams) throws DatasourceException; tim@129: tim@129: /** tim@129: * @return tim@129: */ tim@129: public String getName() { tim@129: return mName; tim@129: } tim@129: tim@129: tim@129: /** tim@129: * This method returns a datasourceconnection. tim@129: * Only the concrete implementation of the Datasource knwos about the DatasourceConnection-Implementation to return. tim@129: * tim@129: * @return a DatasourceConnection tim@129: */ tim@129: public abstract DatasourceConnection getConnection(); tim@129: tim@129: /** tim@129: * Returns a DatasourceConnection. This method is usualy called after an executed query. tim@129: * See: Some datasource implementations need to explicitly close an existing connection. tim@129: * tim@129: * @param pConnection the connection to be returned. tim@129: */ tim@129: public abstract void returnConnection(DatasourceConnection pConnection); tim@129: }