package org.geotools.feature.type;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.geotools.data.complex.ComplexFeatureConstants;
import org.geotools.feature.NameImpl;
import org.geotools.xs.XSSchema;
import org.opengis.feature.type.AttributeType;
import org.opengis.feature.type.GeometryDescriptor;
import org.opengis.feature.type.Name;
import org.opengis.feature.type.PropertyDescriptor;
import org.opengis.filter.Filter;
import org.opengis.util.InternationalString;
/**
* This is a specialization of complex feature type that can be nested inside another feature type.
* A system attribute descriptor called "FEATURE_LINK" is added in the descriptors so it can be used
* to link the type to its parent type, without being encoded, since it doesn't exist in the real
* schema.
*
* @author Rini Angreani, Curtin University of Technology
*
* @source $URL$
*/
public class ComplexFeatureTypeImpl extends FeatureTypeImpl {
/**
* Type specific descriptors, excluding FEATURE_LINK
*/
private Collection<PropertyDescriptor> schema;
/**
* Constructor for complex feature type with fake feature type descriptor provided.
*
* @param name
* Name of feature type
* @param schema
* Schema property descriptors
* @param defaultGeometry
* Default geometry
* @param isAbstract
* True if this type is abstract
* @param restrictions
* List of restrictions
* @param superType
* Super type
* @param description
* Feature description
* @param featureLink
* System attribute used to link between features
*/
public ComplexFeatureTypeImpl(Name name, Collection<PropertyDescriptor> schema,
GeometryDescriptor defaultGeometry, boolean isAbstract, List<Filter> restrictions,
AttributeType superType, InternationalString description) {
super(name, new ArrayList<PropertyDescriptor>(schema) {
{
add(ComplexFeatureConstants.FEATURE_CHAINING_LINK);
};
}, defaultGeometry, isAbstract, restrictions, superType, description);
this.schema = schema;
}
/**
* Return all the descriptors that come from the schema, excluding the system descriptors, such
* as 'FEATURE_LINK', used for linking features.
*
* @return schema descriptors
*/
public Collection<PropertyDescriptor> getTypeDescriptors() {
return schema;
}
}