/*
* This is part of Geomajas, a GIS framework, http://www.geomajas.org/.
*
* Copyright 2008-2015 Geosparc nv, http://www.geosparc.com/, Belgium.
*
* The program is available in open source according to the GNU Affero
* General Public License. All contributions in this program are covered
* by the Geomajas Contributors License Agreement. For full licensing
* details, see LICENSE.txt in the project root.
*/
package org.geomajas.gwt.client.spatial.geometry;
import java.util.ArrayList;
import java.util.Collections;
import org.geomajas.geometry.Coordinate;
/**
* The only class that is able to edit geometries. We needed this to copy the Javascript functionality. TODO:
* Re-evaluate this mechanism. Perhaps we should never change existing geometries?
*
* @author Pieter De Graef
*/
public class GeometryEditor {
protected GeometryEditor() {
}
protected void setCoordinates(LineString lineString, Coordinate[] coordinates) {
lineString.setCoordinates(coordinates);
}
protected boolean setCoordinateN(LineString lineString, Coordinate coordinate, int n) {
if (!lineString.isEmpty() && n < lineString.getNumPoints()) {
lineString.getCoordinates()[n] = coordinate;
return true;
}
return false;
}
protected void setLineStrings(MultiLineString multiLineString, LineString[] lineStrings) {
multiLineString.setLineStrings(lineStrings);
}
protected boolean setLineStringN(MultiLineString multiLineString, LineString lineString, int n) {
if (!multiLineString.isEmpty() && n < multiLineString.getNumGeometries()) {
multiLineString.getLineStrings()[n] = lineString;
return true;
}
return false;
}
protected void setPolygons(MultiPolygon multiPolygon, Polygon[] polygons) {
multiPolygon.setPolygons(polygons);
}
protected boolean setPolygonN(MultiPolygon multiPolygon, Polygon polygon, int n) {
if (!multiPolygon.isEmpty() && n < multiPolygon.getNumGeometries()) {
multiPolygon.getPolygons()[n] = polygon;
return true;
}
return false;
}
protected void setPoints(MultiPoint multiPoint, Point[] points) {
multiPoint.setPoints(points);
}
protected boolean setPointN(MultiPoint multiPoint, Point point, int n) {
if (!multiPoint.isEmpty() && n < multiPoint.getNumGeometries()) {
multiPoint.getPoints()[n] = point;
return true;
}
return false;
}
protected void addPoint(MultiPoint multiPoint, Point point) {
if (point != null) {
Point[] points = multiPoint.getPoints();
ArrayList<Point> list = new ArrayList<Point>(points.length + 1);
Collections.addAll(list, points);
list.add(point);
multiPoint.setPoints(list.toArray(new Point[list.size()]));
}
}
protected void setExteriorRing(Polygon polygon, LinearRing exteriorRing) {
polygon.setExteriorRing(exteriorRing);
}
protected void setInteriorRings(Polygon polygon, LinearRing[] interiorRings) {
polygon.setInteriorRings(interiorRings);
}
protected boolean setInteriorRingN(Polygon polygon, LinearRing interiorRing, int n) {
if (!polygon.isEmpty() && n < polygon.getNumInteriorRing()) {
polygon.getInteriorRings()[n] = interiorRing;
return true;
}
return false;
}
protected void setCoordinate(Point point, Coordinate coordinate) {
point.setCoordinate(coordinate);
}
}