package org.geotoolkit.geometry.isoonjts.spatialschema.geometry.aggregate;
import java.util.Set;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import org.geotoolkit.geometry.isoonjts.spatialschema.geometry.geometry.JTSLineString;
import org.geotoolkit.geometry.isoonjts.spatialschema.geometry.primitive.JTSCurve;
import org.geotoolkit.internal.jaxb.CurveLineAdapter;
import org.geotoolkit.internal.jaxb.GeometryAdapter;
import org.opengis.geometry.aggregate.MultiCurve;
import org.opengis.geometry.primitive.CurveSegment;
import org.opengis.geometry.primitive.OrientableCurve;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
/**
*
* @author Guilhem Legal (Geomatys)
* @module
*/
@XmlType(name="MultiCurveType", namespace="http://www.opengis.net/gml")
public class JTSMultiCurve extends AbstractJTSAggregate<OrientableCurve> implements MultiCurve {
public JTSMultiCurve() {
this(null);
}
public JTSMultiCurve(final CoordinateReferenceSystem crs) {
super(crs);
}
/**
* {@inheritDoc }
*/
@Override
public JTSMultiCurve clone() {
return (JTSMultiCurve) super.clone();
}
@XmlElement(name="curveMember", namespace = "http://www.opengis.net/gml")
@XmlJavaTypeAdapter(CurveLineAdapter.class)
@Override
public Set<OrientableCurve> getElements() {
return super.getElements();
}
public double length() {
throw new UnsupportedOperationException("Not supported yet.");
}
public void applyCRSonChild() {
for (OrientableCurve child : getElements()) {
if (child.getCoordinateReferenceSystem() == null && child instanceof JTSCurve) {
JTSCurve childCurve = (JTSCurve) child;
childCurve.setCoordinateReferenceSystem(getCoordinateReferenceSystem());
for (CurveSegment cv :childCurve.getSegments()) {
if (cv instanceof JTSLineString) {
((JTSLineString)cv).setCoordinateReferenceSystem(getCoordinateReferenceSystem());
((JTSLineString)cv).applyCRSOnChild();
}
}
}
}
}
}