/*
* Copyright (c) 2012 Data Harmonisation Panel
*
* All rights reserved. This program and the accompanying materials are made
* available under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution. If not, see <http://www.gnu.org/licenses/>.
*
* Contributors:
* HUMBOLDT EU Integrated Project #030962
* Data Harmonisation Panel <http://www.dhpanel.eu>
*/
package eu.esdihumboldt.hale.common.instance.io.impl;
import java.util.List;
import javax.xml.namespace.QName;
import eu.esdihumboldt.hale.common.core.io.IOProviderConfigurationException;
import eu.esdihumboldt.hale.common.core.io.impl.AbstractImportProvider;
import eu.esdihumboldt.hale.common.core.io.impl.GZipEnabledImport;
import eu.esdihumboldt.hale.common.instance.geometry.CRSDefinitionManager;
import eu.esdihumboldt.hale.common.instance.geometry.CRSProvider;
import eu.esdihumboldt.hale.common.instance.io.InstanceReader;
import eu.esdihumboldt.hale.common.schema.geometry.CRSDefinition;
import eu.esdihumboldt.hale.common.schema.model.TypeDefinition;
import eu.esdihumboldt.hale.common.schema.model.TypeIndex;
/**
* Abstract {@link InstanceReader} base implementation
*
* @author Simon Templer
* @partner 01 / Fraunhofer Institute for Computer Graphics Research
*/
public abstract class AbstractInstanceReader extends GZipEnabledImport implements InstanceReader {
private TypeIndex sourceSchema;
private CRSProvider crsProvider;
private final CRSProvider wrappingProvider = new CRSProvider() {
@Override
public CRSDefinition getCRS(TypeDefinition parentType, List<QName> propertyPath) {
CRSDefinition result = getDefaultSRS();
if (result == null && crsProvider != null) {
result = crsProvider.getCRS(parentType, propertyPath);
}
return result;
}
};
/**
* @see InstanceReader#setSourceSchema(TypeIndex)
*/
@Override
public void setSourceSchema(TypeIndex sourceSchema) {
this.sourceSchema = sourceSchema;
}
/**
* @see InstanceReader#getSourceSchema()
*/
@Override
public TypeIndex getSourceSchema() {
return sourceSchema;
}
/**
* @see AbstractImportProvider#validate()
*/
@Override
public void validate() throws IOProviderConfigurationException {
super.validate();
if (sourceSchema == null) {
fail("No source schema given for import");
}
}
/**
* @see InstanceReader#setCRSProvider(CRSProvider)
*/
@Override
public void setCRSProvider(CRSProvider crsProvider) {
this.crsProvider = crsProvider;
}
/**
* Get the default SRS if it is configured.
*
* @return the default SRS or <code>null</code>
*/
protected CRSDefinition getDefaultSRS() {
String srsString = getParameter(PARAM_DEFAULT_SRS).as(String.class, null);
if (srsString == null || srsString.isEmpty()) {
return null;
}
return CRSDefinitionManager.getInstance().parse(srsString);
}
/**
* Get the CRS provider. It also respects if a default SRS is set on the
* input.
*
* @return the CRS provider
*/
protected CRSProvider getCrsProvider() {
return wrappingProvider;
}
}