/* (c) 2015 Open Source Geospatial Foundation - all rights reserved
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.wms.topojson;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
public abstract class TopoGeom {
private Map<String, Object> properties = ImmutableMap.of();
private String id;
public abstract String getGeometryType();
public Map<String, Object> getProperties() {
return properties;
}
public void setId(String id) {
this.id = id;
}
@Nullable
public String getId() {
return id;
}
public void setProperties(Map<String, Object> properties) {
this.properties = ImmutableMap.copyOf(properties);
}
public static class Point extends TopoGeom {
private double x, y;
public Point(double x, double y) {
this.x = x;
this.y = y;
}
public double getX() {
return x;
}
public double getY() {
return y;
}
@Override
public String getGeometryType() {
return "Point";
}
}
public static class MultiPoint extends TopoGeom {
private List<Point> points = ImmutableList.of();
public MultiPoint(List<TopoGeom.Point> points) {
this.points = ImmutableList.copyOf(points);
}
public Iterable<Point> getPoints() {
return points;
}
@Override
public String getGeometryType() {
return "MultiPoint";
}
}
public static class LineString extends TopoGeom {
private List<Integer> indexes;
public LineString(List<Integer> indexes) {
this.indexes = ImmutableList.copyOf(indexes);
}
public List<Integer> getIndexes() {
return indexes;
}
@Override
public String getGeometryType() {
return "LineString";
}
}
public static class MultiLineString extends TopoGeom {
private List<LineString> arcs = ImmutableList.of();
public MultiLineString(List<LineString> arcs) {
this.arcs = ImmutableList.copyOf(arcs);
}
public Iterable<LineString> getArcs() {
return arcs;
}
@Override
public String getGeometryType() {
return "MultiLineString";
}
}
public static class Polygon extends TopoGeom {
private List<LineString> rings = ImmutableList.of();
public Polygon(List<LineString> rings) {
this.rings = ImmutableList.copyOf(rings);
}
public Iterable<LineString> getRings() {
return rings;
}
@Override
public String getGeometryType() {
return "Polygon";
}
}
public static class MultiPolygon extends TopoGeom {
private List<Polygon> polygons = ImmutableList.of();
public MultiPolygon(List<TopoGeom.Polygon> polygons) {
this.polygons = ImmutableList.copyOf(polygons);
}
public Iterable<TopoGeom.Polygon> getPolygons() {
return polygons;
}
@Override
public String getGeometryType() {
return "MultiPolygon";
}
}
public static class GeometryColleciton extends TopoGeom {
private List<TopoGeom> geometries = ImmutableList.of();
public GeometryColleciton(Collection<? extends TopoGeom> collection) {
this.geometries = ImmutableList.copyOf(collection);
}
public Iterable<TopoGeom> getGeometries() {
return geometries;
}
@Override
public String getGeometryType() {
return "GeometryCollection";
}
}
}