/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2002-2008, Open Source Geospatial Foundation (OSGeo) * * This library 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 2.1 of the License. * * This library 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. */ package org.geotools.feature; import org.opengis.filter.Filter; /** * A FeatureType aware Feature AttributeType. * * <p> * While we could use a plain AttributeType to capture a Feature instance we * would miss out one one important aspect: the schema. * </p> * * <p> * By definition the schema of a Feature is not defined by java interface * alone, this interface allows access the the assocaited FeatureType. * </p> * * <p> * Suggestion: we can look at having this class extend ListFeatureType and * exactly specifying how delegation to the getSchema() should occur. (the * alternative is to make FeatureType extend ListAttributeType). Something * should be done as they have 90% the same API. * </p> * * @author Jody Garnett, Refractions Research, Inc. * * @since 2.1.M5 * @source $URL$ */ public interface FeatureAttributeType extends AttributeType, PrimativeAttributeType { /** * Method should delegate responsibility to a FeatureFactory. * * @see org.geotools.feature.AttributeType#createDefaultValue() */ Object createDefaultValue(); /** * Method should return getSchema().duplicate( feature ) * * <p> * Exampe implementation: * <pre><code> * <b>return</b> getSchema().duplicate( (Feature) getValue() ); * </code></pre> * It is understood that FeatureType.duplicate * </p> * * @see org.geotools.feature.AttributeType#duplicate(java.lang.Object) */ Object duplicate(Object src) throws IllegalAttributeException; /** * Method must return type Feature.class. * * <p> * Exampe implementation: * <pre><code> * <b>return</b> Feature.class; * </code></pre> * </p> * * @see org.geotools.feature.AttributeType#getBinding() */ Class getBinding(); /** * Retrieve the schema for this FeatureType * * @return CS_CoordinateSystem for this GeometryAttributeType */ public FeatureType getSchema(); /** * Must return <code>false</code>. * * @return DOCUMENT ME! * * @see org.geotools.feature.AttributeType#isGeometry() * @deprecated repalce with: <code>type instanceof * GeometryAttributeType</code> */ boolean isGeometry(); /** * Filter must indicate value is required to be a member of getSchema(). * * <p> * TODO: We need a Filter code snipit describing how to enforce the * indicated relationship. * </p> * * @see org.geotools.feature.AttributeType#getRestriction() */ Filter getRestriction(); }