package nl.ipo.cds.deegree.persistence; import java.util.LinkedList; import nl.ipo.cds.deegree.persistence.jaxb.ExtendedSimpleSQLFeatureStoreConfig; import nl.ipo.cds.deegree.persistence.jaxb.ExtendedSimpleSQLFeatureStoreConfig.LODStatement; import org.deegree.commons.utils.Pair; import org.deegree.commons.utils.CollectionUtils.Mapper; import org.deegree.db.ConnectionProvider; import org.deegree.db.ConnectionProviderProvider; import org.deegree.feature.persistence.FeatureStore; import org.deegree.workspace.ResourceBuilder; import org.deegree.workspace.Workspace; import static org.deegree.commons.utils.CollectionUtils.map; public class ExtendedSimpleSQLFeatureStoreBuilder implements ResourceBuilder<FeatureStore> { private static Mapper<Pair<Integer, String>, LODStatement> lodMapper = new Mapper<Pair<Integer, String>, LODStatement>() { public Pair<Integer, String> apply( LODStatement u ) { return new Pair<Integer, String>( u.getAboveScale(), u.getValue() ); } }; private final Workspace workspace; private final ExtendedSimpleSQLFeatureStoreConfig config; private final ExtendedSimpleSQLFeatureStoreMetadata metadata; public ExtendedSimpleSQLFeatureStoreBuilder( Workspace workspace, ExtendedSimpleSQLFeatureStoreMetadata metadata, ExtendedSimpleSQLFeatureStoreConfig config ) { this.workspace = workspace; this.metadata = metadata; this.config = config; } @Override public FeatureStore build() { String srs = config.getStorageCRS(); String stmt = config.getSQLStatement(); String name = config.getFeatureTypeName(); String ns = config.getFeatureTypeNamespace(); String prefix = config.getFeatureTypePrefix(); String bbox = config.getBBoxStatement(); LinkedList<Pair<Integer, String>> lods = map( config.getLODStatement(), lodMapper ); String connId = config.getConnectionPoolId(); if ( connId == null ) { connId = config.getJDBCConnId(); } ConnectionProvider connProvider = workspace.getResource( ConnectionProviderProvider.class, connId ); return new ExtendedSimpleSQLFeatureStore( metadata, connProvider, srs, stmt, name, ns, prefix, bbox, lods ); } }