FeatureType.java

package de.turnertech.ows.gml;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import de.turnertech.ows.srs.SpatialReferenceSystem;

public class FeatureType {
    
    /**
     * The "type name". This is the parameter which will be used in requests usw.
     */
    private final String name;

    private final String namespace;

    private final Map<String, FeatureProperty> featureTypeProperties;

    private SpatialReferenceSystem srs;

    private String title;

    private String description;

    public FeatureType(String namespace, String name) {
        this.namespace = namespace;
        this.name = name;
        this.featureTypeProperties = new HashMap<>();
    }

    /**
     * @return the name
     */
    public String getName() {
        return name;
    }

    /**
     * @return the namespace
     */
    public String getNamespace() {
        return namespace;
    }

    /**
     * @return the title
     */
    public String getTitle() {
        return title;
    }

    /**
     * @param title the title to set
     */
    public void setTitle(String title) {
        this.title = title;
    }

    /**
     * @return the srs
     */
    public SpatialReferenceSystem getSrs() {
        return srs;
    }

    /**
     * @param srs the srs to set
     */
    public void setSrs(SpatialReferenceSystem srs) {
        this.srs = srs;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Feature createInstance() {
        return new Feature(this);
    }

    public FeatureProperty getIdProperty() {
        for(FeatureProperty property : featureTypeProperties.values()) {
            if(property.getPropertyType() == FeaturePropertyType.ID) return property;
        }
        return null;
    }

    public List<FeatureProperty> getBoundingBoxProperties() {
        List<FeatureProperty> returnList = new ArrayList<>(1);
        for(FeatureProperty property : featureTypeProperties.values()) {
            if(property.getPropertyType().isBoundingBoxProvider()) {
                returnList.add(property);
            }
        }
        return returnList;
    }

    public FeatureProperty getProperty(String propertyName) {
        return featureTypeProperties.get(propertyName);
    }

    public Collection<FeatureProperty> getProperties() {
        return featureTypeProperties.values();
    }

    public boolean hasProperty(String propertyName) {
        return featureTypeProperties.containsKey(propertyName);
    }

    public FeatureProperty putProperty(FeatureProperty value) {
        return featureTypeProperties.put(value.getName(), value);
    } 

}