package org.geotoolkit.internal.jaxb; import javax.xml.bind.JAXBElement; import javax.xml.bind.annotation.XmlElementDecl; import javax.xml.bind.annotation.XmlRegistry; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import javax.xml.namespace.QName; import org.geotoolkit.geometry.isoonjts.spatialschema.geometry.JTSEnvelope; import org.geotoolkit.geometry.isoonjts.spatialschema.geometry.aggregate.JTSMultiCurve; import org.geotoolkit.geometry.isoonjts.spatialschema.geometry.aggregate.JTSMultiPoint; import org.geotoolkit.geometry.isoonjts.spatialschema.geometry.aggregate.JTSMultiPolygon; import org.geotoolkit.geometry.isoonjts.spatialschema.geometry.aggregate.JTSMultiPrimitive; import org.geotoolkit.geometry.isoonjts.spatialschema.geometry.aggregate.JTSMultiSurface; import org.geotoolkit.geometry.isoonjts.spatialschema.geometry.complex.JTSCompositeCurve; import org.geotoolkit.geometry.isoonjts.spatialschema.geometry.geometry.JTSLineString; import org.geotoolkit.geometry.isoonjts.spatialschema.geometry.geometry.JTSPolygon; import org.geotoolkit.geometry.isoonjts.spatialschema.geometry.primitive.JTSCurve; import org.geotoolkit.geometry.isoonjts.spatialschema.geometry.primitive.JTSPoint; import org.geotoolkit.geometry.isoonjts.spatialschema.geometry.primitive.JTSPolyhedralSurface; import org.geotoolkit.geometry.isoonjts.spatialschema.geometry.primitive.JTSRing; import org.geotoolkit.geometry.isoonjts.spatialschema.geometry.primitive.JTSSurfaceBoundary; import org.opengis.geometry.Geometry; /** * * @author Guilhem Legal (Geomatys) */ @XmlRegistry public class ObjectFactory { private static final QName POINT_QNAME = new QName("http://www.opengis.net/gml", "Point"); private static final QName VALUE_QNAME = new QName("http://www.opengis.net/wfs", "Value"); private static final QName LINE_STRING_QNAME = new QName("http://www.opengis.net/gml", "LineString"); private static final QName RING_QNAME = new QName("http://www.opengis.net/gml", "LinearRing"); private static final QName CURVE_QNAME = new QName("http://www.opengis.net/gml", "Curve"); private static final QName ENVELOPE_QNAME = new QName("http://www.opengis.net/gml", "Envelope"); private static final QName MULTI_POINT_QNAME = new QName("http://www.opengis.net/gml", "MultiPoint"); private static final QName MULTI_CURVE_QNAME = new QName("http://www.opengis.net/gml", "MultiCurve"); private static final QName MULTI_SURFACE_QNAME = new QName("http://www.opengis.net/gml", "MultiSurface"); private static final QName MULTI_POLYGON_QNAME = new QName("http://www.opengis.net/gml", "MultiPolygon"); private static final QName COMPOSITE_CURVE_QNAME = new QName("http://www.opengis.net/gml", "CompositeCurve"); private static final QName POLYHEDRAL_SURFACE_QNAME = new QName("http://www.opengis.net/gml", "PolyhedralSurface"); private static final QName POLYGON_QNAME = new QName("http://www.opengis.net/gml", "Polygon"); private static final QName MULTI_GEOMETRY_QNAME = new QName("http://www.opengis.net/gml", "MultiGeometry"); public JTSPoint createJTSPoint() { return new JTSPoint(); } public JTSCurve createJTSCurve() { return new JTSCurve(); } public JTSLineString createJTSLineString() { return new JTSLineString(); } public JTSMultiPoint createJTSMultiPoint() { return new JTSMultiPoint(); } public JTSMultiCurve createJTSMultiCurve() { return new JTSMultiCurve(); } public JTSMultiSurface createJTSMultiSurface() { return new JTSMultiSurface(); } public JTSEnvelope createJTSEnvelope() { return new JTSEnvelope(); } public JTSPolygon createJTSPolygon() { return new JTSPolygon(); } public JTSMultiPolygon createJTSMultiPolygon() { return new JTSMultiPolygon(); } public PolygonType createPolygonType() { return new PolygonType(); } public JTSRing createJTSRing() { return new JTSRing(); } public JTSSurfaceBoundary createJTSSurfaceBoundary() { return new JTSSurfaceBoundary(); } public LineStringPosListType createLineStringPosListType() { return new LineStringPosListType(); } public CoordinatesType createCoordinatesType() { return new CoordinatesType(); } @XmlElementDecl(namespace = "http://www.opengis.net/wfs", name = "Value") public JAXBElement<Object> createValue(final Object value) { return new JAXBElement<Object>(VALUE_QNAME, Object.class, null, value); } @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "Point") public JAXBElement<JTSPoint> createJTSPoint(final JTSPoint value) { return new JAXBElement<JTSPoint>(POINT_QNAME, JTSPoint.class, null, value); } @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "LineString") public JAXBElement<LineStringPosListType> createLineStringPosListType(final LineStringPosListType value) { return new JAXBElement<LineStringPosListType>(LINE_STRING_QNAME, LineStringPosListType.class, null, value); } @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "LinearRing") public JAXBElement<JTSRing> createJTSRing(final JTSRing value) { return new JAXBElement<JTSRing>(RING_QNAME, JTSRing.class, null, value); } @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "Curve") public JAXBElement<JTSCurve> createJTSCurve(final JTSCurve value) { return new JAXBElement<JTSCurve>(CURVE_QNAME, JTSCurve.class, null, value); } @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "Envelope") public JAXBElement<JTSEnvelope> createJTSEnvelope(final JTSEnvelope value) { return new JAXBElement<JTSEnvelope>(ENVELOPE_QNAME, JTSEnvelope.class, null, value); } @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "MultiPoint") public JAXBElement<JTSMultiPoint> createJTSMultiPoint(final JTSMultiPoint value) { return new JAXBElement<JTSMultiPoint>(MULTI_POINT_QNAME, JTSMultiPoint.class, null, value); } @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "MultiSurface") public JAXBElement<JTSMultiSurface> createJTSMultiSurface(final JTSMultiSurface value) { return new JAXBElement<JTSMultiSurface>(MULTI_SURFACE_QNAME, JTSMultiSurface.class, null, value); } @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "MultiCurve") public JAXBElement<JTSMultiCurve> createJTSMultiCurve(final JTSMultiCurve value) { return new JAXBElement<JTSMultiCurve>(MULTI_CURVE_QNAME, JTSMultiCurve.class, null, value); } @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "MultiPolygon") public JAXBElement<JTSMultiPolygon> createJTSMultiPolygon(final JTSMultiPolygon value) { return new JAXBElement<JTSMultiPolygon>(MULTI_POLYGON_QNAME, JTSMultiPolygon.class, null, value); } @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "MultiGeometry") public JAXBElement<JTSMultiPrimitive> createJTSMultiGeometry(final JTSMultiPrimitive value) { return new JAXBElement<JTSMultiPrimitive>(MULTI_GEOMETRY_QNAME, JTSMultiPrimitive.class, null, value); } @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "CompositeCurve") public JAXBElement<JTSCompositeCurve> createJTSCompositeCurve(final JTSCompositeCurve value) { return new JAXBElement<JTSCompositeCurve>(COMPOSITE_CURVE_QNAME, JTSCompositeCurve.class, null, value); } @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "PolyhedralSurface") @XmlJavaTypeAdapter(PolyhedralSurfaceAdapter.class) public JAXBElement<JTSPolyhedralSurface> createJTSPolyhedralSurface(final JTSPolyhedralSurface value) { return new JAXBElement<JTSPolyhedralSurface>(POLYHEDRAL_SURFACE_QNAME, JTSPolyhedralSurface.class, null, value); } @XmlElementDecl(namespace = "http://www.opengis.net/gml", name = "Polygon") @XmlJavaTypeAdapter(PolygonAdapter.class) public JAXBElement<JTSPolygon> createJTSPolygon(final JTSPolygon value) { return new JAXBElement<JTSPolygon>(POLYGON_QNAME, JTSPolygon.class, null, value); } public JAXBElement<?> buildAnyGeometry(final Geometry value) { if (value instanceof JTSPoint) { return createJTSPoint((JTSPoint) value); } else if (value instanceof JTSMultiPoint) { return createJTSMultiPoint((JTSMultiPoint) value); } else if (value instanceof JTSMultiSurface) { return createJTSMultiSurface((JTSMultiSurface) value); } else if (value instanceof JTSMultiCurve) { return createJTSMultiCurve((JTSMultiCurve) value); } else if (value instanceof JTSCompositeCurve) { return createJTSCompositeCurve((JTSCompositeCurve) value); } else if (value instanceof JTSCurve) { return createJTSCurve((JTSCurve) value); } else if (value instanceof JTSLineString) { return createLineStringPosListType(new LineStringPosListType((JTSLineString) value)); } else if (value instanceof JTSEnvelope) { return createJTSEnvelope((JTSEnvelope) value); } else if (value instanceof JTSMultiPrimitive) { return createJTSMultiGeometry((JTSMultiPrimitive) value); } else if (value instanceof JTSMultiPolygon) { return createJTSMultiPolygon((JTSMultiPolygon) value); } else if (value instanceof JTSPolygon) { return createJTSPolygon((JTSPolygon) value); } else if (value instanceof JTSPolyhedralSurface) { return createJTSPolyhedralSurface((JTSPolyhedralSurface) value); } else if (value instanceof JTSRing) { return createJTSRing((JTSRing) value); } else if (value != null) { throw new IllegalArgumentException("unexpected geometry type:" + value.getClass().getName()); } return null; } }