001: /*
002: * The Unified Mapping Platform (JUMP) is an extensible, interactive GUI
003: * for visualizing and manipulating spatial features with geometry and attributes.
004: *
005: * Copyright (C) 2003 Vivid Solutions
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License
009: * as published by the Free Software Foundation; either version 2
010: * of the License, or (at your option) any later version.
011: *
012: * This program is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
015: * GNU General Public License for more details.
016: *
017: * You should have received a copy of the GNU General Public License
018: * along with this program; if not, write to the Free Software
019: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
020: *
021: * For more information, contact:
022: *
023: * Vivid Solutions
024: * Suite #1A
025: * 2328 Government Street
026: * Victoria BC V8T 5G5
027: * Canada
028: *
029: * (250)385-6040
030: * www.vividsolutions.com
031: */
032: package com.vividsolutions.jump.feature;
033:
034: import com.vividsolutions.jts.geom.Geometry;
035:
036: /**
037: * A representation of an object in the world, including its location, geometry,
038: * and other attributes. A Feature has spatial attributes (polygons, points, etc.)
039: * and non-spatial attributes (strings, dates, and numbers).
040: * <p>
041: * In the current Workbench model, each feature has one spatial attribute (Geometry)
042: * and zero or more non-spatial attributes.
043: */
044: public interface Feature extends Cloneable, Comparable {
045: /**
046: * A low-level accessor that is not normally used.
047: *
048: * @param attributes may have a different
049: * length than the current attributes.
050: */
051: public abstract void setAttributes(Object[] attributes);
052:
053: /**
054: * A low-level accessor that is not normally used.
055: */
056: public abstract void setSchema(FeatureSchema schema);
057:
058: /**
059: * Returns a number that uniquely identifies this feature. This number is not
060: * persistent. (Implementors can obtain an ID from FeatureUtil#nextID).
061: * @return n, where this feature is the nth Feature created by this application
062: */
063: public abstract int getID();
064:
065: /**
066: * Sets the specified attribute.
067: *
068: *@param attributeIndex the array index at which to put the new attribute
069: *@param newAttribute the new attribute
070: */
071: public abstract void setAttribute(int attributeIndex,
072: Object newAttribute);
073:
074: /**
075: * Sets the specified attribute.
076: *
077: *@param attributeName the name of the attribute to set
078: *@param newAttribute the new attribute
079: */
080: public abstract void setAttribute(String attributeName,
081: Object newAttribute);
082:
083: /**
084: * Convenience method for setting the spatial attribute. JUMP Workbench
085: * PlugIns and CursorTools should not use this method directly, but should use an
086: * EditTransaction, so that the proper events are fired.
087: *
088: *@param geometry the new spatial attribute
089: */
090: public abstract void setGeometry(Geometry geometry);
091:
092: /**
093: * Returns the specified attribute.
094: *
095: *@param i the index of the attribute to get
096: *@return the attribute
097: */
098: public abstract Object getAttribute(int i);
099:
100: /**
101: * Returns the specified attribute.
102: *
103: *@param name the name of the attribute to get
104: *@return the attribute
105: */
106: public abstract Object getAttribute(String name);
107:
108: /**
109: * Returns the result of calling #toString on the attribute at the given (zero-based)
110: * index, or "" if it is null. Note that this method may be called even if the
111: * attribute is not of type AttributeType.STRING.
112: */
113: public abstract String getString(int attributeIndex);
114:
115: /**
116: * Returns a integer attribute.
117: *
118: *@param attributeIndex the index of the attribute to retrieve
119: *@return the integer attribute with the given name
120: */
121: public abstract int getInteger(int attributeIndex);
122:
123: /**
124: * Returns a double attribute.
125: *
126: *@param attributeIndex the index of the attribute to retrieve
127: *@return the double attribute with the given name
128: */
129: public abstract double getDouble(int attributeIndex);
130:
131: /**
132: * Returns the result of calling #toString on the attribute with the given
133: * (case-sensitive) name, or "" if it is null. Note that this method may be called even if the
134: * attribute is not of type AttributeType.STRING.
135: */
136: public abstract String getString(String attributeName);
137:
138: /**
139: * Convenience method for returning the spatial attribute.
140: *
141: *@return the feature's spatial attribute
142: */
143: public abstract Geometry getGeometry();
144:
145: /**
146: * Returns the feature's metadata
147: *
148: *@return the metadata describing the names and types of the attributes
149: */
150: public abstract FeatureSchema getSchema();
151:
152: /**
153: * Clones this Feature. The geometry will also be cloned.
154: * @return a new Feature with the same attributes as this Feature
155: */
156: public abstract Object clone();
157:
158: /**
159: * Clones this Feature.
160: * @param deep whether or not to clone the geometry
161: * @return a new Feature with the same attributes as this Feature
162: */
163: public abstract Feature clone(boolean deep);
164:
165: /**
166: * A low-level accessor that is not normally used.
167: */
168: public abstract Object[] getAttributes();
169: }
|