package nl.ipo.cds.deegree.persistence;
import static nl.ipo.cds.deegree.persistence.ExtendedSimpleSQLFeatureStoreProvider.CONFIG_SCHEMA;
import javax.xml.bind.JAXBException;
import nl.ipo.cds.deegree.persistence.jaxb.ExtendedSimpleSQLFeatureStoreConfig;
import org.deegree.commons.xml.jaxb.JAXBUtils;
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.ResourceInitException;
import org.deegree.workspace.ResourceLocation;
import org.deegree.workspace.Workspace;
import org.deegree.workspace.standard.AbstractResourceMetadata;
import org.deegree.workspace.standard.AbstractResourceProvider;
import org.deegree.workspace.standard.DefaultResourceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ExtendedSimpleSQLFeatureStoreMetadata extends AbstractResourceMetadata<FeatureStore> {
private static final String CONFIG_JAXB_PACKAGE = "nl.ipo.cds.deegree.persistence.jaxb";
private static final Logger LOG = LoggerFactory.getLogger( ExtendedSimpleSQLFeatureStoreMetadata.class );
public ExtendedSimpleSQLFeatureStoreMetadata( Workspace workspace, ResourceLocation<FeatureStore> location,
AbstractResourceProvider<FeatureStore> provider ) {
super( workspace, location, provider );
}
@Override
public ResourceBuilder<FeatureStore> prepare() {
try {
ExtendedSimpleSQLFeatureStoreConfig config = (ExtendedSimpleSQLFeatureStoreConfig) JAXBUtils.unmarshall( CONFIG_JAXB_PACKAGE,
CONFIG_SCHEMA,
location.getAsStream(),
workspace );
String connId = config.getConnectionPoolId();
if ( connId == null ) {
connId = config.getJDBCConnId();
}
dependencies.add( new DefaultResourceIdentifier<ConnectionProvider>( ConnectionProviderProvider.class,
connId ) );
return new ExtendedSimpleSQLFeatureStoreBuilder( workspace, this, config );
} catch ( JAXBException e ) {
String msg = "Error in feature store configuration file '" + location + "': " + e.getMessage();
LOG.error( msg );
throw new ResourceInitException( msg, e );
}
}
}