package com.orci.geotools.data.LineMergerPostgis; import java.io.IOException; import java.util.Map; import java.util.logging.Logger; import org.geotools.data.DefaultQuery; import org.geotools.data.FeatureReader; import org.geotools.data.Query; import org.geotools.data.Transaction; import org.geotools.data.jdbc.ConnectionPool; import org.geotools.data.postgis.PostgisDataStore; import org.geotools.feature.FeatureType; import org.geotools.filter.Filter; /** * This is the OpenTMS data srote class. * Copyright (c) 2005, Open Roads Consulting, Inc. */ public class LineMergerPostgisDataStore extends PostgisDataStore { private static final Logger LOG = org.geotools.util.logging.Logging.getLogger(LineMergerPostgisDataStore.class.getName()); private String featureUniqueKey; /** * Construct <code>WFSDataStore</code>. * @param pool DB connection pool * @param params the connection parameters * @throws IOException error initializing. */ public LineMergerPostgisDataStore(ConnectionPool pool, Map params) throws IOException { super(pool); try { featureUniqueKey = (String)LineMergerPostgisDataStoreFactory.FEATURE_UNIQUE_KEY.lookUp(params); } catch (Exception e) { } } /** * Construct <code>WFSDataStore</code>. * @param pool DB connection pool * @param namespace the namespace * @param params the connection parameters * @throws IOException error initializing. */ public LineMergerPostgisDataStore(ConnectionPool pool, String namespace, Map params) throws IOException { super(pool, namespace); try { featureUniqueKey = (String)LineMergerPostgisDataStoreFactory.FEATURE_UNIQUE_KEY.lookUp(params); } catch (Exception e) { } } /** * Construct <code>WFSDataStore</code>. * @param pool DB connection pool * @param namespace the namespace * @param dbSchema the schema * @param params the connection parameters * @throws IOException error initializing. */ public LineMergerPostgisDataStore(ConnectionPool pool, String namespace, String dbSchema, Map params) throws IOException { super(pool, namespace, dbSchema); try { featureUniqueKey = (String)LineMergerPostgisDataStoreFactory.FEATURE_UNIQUE_KEY.lookUp(params); } catch (Exception e) { } } /** * {@inheritDoc} */ public FeatureReader getFeatureReader(final FeatureType requestType, final Filter filter, final Transaction transaction) throws IOException { LOG.info("getFeatureReader #1"); return new LineMergerFeatureReader(super.getFeatureReader(requestType, filter, transaction), featureUniqueKey); } /** * {@inheritDoc} */ public FeatureReader getFeatureReader(Query query, Transaction trans) throws IOException { LOG.info("getFeatureReader #2 " + query.getClass().getName()); if (!query.retrieveAllProperties()) { String[] props = new String[query.getPropertyNames().length + 1]; System.arraycopy(query.getPropertyNames(), 0, props, 0, query.getPropertyNames().length); props[props.length - 1] = featureUniqueKey; query = new DefaultQuery(query.getTypeName(), query.getNamespace(), query.getFilter(), query.getMaxFeatures(), props, query.getHandle()); } return new LineMergerFeatureReader(super.getFeatureReader(query, trans), featureUniqueKey); //return super.getFeatureReader(query, trans); } }