package org.geotools.data;
/**
*
* @author Gertjan
*/
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import java.util.HashMap;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.Point;
import com.vividsolutions.jts.geom.Polygon;
import com.vividsolutions.jts.geom.LineString;
import com.vividsolutions.jts.geom.MultiPoint;
import com.vividsolutions.jts.geom.MultiPolygon;
import com.vividsolutions.jts.geom.MultiLineString;
import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.Triangle;
public enum GeometryType {
// Make sure there is no duplicate class or extension use
UNSUPPORTED(Class.class, "null"),
ALL(Geometry.class, ""),
POINT(Point.class, "_p"),
LINE(LineString.class, "_l"),
POLYGON(Polygon.class, "_v"),
MULTIPOINT(MultiPoint.class, "_mp"),
MULTILINE(MultiLineString.class, "_ml"),
MULTIPOLYGON(MultiPolygon.class, "_mv"),
COORDINATE(Coordinate.class, "_c"),
TRIANGLE(Triangle.class, "_t");
private Class geomId;
private String extension;
// Enum custom constructor
private GeometryType(Class geomId, String extension) {
this.geomId = geomId;
this.extension = extension;
}
// Get geometryClass of the GeometryType
public Class getGeometryClass() {
return geomId;
}
// Get String extension of the GeometryType
public String getExtension() {
return extension;
}
// Set extension of the GeometryType
public static void setExtension(GeometryType type, String extension) {
type.extension = extension;
}
public static String[] getTypeNames(String filename, GeometryType... types) {
ArrayList extensionList;
if (types.length == 0) {
extensionList = new ArrayList(Arrays.asList(GeometryType.values()));
extensionList.remove(GeometryType.ALL);
extensionList.remove(GeometryType.UNSUPPORTED);
} else {
extensionList = new ArrayList(Arrays.asList(types));
}
String[] typeNames = new String[extensionList.size()];
for (int i = 0; i < typeNames.length; i++) {
typeNames[i] = filename + ((GeometryType) extensionList.get(i)).getExtension();
}
return typeNames;
}
public static Map getTypeNamesMap(String filename, GeometryType... types) {
ArrayList extensionList;
if (types.length == 0) {
extensionList = new ArrayList(Arrays.asList(GeometryType.values()));
extensionList.remove(GeometryType.ALL);
extensionList.remove(GeometryType.UNSUPPORTED);
} else {
extensionList = new ArrayList(Arrays.asList(types));
}
Map typenameMap = new HashMap();
for (int i = 0; i < extensionList.size(); i++) {
GeometryType geometryType = (GeometryType) extensionList.get(i);
String name = filename + geometryType.getExtension();
typenameMap.put(name, geometryType);
}
return typenameMap;
}
// Return Geometry Class of given String extension
public static Class getClassByExtension(String extension) {
for (GeometryType geomType : GeometryType.values()) {
if (geomType.getExtension().equals(extension)) {
return geomType.getGeometryClass();
}
}
return null;
}
// Return String extension of given Geometry Class
public static String getExtensionByClass(Geometry typeClass) {
for (GeometryType geomType : GeometryType.values()) {
if (geomType.getGeometryClass().equals(typeClass.getClass())) {
return geomType.getExtension();
}
}
return null;
}
// Get Geometry Type of given Geometry Class
public static GeometryType getTypeByClass(Geometry typeClass) {
for (GeometryType geomType : GeometryType.values()) {
if (geomType.getGeometryClass().equals(typeClass.getClass())) {
return geomType;
}
}
return null;
}
// Get Geometry Type of given Geometry extension
public static GeometryType getTypeByExtension(String typeExtension) {
for (GeometryType geomType : GeometryType.values()) {
if (geomType.getExtension().equals(typeExtension)) {
return geomType;
}
}
return null;
}
public static String stripExtensionFromTypename(String typename, GeometryType type) {
String ext = type.getExtension();
if (typename.endsWith(ext)) {
typename = typename.substring(0, typename.length() - ext.length());
}
return typename;
}
};