package com.orci.geotools.data.LineMergerPostgis;
import java.io.IOException;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;
import org.geotools.data.DataSourceException;
import org.geotools.data.DataStore;
import org.geotools.data.jdbc.ConnectionPool;
import org.geotools.data.postgis.PostgisConnectionFactory;
import org.geotools.data.postgis.PostgisDataStoreFactory;
/**
* This class is used to create OpenTMSDataStore objects
* Copyright (c) 2005, Open Roads Consulting, Inc.
*/
public class LineMergerPostgisDataStoreFactory extends PostgisDataStoreFactory {
private static final Logger LOG = org.geotools.util.logging.Logging.getLogger(LineMergerPostgisDataStoreFactory.class.getName());
/** Param, package visibiity for JUnit tests. */
static final Param HOST = new Param("host", String.class,
"postgis host machine", true, "localhost");
/** Param, package visibiity for JUnit tests. */
static final Param PORT = new Param("port", Integer.class,
"postgis connection port (default is 5432)", true, new Integer(5432));
/** Param, package visibiity for JUnit tests. */
static final Param DATABASE = new Param("database", String.class,
"postgis database");
/** Param, package visibiity for JUnit tests. */
static final Param SCHEMA = new Param("schema", String.class,
"postgis schema", false, "public");
/** Param, package visibiity for JUnit tests. */
static final Param USER = new Param("user", String.class,
"user name to login as");
/** Param, package visibiity for JUnit tests. */
static final Param PASSWD = new Param("passwd", String.class,
"password used to login", false);
/** Param, package visibiity for JUnit tests. */
static final Param NAMESPACE = new Param("namespace", String.class,
"namespace prefix used", false);
static final Param WKBENABLED = new Param("wkb enabled", Boolean.class,
"set to true if Well Known Binary should be used to read PostGIS "
+ "data (experimental)", false, new Boolean(true));
static final Param LOOSEBBOX = new Param("loose bbox", Boolean.class,
"set to true if the Bounding Box should be 'loose', faster but "
+ "not as deadly accurate", false, new Boolean(true));
/** unique feature key. */
public static final Param FEATURE_UNIQUE_KEY = new Param("LineMergerPostgis:FeatureUniqueKey",
String.class,
"Feature Unique Key",
true,
"rtesysshrt"
);
private Map<Map, DataStore> cache = new HashMap<Map, DataStore>();
/**
* {@inheritDoc}
*/
public DataStore createDataStore(Map params) throws IOException {
LOG.info("createDataStore");
if (cache.containsKey(params)) {
return (DataStore) cache.get(params);
}
// parse Postgis parameters
String dbHost = (String) HOST.lookUp(params);
String dbUser = (String) USER.lookUp(params);
String dbPasswd = (String) PASSWD.lookUp(params);
Integer dbPort = (Integer) PORT.lookUp(params);
String dbSchema = (String) SCHEMA.lookUp(params);
String database = (String) DATABASE.lookUp(params);
Boolean wkbEnabled = (Boolean) WKBENABLED.lookUp(params);
Boolean isLooseBbox = (Boolean) LOOSEBBOX.lookUp(params);
String namespace = (String) NAMESPACE.lookUp(params);
// get connection pool
PostgisConnectionFactory connFact = new PostgisConnectionFactory(dbHost, dbPort.toString(), database);
connFact.setLogin(dbUser, dbPasswd);
ConnectionPool pool = null;
try {
pool = connFact.getConnectionPool();
} catch (SQLException e) {
throw new DataSourceException("Could not create connection", e);
}
LineMergerPostgisDataStore dataStore = null;
if (dbSchema == null && namespace == null) {
dataStore = new LineMergerPostgisDataStore(pool, params);
} else if (dbSchema == null && namespace != null) {
dataStore = new LineMergerPostgisDataStore(pool, namespace, params);
} else {
dataStore = new LineMergerPostgisDataStore(pool, namespace, dbSchema, params);
}
if (wkbEnabled != null) dataStore.setWKBEnabled(wkbEnabled.booleanValue());
if (isLooseBbox != null) dataStore.setLooseBbox(isLooseBbox.booleanValue());
return dataStore;
}
/**
* {@inheritDoc}
*/
public DataStore createNewDataStore(Map params) throws IOException {
throw new UnsupportedOperationException("Cannot create a new Database");
}
/**
* {@inheritDoc}
*/
public String getDescription() {
return "Inrix Real Time TMC Feature.";
}
/**
* {@inheritDoc}
*/
public Param[] getParametersInfo() {
return new Param[] {
HOST, PORT, DATABASE, USER, PASSWD, WKBENABLED, LOOSEBBOX, NAMESPACE,
FEATURE_UNIQUE_KEY,
};
}
/**
* {@inheritDoc}
*/
public boolean canProcess(Map params) {
if (params == null) return false;
if (!params.containsKey(FEATURE_UNIQUE_KEY.key)) return false;
return true;
}
/**
* {@inheritDoc}
*/
public String getDisplayName() {
return "LineMergerPostgis";
}
}