/* * Geotoolkit.org - An Open Source Java GIS Toolkit * http://www.geotoolkit.org * * (C) 2009-2010, Geomatys * * 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.geotoolkit.gml; import java.util.logging.Level; import java.util.logging.Logger; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import org.geotoolkit.gml.xml.v311.*; import org.apache.sis.internal.jaxb.geometry.GM_Object; import org.apache.sis.util.logging.Logging; import org.opengis.geometry.Geometry; import org.apache.sis.internal.jaxb.AdapterReplacement; /** * JAXB adapter in order to map implementing class with the Types interface. See * package documentation for more information about JAXB and interface. * * @author Guilhem Legal (Geomatys) * @version 3.12 * * @since 3.00 * @module */ public final class GmlGeometryAdapter extends GM_Object implements AdapterReplacement { private static final Logger LOGGER = Logging.getLogger("org.geotoolkit.gml"); /** * Empty constructor for JAXB only. */ public GmlGeometryAdapter() { } /** * Wraps a Reference System value with a {@code MD_ReferenceSystem} element at marshalling-time. * * @param metadata The metadata value to marshall. */ protected GmlGeometryAdapter(final Geometry metadata) { final ObjectFactory factory = new ObjectFactory(); final org.geotoolkit.gml.xml.v321.ObjectFactory factory321 = new org.geotoolkit.gml.xml.v321.ObjectFactory(); if (metadata instanceof PointType) { this.geometry = factory.createPoint((PointType) metadata); } else if (metadata instanceof MultiSurfaceType) { this.geometry = factory.createMultiSurface((MultiSurfaceType) metadata); } else if (metadata instanceof CurveType) { this.geometry = factory.createCurve((CurveType) metadata); } else if (metadata instanceof LineStringType) { this.geometry = factory.createLineString((LineStringType) metadata); } else if (metadata instanceof MultiLineStringType) { this.geometry = factory.createMultiLineString((MultiLineStringType) metadata); } else if (metadata instanceof MultiPointType) { this.geometry = factory.createMultiPoint((MultiPointType) metadata); } else if (metadata instanceof MultiCurveType) { this.geometry = factory.createMultiCurve((MultiCurveType) metadata); } else if (metadata instanceof MultiGeometryType) { this.geometry = factory.createMultiGeometry((MultiGeometryType) metadata); } else if (metadata instanceof MultiSolidType) { this.geometry = factory.createMultiSolid((MultiSolidType) metadata); } else if (metadata instanceof MultiPolygonType) { this.geometry = factory.createMultiPolygon((MultiPolygonType) metadata); } else if (metadata instanceof PolygonType) { this.geometry = factory.createPolygon((PolygonType) metadata); } else if (metadata instanceof SurfaceType) { this.geometry = factory.createSurface((SurfaceType) metadata); } else if (metadata instanceof org.geotoolkit.gml.xml.v321.PointType) { this.geometry = factory321.createPoint((org.geotoolkit.gml.xml.v321.PointType) metadata); } else if (metadata instanceof org.geotoolkit.gml.xml.v321.MultiSurfaceType) { this.geometry = factory321.createMultiSurface((org.geotoolkit.gml.xml.v321.MultiSurfaceType) metadata); } else if (metadata instanceof org.geotoolkit.gml.xml.v321.CurveType) { this.geometry = factory321.createCurve((org.geotoolkit.gml.xml.v321.CurveType) metadata); } else if (metadata instanceof org.geotoolkit.gml.xml.v321.LineStringType) { this.geometry = factory321.createLineString((org.geotoolkit.gml.xml.v321.LineStringType) metadata); /*} else if (metadata instanceof org.geotoolkit.gml.xml.v321.MultiLineStringType) { this.geometry = factory321.createMultiLineString((org.geotoolkit.gml.xml.v321.MultiLineStringType) metadata); ==> ISSUE */} else if (metadata instanceof org.geotoolkit.gml.xml.v321.MultiPointType) { this.geometry = factory321.createMultiPoint((org.geotoolkit.gml.xml.v321.MultiPointType) metadata); } else if (metadata instanceof org.geotoolkit.gml.xml.v321.MultiCurveType) { this.geometry = factory321.createMultiCurve((org.geotoolkit.gml.xml.v321.MultiCurveType) metadata); } else if (metadata instanceof org.geotoolkit.gml.xml.v321.MultiGeometryType) { this.geometry = factory321.createMultiGeometry((org.geotoolkit.gml.xml.v321.MultiGeometryType) metadata); } else if (metadata instanceof org.geotoolkit.gml.xml.v321.MultiSolidType) { this.geometry = factory321.createMultiSolid((org.geotoolkit.gml.xml.v321.MultiSolidType) metadata); /*} else if (metadata instanceof org.geotoolkit.gml.xml.v321.MultiPolygonType) { this.geometry = factory321.createMultiPolygon((org.geotoolkit.gml.xml.v321.MultiPolygonType) metadata); ==> ISSUE */} else if (metadata instanceof org.geotoolkit.gml.xml.v321.PolygonType) { this.geometry = factory321.createPolygon((org.geotoolkit.gml.xml.v321.PolygonType) metadata); } else if (metadata instanceof org.geotoolkit.gml.xml.v321.SurfaceType) { this.geometry = factory321.createSurface((org.geotoolkit.gml.xml.v321.SurfaceType) metadata); } else if (metadata != null){ LOGGER.log(Level.WARNING, "Unexpected geometry class in geometryAdpater:{0}", metadata.getClass().getName()); } } /** * Invoked when a new adapter is created by {@link org.apache.sis.xml.MarshallerPool}. * * @param marshaller The marshaller to be configured. */ @Override public void register(final Marshaller marshaller) { marshaller.setAdapter(GM_Object.class, this); } /** * Invoked when a new adapter is created by {@link org.apache.sis.xml.MarshallerPool}. * * @param unmarshaller The marshaller to be configured. */ @Override public void register(final Unmarshaller unmarshaller) { unmarshaller.setAdapter(GM_Object.class, this); } /** * Returns the Reference System value covered by a {@code MD_ReferenceSystem} element. * * @param value The value to marshall. * @return The adapter which covers the metadata value. */ @Override protected GM_Object wrap(final Geometry value) { return new GmlGeometryAdapter(value); } }