/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2002-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.gml3.bindings.ext; import javax.xml.namespace.QName; import org.geotools.gml3.GML; import org.geotools.gml3.XSDIdRegistry; import org.geotools.gml3.bindings.CurveTypeBinding; import org.geotools.gml3.bindings.GML3EncodingUtils; import org.geotools.xml.ElementInstance; import org.geotools.xml.Node; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryFactory; import com.vividsolutions.jts.geom.LineString; import com.vividsolutions.jts.geom.MultiLineString; /** * Binding object for the type http://www.opengis.net/gml:CurvePropertyType. * * <p> * * <pre> * <code> * <complexType name="CurvePropertyType"> * <annotation> * <documentation>A property that has a curve as its value domain can either be an appropriate geometry element encapsulated in an * element of this type or an XLink reference to a remote geometry element (where remote includes geometry elements located elsewhere * in the same document). Either the reference or the contained element must be given, but neither both nor none.</documentation> * </annotation> * <sequence minOccurs="0"> * <element ref="gml:_Curve"/> * </sequence> * <attributeGroup ref="gml:AssociationAttributeGroup"> * <annotation> * <documentation>This attribute group includes the XLink attributes (see xlinks.xsd). XLink is used in GML to reference remote * resources (including those elsewhere in the same document). A simple link element can be constructed by including a specific * set of XLink attributes. The XML Linking Language (XLink) is currently a Proposed Recommendation of the World Wide Web Consortium. * XLink allows elements to be inserted into XML documents so as to create sophisticated links between resources; such links can be used * to reference remote properties. A simple link element can be used to implement pointer functionality, and this functionality has been built * into various GML 3 elements by including the gml:AssociationAttributeGroup.</documentation> * </annotation> * </attributeGroup> * </complexType> * * </code> * </pre> * * </p> * * @generated * * * @source $URL: http://svn.osgeo.org/geotools/trunk/modules/extension/xsd/xsd-gml3/src/main/java/org/geotools/gml3/bindings/ext/CurvePropertyTypeBinding.java $ * http://svn.osgeo.org/geotools/trunk/modules/extension/xsd/xsd-gml3/src/main/java/org * /geotools/gml3/bindings/CurvePropertyTypeBinding.java $ */ public class CurvePropertyTypeBinding extends org.geotools.gml3.bindings.CurvePropertyTypeBinding implements Comparable { GeometryFactory gf; public CurvePropertyTypeBinding(GML3EncodingUtils encodingUtils, XSDIdRegistry idRegistry, GeometryFactory gf) { super(encodingUtils, idRegistry); this.gf = gf; } public Class<? extends Geometry> getGeometryType() { return MultiLineString.class; } @Override public Object parse(ElementInstance instance, Node node, Object value) throws Exception { // LineString LineString lineString = (LineString)node.getChildValue(LineString.class); // or Curve or OrientableCurve MultiLineString multiLineString = (MultiLineString)node.getChildValue(MultiLineString.class); if (lineString != null) { return new MultiLineString(new LineString[] {lineString}, gf); } else { return multiLineString; } } @Override public Object getProperty(Object object, QName name) throws Exception { if ("_Curve".equals(name.getLocalPart()) || "AbstractCurve".equals(name.getLocalPart())) { MultiLineString multiLineString = (MultiLineString) object; // this MultiLineString consists of a single LineString wrapped in a MultiLineString: return multiLineString.getGeometryN(0); } return super.getProperty(object, name); } public int compareTo(Object o) { if (o instanceof CurveTypeBinding) { return 1; } else { return 0; } } }