felix@1629: package de.intevation.flys.artifacts.states;
felix@1629: 
felix@1629: import java.util.List;
felix@1629: 
felix@1629: import org.apache.log4j.Logger;
felix@1629: 
felix@1629: import de.intevation.artifacts.CallContext;
felix@1629: import de.intevation.artifacts.CallMeta;
felix@1629: 
felix@1629: import de.intevation.artifactdatabase.state.Facet;
felix@1629: 
felix@1629: import de.intevation.flys.artifacts.FLYSArtifact;
felix@1629: import de.intevation.flys.artifacts.WINFOArtifact;
felix@1629: import de.intevation.flys.artifacts.model.FacetTypes;
felix@1629: import de.intevation.flys.artifacts.model.ReportFacet;
felix@1629: import de.intevation.flys.artifacts.model.WaterlevelFacet;
felix@1629: import de.intevation.flys.artifacts.model.WQKms;
felix@1629: 
felix@1629: import de.intevation.flys.artifacts.model.DataFacet;
felix@1629: import de.intevation.flys.artifacts.model.CrossSectionWaterLineFacet;
felix@1629: import de.intevation.flys.artifacts.model.CalculationResult;
felix@1629: 
felix@1629: 
felix@1629: public class WaterlevelInfoState
felix@1629: extends      DefaultState
felix@1629: implements   FacetTypes
felix@1629: {
felix@1629:     /** The logger that is used in this state. */
felix@1629:     private static Logger logger = Logger.getLogger(WaterlevelInfoState.class);
felix@1629: 
felix@1629: 
felix@1629:     @Override
felix@1629:     protected String getUIProvider() {
felix@1629:         return "noinput";
felix@1629:     }
felix@1629: 
felix@1629: 
felix@2657:     @Override
felix@1629:     public Object computeInit(
felix@1629:         FLYSArtifact artifact,
felix@1629:         String       hash,
felix@1629:         Object       context,
felix@1629:         CallMeta     meta,
felix@1629:         List<Facet>  facets
felix@1629:     ) {
felix@1629:         return compute((WINFOArtifact) artifact, hash, facets, null);
felix@1629:     }
felix@1629: 
felix@1629: 
felix@1629:     protected Object compute(
felix@1629:         WINFOArtifact winfo,
felix@1629:         String        hash,
felix@1629:         List<Facet>   facets,
felix@1629:         Object        old
felix@1629:     ) {
felix@1629:         logger.debug("WaterlevelInfoState.compute");
felix@1629:         String id = getID();
felix@1629: 
felix@1629:         CalculationResult res = old instanceof CalculationResult
felix@1629:             ? (CalculationResult)old
felix@1629:             : winfo.getWaterlevelData();
felix@1629: 
felix@1629:         if (facets == null) {
felix@1629:             return res;
felix@1629:         }
felix@1629: 
felix@1629:         WQKms [] wqkms = (WQKms [])res.getData();
felix@1629: 
felix@1629:         for (int i = 0; i < wqkms.length; i++) {
felix@1629:             String nameW = null;
felix@1629:             String nameQ = null;
felix@1629: 
felix@1629:             if (winfo.isQ()) {
felix@1629:                 nameQ = wqkms[i].getName();
felix@1629:                 nameW = "W(" + nameQ + ")";
felix@1629:             }
felix@1629:             else {
felix@1629:                 nameW = wqkms[i].getName();
felix@1629:                 nameQ = "Q(" + nameQ + ")";
felix@1629:             }
felix@1629: 
felix@1629:             logger.debug("WaterlevelInfoState Create facet: " + nameW);
felix@1629:             logger.debug("WaterlevelInfoState Create facet: " + nameQ);
felix@1629: 
felix@1629:             Facet w = new WaterlevelFacet(
felix@1629:                 i, LONGITUDINAL_W, nameW, ComputeType.ADVANCE, id, hash);
felix@1629:             Facet q = new WaterlevelFacet(
felix@1629:                 i, LONGITUDINAL_Q, nameQ, ComputeType.ADVANCE, id, hash);
felix@1629: 
felix@1629:             facets.add(w);
felix@1629:             facets.add(q);
felix@1629:         }
felix@1629: 
felix@1629:         if (wqkms.length > 0) {
felix@1629:             Facet wst = new DataFacet(
felix@1629:                 WST, "WST data", ComputeType.ADVANCE, hash, id);
felix@1629:             Facet csv = new DataFacet(
felix@1629:                 CSV, "CSV data", ComputeType.ADVANCE, hash, id);
felix@1629: 
felix@1629:             facets.add(wst);
felix@1629:             facets.add(csv);
felix@1629:         }
felix@1629: 
felix@1629:         if (res.getReport().hasProblems()) {
felix@1629:             facets.add(new ReportFacet(ComputeType.ADVANCE, hash, id));
felix@1629:         }
felix@1629: 
felix@1804:         // TODO Adjust to WaterlevelState - implementation.
felix@1804:         facets.add(new CrossSectionWaterLineFacet(0, "Q=" + winfo.getDataAsString("wq_single")));
felix@1804: 
felix@1629:         // Assume to be in wq_single mode.
felix@1629:         return res;
felix@1629:     }
felix@1629: 
felix@1629: 
felix@1629:     /**
felix@1629:      * @param context Ignored.
felix@1629:      */
felix@1629:     @Override
felix@1629:     public Object computeFeed(
felix@1629:         FLYSArtifact artifact,
felix@1629:         String       hash,
felix@1629:         CallContext  context,
felix@1629:         List<Facet>  facets,
felix@1629:         Object       old
felix@1629:     ) {
felix@1629:         return compute((WINFOArtifact) artifact, hash, facets, old);
felix@1629:     }
felix@1629: 
felix@1629: 
felix@1629:     /**
felix@1629:      * @param context Ignored.
felix@1629:      */
felix@1629:     @Override
felix@1629:     public Object computeAdvance(
felix@1629:         FLYSArtifact artifact,
felix@1629:         String       hash,
felix@1629:         CallContext  context,
felix@1629:         List<Facet>  facets,
felix@1629:         Object       old
felix@1629:     ) {
felix@1629:         return compute((WINFOArtifact) artifact, hash, facets, old);
felix@1629:     }
felix@1629: }
felix@1629: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :