package org.geotoolkit.internal.jaxb;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.XmlElementRef;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import org.geotoolkit.geometry.isoonjts.spatialschema.geometry.geometry.JTSLineString;
import org.geotoolkit.geometry.isoonjts.spatialschema.geometry.primitive.JTSCurve;
import org.opengis.geometry.primitive.OrientableCurve;
/**
*
* @author Guilhem Legal (Geomatys)
*/
public class CurveLineAdapter<T> extends XmlAdapter<CurveLineAdapter, OrientableCurve> {
private static ObjectFactory FACTORY = new ObjectFactory();
@XmlElementRef(name="LineString", namespace = "http://www.opengis.net/gml")
private JAXBElement<LineStringPosListType> lineString;
public CurveLineAdapter() {
}
public CurveLineAdapter(final OrientableCurve curve) {
if (curve instanceof JTSCurve) {
JTSLineString line = (JTSLineString) ((JTSCurve)curve).getSegments().get(0);
this.lineString = FACTORY.createLineStringPosListType(new LineStringPosListType(line));
} else if (curve != null) {
System.out.println("unexpected curve:" + curve.getClass().getName());
}
}
@Override
public OrientableCurve unmarshal(final CurveLineAdapter v) throws Exception {
if (v != null && v.lineString != null && v.lineString.getValue() != null) {
LineStringPosListType posList = (LineStringPosListType) v.lineString.getValue();
JTSLineString line = posList.getJTSLineString();
JTSCurve curve = new JTSCurve(null);
curve.getSegments().add(line);
return curve;
}
return null;
}
@Override
public CurveLineAdapter marshal(final OrientableCurve v) throws Exception {
return new CurveLineAdapter(v);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder("[CurveLineAdapter]\n");
if (lineString != null) {
sb.append(lineString.getValue());
}
return sb.toString();
}
}