ingo@688: package de.intevation.flys.artifacts.states;
ingo@688: 
sascha@2195: import de.intevation.artifactdatabase.state.Facet;
sascha@2195: 
sascha@2195: import de.intevation.artifacts.CallContext;
sascha@2195: 
sascha@2195: import de.intevation.flys.artifacts.ChartArtifact;
sascha@2195: import de.intevation.flys.artifacts.FLYSArtifact;
sascha@2195: import de.intevation.flys.artifacts.WINFOArtifact;
sascha@2195: 
sascha@2195: import de.intevation.flys.artifacts.model.CalculationResult;
sascha@2195: import de.intevation.flys.artifacts.model.CrossSectionWaterLineFacet;
sascha@2195: import de.intevation.flys.artifacts.model.DataFacet;
sascha@2195: import de.intevation.flys.artifacts.model.EmptyFacet;
sascha@2195: import de.intevation.flys.artifacts.model.FacetTypes;
sascha@2195: import de.intevation.flys.artifacts.model.ReportFacet;
sascha@2195: import de.intevation.flys.artifacts.model.WQKms;
sascha@2195: import de.intevation.flys.artifacts.model.WaterlevelFacet;
sascha@2195: 
sascha@2195: import de.intevation.flys.utils.FLYSUtils;
sascha@2195: 
ingo@688: import java.util.List;
ingo@688: 
ingo@688: import org.apache.log4j.Logger;
ingo@688: 
ingo@692: public class WaterlevelState
ingo@692: extends      DefaultState
ingo@692: implements   FacetTypes
ingo@692: {
felix@1111:     /** The logger that is used in this state. */
ingo@688:     private static Logger logger = Logger.getLogger(WaterlevelState.class);
ingo@688: 
ingo@688: 
felix@1770:     /**
felix@1770:      * From this state can only be continued trivially.
felix@1770:      */
ingo@688:     @Override
ingo@927:     protected String getUIProvider() {
ingo@927:         return "continue";
ingo@927:     }
ingo@927: 
ingo@927: 
felix@2123:     /**
felix@2123:      * Compute result or returned object from cache, create facets.
felix@2123:      * @param old Object that was cached.
felix@2123:      */
felix@1140:     protected Object compute(
felix@1140:         WINFOArtifact winfo,
ingo@1664:         CallContext   cc,
felix@1140:         String        hash,
felix@1140:         List<Facet>   facets,
felix@1140:         Object        old
felix@1138:     ) {
felix@1138:         String id = getID();
felix@1138: 
felix@1138:         CalculationResult res = old instanceof CalculationResult
felix@2123:             ? (CalculationResult) old
felix@1138:             : winfo.getWaterlevelData();
felix@1138: 
felix@1138:         if (facets == null) {
felix@1138:             return res;
felix@1138:         }
felix@1138: 
sascha@2195:         boolean debug = logger.isDebugEnabled();
sascha@2195: 
felix@2123:         WQKms [] wqkms = (WQKms []) res.getData();
felix@1138: 
felix@1138:         for (int i = 0; i < wqkms.length; i++) {
felix@2123:             String name = wqkms[i].getName();
felix@1138: 
ingo@1740:             String nameW = FLYSUtils.createWspWTitle(winfo, cc, name);
ingo@1740:             String nameQ = FLYSUtils.createWspQTitle(winfo, cc, name);
felix@1138: 
raimund@2618:             // Hotfix for theme names. Themes with the same name cause problems
raimund@2618:             // aggregating chart legend items.
raimund@2618:             if (i > 0 && name.equals(wqkms[i - 1].getName())) {
raimund@2618:                 nameW += "; Q=" + wqkms[i].get(0, new double[3])[1];
raimund@2618:                 nameQ += " = " + wqkms[i].get(0, new double[3])[1];
raimund@2618:             }
raimund@2618: 
sascha@2195:             if (debug) {
sascha@2195:                 logger.debug("Create facet: " + nameW);
sascha@2195:                 logger.debug("Create facet: " + nameQ);
sascha@2195:             }
felix@1138: 
felix@1138:             Facet w = new WaterlevelFacet(
felix@1138:                 i, LONGITUDINAL_W, nameW, ComputeType.ADVANCE, id, hash);
felix@1138:             Facet q = new WaterlevelFacet(
felix@1138:                 i, LONGITUDINAL_Q, nameQ, ComputeType.ADVANCE, id, hash);
felix@1138: 
felix@2573:             facets.add(new CrossSectionWaterLineFacet(i, nameW));
felix@1802: 
felix@1138:             facets.add(w);
felix@1138:             facets.add(q);
felix@1138:         }
felix@1138: 
felix@1138:         if (wqkms.length > 0) {
felix@1138:             Facet wst = new DataFacet(
felix@1138:                 WST, "WST data", ComputeType.ADVANCE, hash, id);
felix@1138:             Facet csv = new DataFacet(
felix@1138:                 CSV, "CSV data", ComputeType.ADVANCE, hash, id);
raimund@2176:             Facet pdf = new DataFacet(
raimund@2176:                 PDF, "PDF data", ComputeType.ADVANCE, hash, id);
felix@1138: 
felix@1138:             facets.add(wst);
felix@1138:             facets.add(csv);
raimund@2176:             facets.add(pdf);
felix@1138:         }
felix@1138: 
felix@1138:         if (res.getReport().hasProblems()) {
felix@1138:             facets.add(new ReportFacet(ComputeType.ADVANCE, hash, id));
felix@1138:         }
felix@1138: 
felix@1138:         return res;
felix@1138:     }
felix@1138: 
felix@1138: 
felix@1140:     /**
felix@1140:      * @param context Ignored.
felix@1140:      */
felix@1140:     @Override
felix@1140:     public Object computeFeed(
felix@1140:         FLYSArtifact artifact,
felix@1140:         String       hash,
felix@1140:         CallContext  context,
felix@1140:         List<Facet>  facets,
felix@1140:         Object       old
felix@1140:     ) {
raimund@2154:         if (artifact instanceof ChartArtifact) {
raimund@2154:             ChartArtifact chart = (ChartArtifact)artifact;
raimund@2154:             facets.add(new EmptyFacet());
raimund@2154:             return null;
raimund@2154:         }
ingo@1664:         return compute((WINFOArtifact) artifact, context, hash, facets, old);
felix@1140:     }
felix@1140: 
felix@1140: 
felix@1140:     /**
felix@1140:      * @param context Ignored.
felix@1140:      */
ingo@927:     @Override
sascha@697:     public Object computeAdvance(
sascha@697:         FLYSArtifact artifact,
sascha@697:         String       hash,
sascha@697:         CallContext  context,
sascha@742:         List<Facet>  facets,
sascha@697:         Object       old
sascha@697:     ) {
raimund@2154:         if (artifact instanceof ChartArtifact) {
raimund@2154:             ChartArtifact chart = (ChartArtifact)artifact;
raimund@2154:             facets.add(new EmptyFacet());
raimund@2154:             return null;
raimund@2154:         }
ingo@1664:         return compute((WINFOArtifact) artifact, context, hash, facets, old);
ingo@688:     }
ingo@688: }
ingo@688: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :