ingo@1926: package de.intevation.flys.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: ingo@1926: import de.intevation.artifacts.Artifact; ingo@1926: import de.intevation.artifacts.ArtifactFactory; ingo@1926: import de.intevation.artifacts.CallMeta; ingo@1926: ingo@1926: import de.intevation.artifacts.common.ArtifactNamespaceContext; ingo@1926: import de.intevation.artifacts.common.utils.XMLUtils; ingo@1926: ingo@1926: import de.intevation.artifactdatabase.data.DefaultStateData; ingo@1926: import de.intevation.artifactdatabase.state.DefaultOutput; ingo@1926: import de.intevation.artifactdatabase.state.Facet; ingo@1926: import de.intevation.artifactdatabase.state.State; ingo@1926: ingo@1926: import de.intevation.flys.artifacts.states.WMSBackgroundState; ingo@1926: ingo@1926: ingo@1926: public class ExternalWMSArtifact extends StaticFLYSArtifact { ingo@1926: ingo@1926: public static final String XPATH_IDS = "/art:action/art:ids/@value"; ingo@1926: ingo@1926: public static final String NAME = "external_wms"; ingo@1926: ingo@1926: private static final Logger logger = 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, ingo@1926: Document data) ingo@1926: { ingo@1926: logger.info("ExternalWMSArtifact.setup"); ingo@1926: ingo@1926: super.setup(identifier, factory, context, callMeta, data); ingo@1926: ingo@1926: String ids = XMLUtils.xpathString( ingo@1926: data, XPATH_IDS, ArtifactNamespaceContext.INSTANCE); ingo@1926: ingo@1926: if (ids != null && ids.length() > 0) { ingo@1926: addData("ids", new DefaultStateData("ids", null, null, 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()) { ingo@1926: facets.put(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: ingo@1926: List fs = facets.get(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 :