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; ingo@1926: ingo@1926: import java.util.ArrayList; ingo@1926: import java.util.List; ingo@1926: ingo@1926: import org.apache.log4j.Logger; ingo@1926: ingo@1926: import org.w3c.dom.Document; ingo@1926: teichmann@5831: import org.dive4elements.artifacts.Artifact; teichmann@5831: import org.dive4elements.artifacts.ArtifactFactory; teichmann@5831: import org.dive4elements.artifacts.CallMeta; ingo@1926: teichmann@5831: import org.dive4elements.artifactdatabase.state.DefaultOutput; teichmann@5831: import org.dive4elements.artifactdatabase.state.Facet; teichmann@5831: import org.dive4elements.artifactdatabase.state.State; ingo@1926: teichmann@5831: import org.dive4elements.river.artifacts.states.WMSBackgroundState; ingo@1926: ingo@1926: teichmann@5867: public class ExternalWMSArtifact extends StaticD4EArtifact { ingo@1926: ingo@1926: public static final String NAME = "external_wms"; ingo@1926: teichmann@8202: private static final Logger log = ingo@1926: Logger.getLogger(ExternalWMSArtifact.class); ingo@1926: ingo@1926: ingo@1926: @Override ingo@1926: public String getName() { ingo@1926: return NAME; ingo@1926: } ingo@1926: ingo@1926: ingo@1926: @Override ingo@1926: public void setup( ingo@1926: String identifier, ingo@1926: ArtifactFactory factory, ingo@1926: Object context, ingo@1926: CallMeta callMeta, rrenkert@7842: Document data, rrenkert@7842: List loadFacets) ingo@1926: { teichmann@8202: log.info("ExternalWMSArtifact.setup"); ingo@1926: rrenkert@7842: super.setup(identifier, factory, context, callMeta, data, loadFacets); ingo@1926: felix@2748: String ids = getDatacageIDValue(data); ingo@1926: ingo@1926: if (ids != null && ids.length() > 0) { felix@1982: addStringData("ids", ids); ingo@1926: } ingo@1926: else { ingo@1926: throw new IllegalArgumentException("No attribute 'ids' found!"); ingo@1926: } ingo@1926: ingo@1926: List fs = new ArrayList(); ingo@1926: ingo@1926: WMSBackgroundState s = (WMSBackgroundState) getCurrentState(context); ingo@1926: s.computeInit(this, hash(), context, callMeta, fs); ingo@1926: ingo@1926: if (!fs.isEmpty()) { bjoern@4497: addFacets(getCurrentStateId(), fs); ingo@1926: } ingo@1926: } ingo@1926: ingo@1926: ingo@1926: @Override ingo@1926: protected void initialize( ingo@1926: Artifact artifact, ingo@1926: Object context, ingo@1926: CallMeta callMeta) ingo@1926: { ingo@1926: // do nothing ingo@1926: } ingo@1926: ingo@1926: ingo@1926: @Override ingo@1926: public State getCurrentState(Object cc) { ingo@1926: State s = new ExternalWMSState(this); ingo@1926: bjoern@4497: List fs = getFacets(getCurrentStateId()); ingo@1926: ingo@1926: DefaultOutput o = new DefaultOutput( ingo@1926: "floodmap", ingo@1926: "floodmap", ingo@1926: "image/png", ingo@1926: fs, ingo@1926: "map"); ingo@1926: ingo@1926: s.getOutputs().add(o); ingo@1926: ingo@1926: return s; ingo@1926: } ingo@1926: ingo@1926: ingo@1926: /** ingo@1926: * Get a list containing the one and only State. ingo@1926: * @param context ignored. ingo@1926: * @return list with one and only state. ingo@1926: */ ingo@1926: @Override ingo@1926: protected List getStates(Object context) { ingo@1926: ArrayList states = new ArrayList(); ingo@1926: states.add(getCurrentState(context)); ingo@1926: ingo@1926: return states; ingo@1926: } ingo@1926: ingo@1926: ingo@1926: public static class ExternalWMSState extends WMSBackgroundState { ingo@1926: ingo@1926: protected ExternalWMSArtifact artifact; ingo@1926: ingo@1926: protected String ids; ingo@1926: ingo@1926: ingo@1926: public ExternalWMSState(ExternalWMSArtifact artifact) { ingo@1926: super(); ingo@1926: this.artifact = artifact; ingo@1926: } ingo@1926: ingo@1926: protected String getIds() { ingo@1926: if (ids == null || ids.length() == 0) { ingo@1926: ids = artifact.getDataAsString("ids"); ingo@1926: } ingo@1926: ingo@1926: return ids; ingo@1926: } ingo@1926: ingo@1926: @Override ingo@1926: protected String getFacetType() { ingo@1926: return FLOODMAP_EXTERNAL_WMS; ingo@1926: } ingo@1926: ingo@1926: @Override ingo@1926: protected String getSrid() { ingo@1926: return ""; ingo@1926: } ingo@1926: ingo@1926: @Override ingo@1926: protected String getUrl() { ingo@1926: String ids = getIds(); ingo@1926: String[] parts = ids.split(";"); ingo@1926: ingo@1926: return parts[0]; ingo@1926: } ingo@1926: ingo@1926: @Override ingo@1926: protected String getLayer() { ingo@1926: String ids = getIds(); ingo@1926: String[] parts = ids.split(";"); ingo@1926: ingo@1926: return parts[1]; ingo@1926: } ingo@1926: ingo@1926: @Override ingo@1926: protected String getTitle(CallMeta meta) { ingo@1926: String ids = getIds(); ingo@1926: String[] parts = ids.split(";"); ingo@1926: ingo@1926: return parts[2]; ingo@1926: } ingo@1926: } // end of class ExternalWMSState ingo@1926: } ingo@1926: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :