/**
* <copyright>
* </copyright>
*
* $Id$
*/
package org.geotools.data.efeature;
import com.vividsolutions.jts.geom.Geometry;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.geotools.data.Transaction;
import org.geotools.referencing.CRS;
import org.opengis.feature.Feature;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
/**
* <!-- begin-user-doc --> A representation of the model object '<em><b>EFeature</b></em>'. <!--
* end-user-doc -->
*
* <p>
* The following features are supported:
* <ul>
* <li>{@link org.geotools.data.efeature.EFeature#getID <em>ID</em>}</li>
* <li>{@link org.geotools.data.efeature.EFeature#getData <em>Data</em>}</li>
* <li>{@link org.geotools.data.efeature.EFeature#getSRID <em>SRID</em>}</li>
* <li>{@link org.geotools.data.efeature.EFeature#getDefault <em>Default</em>}</li>
* <li>{@link org.geotools.data.efeature.EFeature#getStructure <em>Structure</em>}</li>
* </ul>
* </p>
*
* @see org.geotools.data.efeature.EFeaturePackage#getEFeature()
* @model abstract="true"
* @generated
*/
public interface EFeature extends EObject {
/**
* Returns the value of the '<em><b>ID</b></em>' attribute.
* The default value is <code>""</code>.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>ID</em>' attribute isn't clear,
* there really should be more of a description here...
* </p>
* <!-- end-user-doc -->
* @return the value of the '<em>ID</em>' attribute.
* @see #setID(String)
* @see org.geotools.data.efeature.EFeaturePackage#getEFeature_ID()
* @model default="" id="true" required="true" volatile="true"
* @generated
*/
String getID();
/**
* Sets the value of the '{@link org.geotools.data.efeature.EFeature#getID <em>ID</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param value the new value of the '<em>ID</em>' attribute.
* @see #getID()
* @generated
*/
void setID(String value);
/**
* Returns the value of the '<em><b>SRID</b></em>' attribute.
* The default value is <code>"EPSG:4326"</code>.
* <!-- begin-user-doc -->
* <p>
* The spatial reference ID (SRID) is an Coordinate Reference System authority code. The code
* has the following format:
*
* <pre>
* code = <AUTHORITY>:<ID>
* AUTHORITY = The CRS Authority. Is used to determine applicable CRS factories.
* ID = The CRS ID. Is passed to the CRS factory chosen by the {@link CRS CRS utility class}.
*
* f.ex: "EPSG:4326"
* </pre>
*
* <strong>NOTE</strong>: This is a convenience method for calling
* <p>
* <code>
* getStructure().setSRID(srid).
* </code>
* </p>
* Hence, changing the SRID affects ALL {@link EFeature}s with the same {@link #getStructure()
* structure}. All {@link Feature#getBounds() bounds} of all {@link #getData() feature}s is
* invalidated when the SRID is changed, forcing a bound calculation the first time
* {@link Feature#getBounds()} is called on every feature with same structure as this. </p>
*
* @see {@link CRS#decode(String)} - Decodes SRID into {@link CoordinateReferenceSystem}
* instance
* @see {@link CRS#decode(String, boolean)} - Decodes SRID to {@link CoordinateReferenceSystem}
* instance where axis order is forced to (longitude, latitude). <!-- end-user-doc -->
* @return the value of the '<em>SRID</em>' attribute.
* @see #setSRID(String)
* @see org.geotools.data.efeature.EFeaturePackage#getEFeature_SRID()
* @model default="EPSG:4326" required="true" volatile="true"
* @generated
*/
String getSRID();
/**
* Sets the value of the '{@link org.geotools.data.efeature.EFeature#getSRID <em>SRID</em>}' attribute.
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @param value the new value of the '<em>SRID</em>' attribute.
* @see #getSRID()
* @generated
*/
void setSRID(String value);
/**
* Returns the value of the '<em><b>Data</b></em>' attribute.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>Data</em>' attribute isn't clear, there really should be more of a
* description here...
* </p>
* <!-- end-user-doc -->
* @return the value of the '<em>Data</em>' attribute.
* @see #setData(Feature)
* @see org.geotools.data.efeature.EFeaturePackage#getEFeature_Data()
* @model dataType="org.geotools.data.efeature.Feature" required="true" transient="true" derived="true"
* @generated
*/
Feature getData();
/**
* Sets the value of the '{@link org.geotools.data.efeature.EFeature#getData <em>Data</em>}' attribute.
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @param value the new value of the '<em>Data</em>' attribute.
* @see #getData()
* @generated
*/
void setData(Feature value);
/**
* Returns the value of the '<em><b>Default</b></em>' attribute.
* The default value is <code>"geom"</code>.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>Default</em>' attribute isn't clear, there really should be more
* of a description here...
* </p>
* <!-- end-user-doc -->
* @return the value of the '<em>Default</em>' attribute.
* @see #setDefault(String)
* @see org.geotools.data.efeature.EFeaturePackage#getEFeature_Default()
* @model default="geom" required="true" volatile="true"
* annotation="http://www.eclipse.org/emf/2002/GenModel Doumentation='Name of default EFeatureGeometry'"
* @generated
*/
String getDefault();
/**
* Sets the value of the '{@link org.geotools.data.efeature.EFeature#getDefault <em>Default</em>}' attribute.
* <!-- begin-user-doc --> <!-- end-user-doc -->
* @param value the new value of the '<em>Default</em>' attribute.
* @see #getDefault()
* @generated
*/
void setDefault(String value);
/**
* Returns the value of the '<em><b>Structure</b></em>' attribute.
* <!-- begin-user-doc -->
* <p>
* If the meaning of the '<em>Structure</em>' attribute isn't clear, there really should be more
* of a description here...
* </p>
* <!-- end-user-doc -->
* @return the value of the '<em>Structure</em>' attribute.
* @see #setStructure(EFeatureInfo)
* @see org.geotools.data.efeature.EFeaturePackage#getEFeature_Structure()
* @model dataType="org.geotools.data.efeature.EFeatureInfo" required="true" transient="true" volatile="true" derived="true"
* @generated
*/
EFeatureInfo getStructure();
/**
* Sets the value of the '{@link org.geotools.data.efeature.EFeature#getStructure <em>Structure</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param value the new value of the '<em>Structure</em>' attribute.
* @see #getStructure()
* @generated
*/
void setStructure(EFeatureInfo value);
/**
* <!-- begin-user-doc --> Get all {@link EFeatureAttribute attributes} not containing
* {@link Geometry geometry data}.
* <p>
*
* @param valueType - attribute {@link EFeatureAttribute#getValueType() value type} filter.
* Passing {@link Object} will return all {@link EFeatureAttribute attributes}. <!--
* end-user-doc -->
* @model dataType="org.geotools.data.efeature.List<org.geotools.data.efeature.EFeatureAttribute<V>>" required="true" many="false"
* @generated
*/
<V> List<EFeatureAttribute<V>> getAttributeList(Class<V> valueType);
/**
* <!-- begin-user-doc --> Get all {@link EFeatureGeometry geometry attributes}.
* <p>
*
* @param valueType - geometry {@link EFeatureGeometry#getValueType() value type} filter.
* Passing {@link Geometry} will return all {@link EFeatureGeometry geometry attributes}.
* <!-- end-user-doc -->
* @model dataType="org.geotools.data.efeature.List<org.geotools.data.efeature.EFeatureGeometry<V>>" required="true" many="false" VBounds="org.geotools.data.efeature.Geometry"
* @generated
*/
<V extends Geometry> List<EFeatureGeometry<V>> getGeometryList(Class<V> valueType);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @model dataType="org.geotools.data.efeature.Feature" required="true" transactionDataType="org.geotools.data.efeature.Transaction" transactionRequired="true"
* @generated
*/
Feature getData(Transaction transaction);
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @model dataType="org.geotools.data.efeature.Feature" required="true" newDataDataType="org.geotools.data.efeature.Feature" newDataRequired="true" transactionDataType="org.geotools.data.efeature.Transaction" transactionRequired="true"
* @generated
*/
Feature setData(Feature newData, Transaction transaction);
} // EFeature