package org.geotools.wcs.bindings;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.List;
import javax.xml.namespace.QName;
import net.opengis.gml.DirectPositionType;
import net.opengis.gml.EnvelopeType;
import net.opengis.gml.Gml4wcsFactory;
import net.opengis.wcs10.SpatialSubsetType;
import net.opengis.wcs10.Wcs10Factory;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.referencing.CRS;
import org.geotools.wcs.WCS;
import org.geotools.xml.AbstractComplexBinding;
import org.geotools.xml.ElementInstance;
import org.geotools.xml.Node;
/**
* Binding object for the type http://www.opengis.net/wcs:SpatialSubsetType.
*
* <p>
*
* <pre>
* <code>
* <complexType name="SpatialSubsetType">
* <annotation>
* <documentation>Definition of a subset of a coverage spatial domain. Currently, only a grid subset of a coverage domain. </documentation>
* </annotation>
* <complexContent>
* <restriction base="wcs:SpatialDomainType">
* <sequence>
* <element ref="gml:Envelope"/>
* <element ref="gml:Grid"/>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
*
* </code>
* </pre>
*
* </p>
*
* @generated
*
* @source $URL: http://svn.osgeo.org/geotools/trunk/modules/extension/xsd/xsd-wcs/src/main/java/org/geotools/wcs/bindings/SpatialSubsetTypeBinding.java $
*/
public class SpatialSubsetTypeBinding extends AbstractComplexBinding {
/**
* @generated
*/
public QName getTarget() {
return WCS.SpatialSubsetType;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated modifiable
*/
public Class getType() {
return SpatialSubsetType.class;
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated modifiable
*/
public Object parse(ElementInstance instance, Node node, Object value)
throws Exception {
SpatialSubsetType spatialSubset = Wcs10Factory.eINSTANCE.createSpatialSubsetType();
List<Node> envelopes = node.getChildren("Envelope");
for (Node envelopeNode : envelopes) {
ReferencedEnvelope envelope = (ReferencedEnvelope) envelopeNode.getValue();
EnvelopeType env = Gml4wcsFactory.eINSTANCE.createEnvelopeType();
env.setSrsName(CRS.lookupIdentifier(envelope.getCoordinateReferenceSystem(), true));
DirectPositionType pos1 = Gml4wcsFactory.eINSTANCE.createDirectPositionType();
DirectPositionType pos2 = Gml4wcsFactory.eINSTANCE.createDirectPositionType();
pos1.setDimension(BigInteger.valueOf(2));
pos2.setDimension(BigInteger.valueOf(2));
pos1.setValue(Arrays.asList(envelope.getMinX(), envelope.getMinY()));
pos2.setValue(Arrays.asList(envelope.getMaxX(), envelope.getMaxY()));
env.getPos().add(pos1);
env.getPos().add(pos2);
spatialSubset.getEnvelope().add(envelope);
}
List<Node> gridsNode = node.getChildren("Grid");
for (Node grid : gridsNode)
spatialSubset.getGrid().add(grid.getValue());
return spatialSubset;
}
/*
* (non-Javadoc)
*
* @see org.geotools.xml.AbstractComplexBinding#getExecutionMode()
*/
@Override
public int getExecutionMode() {
return OVERRIDE;
}
}