teichmann@5863: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5863: * Software engineering by Intevation GmbH teichmann@5863: * teichmann@5994: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5863: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5994: * documentation coming with Dive4Elements River for details. teichmann@5863: */ teichmann@5863: teichmann@5831: package org.dive4elements.river.artifacts.model.map; ingo@3300: christian@3306: import com.vividsolutions.jts.geom.Envelope; christian@3306: teichmann@5831: import org.dive4elements.artifactdatabase.state.DefaultFacet; teichmann@5831: import org.dive4elements.artifactdatabase.state.Facet; teichmann@5831: import org.dive4elements.artifacts.Artifact; teichmann@5831: import org.dive4elements.artifacts.ArtifactNamespaceContext; teichmann@5831: import org.dive4elements.artifacts.CallContext; teichmann@5831: import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator; teichmann@5831: import org.dive4elements.river.artifacts.states.DefaultState.ComputeType; teichmann@5831: import org.dive4elements.river.utils.GeometryUtils; christian@3306: ingo@3300: import java.util.ArrayList; ingo@3300: import java.util.List; ingo@3300: ingo@3300: import org.apache.log4j.Logger; ingo@3300: import org.w3c.dom.Document; ingo@3300: import org.w3c.dom.Element; ingo@3300: import org.w3c.dom.Node; ingo@3300: ingo@3300: ingo@3300: public class WMSLayerFacet ingo@3300: extends DefaultFacet ingo@3300: { ingo@3300: protected ComputeType type; ingo@3300: protected List layers; ingo@3300: protected String stateId; ingo@3300: protected String hash; ingo@3300: protected String url; ingo@3300: protected Envelope extent; ingo@3918: protected Envelope originalExtent; ingo@3300: protected String srid; ingo@3300: ingo@3300: ingo@3300: private static final Logger logger = Logger.getLogger(WMSLayerFacet.class); ingo@3300: ingo@3300: public WMSLayerFacet() { ingo@3300: } ingo@3300: ingo@3300: ingo@3300: public WMSLayerFacet(int index, String name, String description) { ingo@3300: this(index, name, description, ComputeType.FEED, null, null); ingo@3300: } ingo@3300: ingo@3300: ingo@3300: public WMSLayerFacet( ingo@3300: int index, ingo@3300: String name, ingo@3300: String description, ingo@3300: ComputeType type, ingo@3300: String stateId, ingo@3300: String hash ingo@3300: ingo@3300: ) { ingo@3300: super(index, name, description); ingo@3300: this.layers = new ArrayList(); ingo@3300: this.type = type; ingo@3300: this.stateId = stateId; ingo@3300: this.hash = hash; ingo@3300: } ingo@3300: ingo@3300: ingo@3300: public WMSLayerFacet( ingo@3300: int index, ingo@3300: String name, ingo@3300: String description, ingo@3300: ComputeType type, ingo@3300: String stateId, ingo@3300: String hash, ingo@3300: String url ingo@3300: ) { ingo@3300: this(index, name, description, type, stateId, hash); ingo@3300: this.url = url; ingo@3300: } ingo@3300: ingo@3300: ingo@3300: public void addLayer(String name) { ingo@3300: if (name != null && name.length() > 0) { ingo@3300: layers.add(name); ingo@3300: } ingo@3300: } ingo@3300: ingo@3300: ingo@3300: public List getLayers() { ingo@3300: return layers; ingo@3300: } ingo@3300: ingo@3300: ingo@3300: public void removeLayer(String layer) { ingo@3300: if (layers != null) { ingo@3300: layers.remove(layer); ingo@3300: } ingo@3300: } ingo@3300: ingo@3300: ingo@3300: public void setExtent(Envelope extent) { ingo@3300: if (extent != null) { ingo@3300: this.extent = extent; ingo@3300: } christian@3306: else { christian@3306: logger.debug("setExtent(): extent is null"); christian@3306: } ingo@3300: } ingo@3300: ingo@3300: ingo@3300: public Envelope getExtent() { ingo@3300: return extent; ingo@3300: } sascha@3923: sascha@3923: ingo@3918: public void setOriginalExtent(Envelope originalExtent) { ingo@3918: this.originalExtent = originalExtent; ingo@3918: } sascha@3923: sascha@3923: ingo@3918: public Envelope getOriginalExtent() { ingo@3918: return originalExtent; ingo@3918: } ingo@3300: ingo@3300: ingo@3300: public void setSrid(String srid) { ingo@3300: if (srid != null) { ingo@3300: this.srid = srid; ingo@3300: } ingo@3300: } ingo@3300: ingo@3300: ingo@3300: public String getSrid() { ingo@3300: return srid; ingo@3300: } ingo@3300: ingo@3300: christian@3306: @Override ingo@3300: public Object getData(Artifact artifact, CallContext context) { ingo@3300: return null; ingo@3300: } ingo@3300: ingo@3300: ingo@3300: @Override ingo@3300: public Node toXML(Document doc) { ingo@3300: ElementCreator ec = new ElementCreator( ingo@3300: doc, ingo@3300: ArtifactNamespaceContext.NAMESPACE_URI, ingo@3300: ArtifactNamespaceContext.NAMESPACE_PREFIX); ingo@3300: ingo@3300: Element facet = ec.create("facet"); ingo@3300: ec.addAttr(facet, "description", description, true); ingo@3300: ec.addAttr(facet, "index", String.valueOf(index), true); ingo@3300: ec.addAttr(facet, "name", name, true); ingo@3300: ec.addAttr(facet, "url", url, true); ingo@3300: ec.addAttr(facet, "layers", layers.get(0), true); ingo@3300: ec.addAttr(facet, "srid", srid != null ? srid : "", true); ingo@3918: ec.addAttr(facet, "extent", originalExtent != null ingo@3918: ? GeometryUtils.jtsBoundsToOLBounds(originalExtent) ingo@3300: : "", true); ingo@3300: ec.addAttr(facet, "queryable", String.valueOf(isQueryable()), true); ingo@3300: ingo@3300: return facet; ingo@3300: } ingo@3300: ingo@3300: ingo@3300: public boolean isQueryable() { ingo@3300: return false; ingo@3300: } ingo@3300: ingo@3300: felix@7740: /** Clone facet-bound data. */ felix@7740: protected void cloneData(WMSLayerFacet copy) { felix@7740: copy.type = type; felix@7740: copy.stateId = stateId; felix@7740: copy.hash = hash; felix@7740: felix@7740: if (layers != null) { felix@7740: copy.layers = new ArrayList(layers); felix@7740: } felix@7740: else { felix@7740: copy.layers = new ArrayList(); felix@7740: } felix@7740: felix@7744: copy.originalExtent = originalExtent; felix@7740: copy.url = url; felix@7740: copy.extent = extent; felix@7740: copy.srid = srid; felix@7740: } felix@7740: ingo@3300: @Override ingo@3300: public Facet deepCopy() { ingo@3300: WMSLayerFacet copy = new WMSLayerFacet(); ingo@3300: copy.set(this); ingo@3300: felix@7740: cloneData(copy); ingo@3300: ingo@3300: return copy; ingo@3300: } ingo@3300: } ingo@3300: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :