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.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 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: 
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<Facet> fs = new ArrayList<Facet>();
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<Facet> 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<State> getStates(Object context) {
ingo@1926:         ArrayList<State> states = new ArrayList<State>();
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 :