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; } }