Feature.java
- package de.turnertech.ows.gml;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.Map.Entry;
- import java.util.Objects;
- import javax.xml.stream.XMLStreamWriter;
- import de.turnertech.ows.Logging;
- import de.turnertech.ows.common.OwsContext;
- import de.turnertech.ows.srs.SpatialReferenceSystemRepresentation;
- public class Feature implements IFeature {
- private final Map<String, Object> fields;
- private final FeatureType featureType;
- Feature(FeatureType featureType) {
- fields = new HashMap<>();
- this.featureType = featureType;
- }
- public Object getPropertyValue(String propertyName) {
- return fields.get(propertyName);
- }
- public boolean hasPropertyValue(String propertyName) {
- return fields.containsKey(propertyName);
- }
- public Object setPropertyValue(String propertyName, Object value) {
- return fields.put(propertyName, value);
- }
- @Override
- public Envelope getBoundingBox() {
- List<FeatureProperty> bboxProperties = featureType.getBoundingBoxProperties();
- if(bboxProperties.size() == 0) {
- return null;
- }
- Envelope returnBox = new Envelope();
- for (FeatureProperty property : bboxProperties) {
- BoundingBoxProvider bboxProvider = (BoundingBoxProvider)fields.get(property.getName());
- if(bboxProvider != null) {
- returnBox.expandToFit(bboxProvider.getBoundingBox());
- }
- }
- return returnBox;
- }
- @Override
- public void writeGml(XMLStreamWriter out, String localName, String namespaceURI, SpatialReferenceSystemRepresentation srs) {
- try {
- writeGmlStartElement(out, localName, namespaceURI);
- String id = getId();
- if(id != null && !"".equals(id)) {
- out.writeAttribute(OwsContext.GML_URI, "id", id);
- }
- for (Entry<String, Object> field : fields.entrySet()) {
- FeatureProperty property = featureType.getProperty(field.getKey());
- FeaturePropertyType propertyType = property.getPropertyType();
- if(propertyType == FeaturePropertyType.TEXT) {
- out.writeStartElement(namespaceURI, field.getKey());
- out.writeCharacters(field.getValue().toString());
- out.writeEndElement();
- } else if(
- propertyType == FeaturePropertyType.POLYGON ||
- propertyType == FeaturePropertyType.POINT ||
- propertyType == FeaturePropertyType.LINE_STRING ||
- propertyType == FeaturePropertyType.GEOMETRY) {
- GmlElement geom = (GmlElement)field.getValue();
- out.writeStartElement(namespaceURI, field.getKey());
- geom.writeGml(out, geom.getGmlName(), GmlElement.NAMESPACE, srs);
- out.writeEndElement();
- } else if(propertyType == FeaturePropertyType.ID) {
- // Do Nothing, special field
- } else {
- out.writeEmptyElement(namespaceURI, field.getKey());
- Logging.LOG.severe("Feature: parameter not written as property type not implemented: " + propertyType);
- }
- }
- out.writeEndElement();
- } catch (Exception e) {
- Logging.LOG.severe("Could not get GML for Feature");
- }
- }
- @Override
- public String getGmlName() {
- return featureType.getName();
- }
- @Override
- public String getId() {
- FeatureProperty idProperty = featureType.getIdProperty();
- if(idProperty == null) return null;
- return Objects.toString(getPropertyValue(idProperty.getName()), null);
- }
- @Override
- public FeatureType getFeatureType() {
- return featureType;
- }
-
- }