/** * H2GIS is a library that brings spatial support to the H2 Database Engine * <http://www.h2database.com>. H2GIS is developed by CNRS * <http://www.cnrs.fr/>. * * This code is part of the H2GIS project. H2GIS is free software; * you can redistribute it and/or modify it under the terms of the GNU * Lesser General Public License as published by the Free Software Foundation; * version 3.0 of the License. * * H2GIS is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details <http://www.gnu.org/licenses/>. * * * For more information, please consult: <http://www.h2gis.org/> * or contact directly: info_at_h2gis.org */ package org.h2gis.functions.io.shp.internal; /** Not much but a type safe enumeration of file types as ints and names. The * descriptions can easily be tied to a ResourceBundle if someone wants to do that. * @author Ian Schneider * @source $URL: http://svn.geotools.org/geotools/tags/2.3.1/plugin/shapefile/src/org/geotools/data/shapefile/shp/ShapeType.java $ */ public final class ShapeType { /** Represents a Null shape (id = 0). */ public static final ShapeType NULL = new ShapeType(0,"Null"); /** Represents a Point shape (id = 1). */ public static final ShapeType POINT = new ShapeType(1,"Point"); /** Represents a PointZ shape (id = 11). */ public static final ShapeType POINTZ = new ShapeType(11,"PointZ"); /** Represents a PointM shape (id = 21). */ public static final ShapeType POINTM = new ShapeType(21,"PointM"); /** Represents an Arc shape (id = 3). */ public static final ShapeType ARC = new ShapeType(3,"Arc"); /** Represents an ArcZ shape (id = 13). */ public static final ShapeType ARCZ = new ShapeType(13,"ArcZ"); /** Represents an ArcM shape (id = 23). */ public static final ShapeType ARCM = new ShapeType(23,"ArcM"); /** Represents a Polygon shape (id = 5). */ public static final ShapeType POLYGON = new ShapeType(5,"Polygon"); /** Represents a PolygonZ shape (id = 15). */ public static final ShapeType POLYGONZ = new ShapeType(15,"PolygonZ"); /** Represents a PolygonM shape (id = 25). */ public static final ShapeType POLYGONM = new ShapeType(25,"PolygonM"); /** Represents a MultiPoint shape (id = 8). */ public static final ShapeType MULTIPOINT = new ShapeType(8,"MultiPoint"); /** Represents a MultiPointZ shape (id = 18). */ public static final ShapeType MULTIPOINTZ = new ShapeType(18,"MultiPointZ"); /** Represents a MultiPointZ shape (id = 28). */ public static final ShapeType MULTIPOINTM = new ShapeType(28,"MultiPointM"); /** Represents an Undefined shape (id = -1). */ public static final ShapeType UNDEFINED = new ShapeType(-1,"Undefined"); /** The integer id of this ShapeType. */ public final int id; /** The human-readable name for this ShapeType.<br> * Could easily use ResourceBundle for internationialization. */ public final String name; /** Creates a new instance of ShapeType. Hidden on purpose. * @param id The id. * @param name The name. */ protected ShapeType(int id,String name) { this.id = id; this.name = name; } /** Get the name of this ShapeType. * @return The name. */ @Override public String toString() { return name; } /** Is this a multipoint shape? Hint- all shapes are multipoint except NULL, * UNDEFINED, and the POINTs. * @return true if multipoint, false otherwise. */ public boolean isMultiPoint() { boolean mp = true; if (this == UNDEFINED) { mp = false; } else if (this == NULL) { mp = false; } else if (this == POINT) { mp = false; } return mp; } public boolean isPointType() { return id % 10 == 1; } public boolean isLineType() { return id % 10 == 3; } public boolean isPolygonType() { return id % 10 == 5; } public boolean isMultiPointType() { return id % 10 == 8; } /** Determine the ShapeType for the id. * @param id The id to search for. * @return The ShapeType for the id. */ public static ShapeType forID(int id) { ShapeType t; switch (id) { case 0: t = NULL; break; case 1: t = POINT; break; case 11: t = POINTZ; break; case 21: t = POINTM; break; case 3: t = ARC; break; case 13: t = ARCZ; break; case 23: t = ARCM; break; case 5: t = POLYGON; break; case 15: t = POLYGONZ; break; case 25: t = POLYGONM; break; case 8: t = MULTIPOINT; break; case 18: t = MULTIPOINTZ; break; case 28: t = MULTIPOINTM; break; default: t = UNDEFINED; break; } return t; } /** Each ShapeType corresponds to a handler. In the future this should probably go * else where to allow different handlers, or something... * @throws ShapefileException If the ShapeType is bogus. * @return The correct handler for this ShapeType. Returns a new one. */ public ShapeHandler getShapeHandler() throws ShapefileException { ShapeHandler handler; switch (id) { case 1: case 11: case 21: handler = new PointHandler(this); break; case 3: case 13: case 23: handler = new MultiLineHandler(this); break; case 5: case 15: case 25: handler = new PolygonHandler(this); break; case 8: case 18: case 28: handler = new MultiPointHandler(this); break; default: handler = null; } return handler; } }