package com.revolsys.geometry.model.editor; import com.revolsys.geometry.model.GeometryFactory; import com.revolsys.geometry.model.Point; import com.revolsys.geometry.model.impl.AbstractPoint; import com.revolsys.util.number.Doubles; public class PointEditor extends AbstractPoint implements PunctualEditor { private static final long serialVersionUID = 1L; private final Point point; private double[] newCoordinates; private GeometryFactory newGeometryFactory; public PointEditor(final Point point) { this.point = point; this.newGeometryFactory = point.getGeometryFactory(); } @Override public int getAxisCount() { return this.newGeometryFactory.getAxisCount(); } @Override public double getCoordinate(final int axisIndex) { if (this.newCoordinates == null) { return this.point.getCoordinate(axisIndex); } else { final int axisCount = getAxisCount(); if (axisIndex >= 0 && axisIndex < axisCount) { return this.newCoordinates[axisIndex]; } else { return java.lang.Double.NaN; } } } @Override public GeometryFactory getGeometryFactory() { return this.newGeometryFactory; } @Override public double getX() { if (this.newCoordinates == null) { return this.point.getX(); } else { return this.newCoordinates[X]; } } @Override public double getY() { if (this.newCoordinates == null) { return this.point.getY(); } else { return this.newCoordinates[Y]; } } @Override public boolean isEmpty() { return this.point.isEmpty(); } @Override public Point newGeometry() { if (this.newCoordinates == null) { return this.point; } else { return this.point.newPoint(this.newGeometryFactory, this.newCoordinates); } } @Override public Point newPoint(final GeometryFactory geometryFactory, final double... coordinates) { return this.point.newPoint(geometryFactory, coordinates); } @Override public int setAxisCount(final int axisCount) { final int oldAxisCount = getAxisCount(); if (oldAxisCount != axisCount) { this.newCoordinates = getCoordinates(axisCount); this.newGeometryFactory = this.newGeometryFactory.convertAxisCount(axisCount); } return oldAxisCount; } public double setCoordinate(final int axisIndex, final double coordinate) { final double oldValue = this.point.getCoordinate(axisIndex); if (!Doubles.equal(coordinate, oldValue)) { final int axisCount = getAxisCount(); if (axisIndex >= 0 && axisIndex < axisCount) { if (this.newCoordinates == null) { this.newCoordinates = this.point.getCoordinates(axisCount); } this.newCoordinates[axisIndex] = coordinate; } } return oldValue; } @Override public double setCoordinate(final int axisIndex, final double coordinate, final int... vertexId) { if (vertexId.length == 0) { return setCoordinate(axisIndex, coordinate); } else { return java.lang.Double.NaN; } } @Override public double setCoordinate(final int partIndex, final int axisIndex, final double coordinate) { if (partIndex == 0) { return setCoordinate(axisIndex, coordinate); } else { return java.lang.Double.NaN; } } public double setM(final double m) { return setCoordinate(M, m); } public double setX(final double x) { return setCoordinate(X, x); } public double setY(final double y) { return setCoordinate(Y, y); } public double setZ(final double z) { return setCoordinate(Z, z); } @Override public String toString() { return toEwkt(); } }