package nl.ipo.cds.deegree.metadata.provider;
import static org.deegree.commons.xml.jaxb.JAXBUtils.unmarshall;
import nl.ipo.cds.deegree.metadata.jaxb.DeegreeServicesMetadata;
import org.deegree.services.metadata.OWSMetadataProvider;
import org.deegree.spring.ApplicationContextHolder;
import org.deegree.spring.ApplicationContextHolderProvider;
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;
class DatabaseMetadataProviderMetadata extends AbstractResourceMetadata<OWSMetadataProvider> {
DatabaseMetadataProviderMetadata( Workspace workspace, ResourceLocation<OWSMetadataProvider> location,
AbstractResourceProvider<OWSMetadataProvider> provider ) {
super( workspace, location, provider );
}
@Override
public ResourceBuilder<OWSMetadataProvider> prepare() {
try {
DeegreeServicesMetadata config = (DeegreeServicesMetadata) unmarshall( "nl.ipo.cds.deegree.metadata.jaxb",
provider.getSchema(), location.getAsStream(),
workspace );
final String applicationContextHolder = config.getApplicationContextHolder();
dependencies.add( new DefaultResourceIdentifier<ApplicationContextHolder>(
ApplicationContextHolderProvider.class,
applicationContextHolder ) );
return new DatabaseMetadataProviderBuilder( config, this, workspace );
} catch ( Exception e ) {
throw new ResourceInitException( "Unable to read service metadata config: " + e.getLocalizedMessage(), e );
}
}
}