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.states; teichmann@4812: gernotbelger@9479: import java.util.List; gernotbelger@9479: gernotbelger@9479: import org.apache.log4j.Logger; teichmann@5831: import org.dive4elements.artifactdatabase.state.Facet; teichmann@5831: import org.dive4elements.artifactdatabase.state.FacetActivity; teichmann@5831: import org.dive4elements.artifacts.Artifact; teichmann@5831: import org.dive4elements.artifacts.CallContext; teichmann@5831: import org.dive4elements.river.artifacts.ChartArtifact; teichmann@5867: import org.dive4elements.river.artifacts.D4EArtifact; teichmann@5831: import org.dive4elements.river.artifacts.access.Calculation4Access; teichmann@5831: import org.dive4elements.river.artifacts.model.Calculation4; teichmann@5831: import org.dive4elements.river.artifacts.model.CalculationResult; teichmann@5831: import org.dive4elements.river.artifacts.model.ConstantWQKms; teichmann@5831: import org.dive4elements.river.artifacts.model.CrossSectionWaterLineFacet; teichmann@5831: import org.dive4elements.river.artifacts.model.DataFacet; teichmann@5831: import org.dive4elements.river.artifacts.model.EmptyFacet; teichmann@5831: import org.dive4elements.river.artifacts.model.FacetTypes; teichmann@5831: import org.dive4elements.river.artifacts.model.ReportFacet; teichmann@5831: import org.dive4elements.river.artifacts.model.WQCKms; teichmann@5831: import org.dive4elements.river.artifacts.model.WQKms; teichmann@5831: import org.dive4elements.river.artifacts.model.WaterlevelFacet; gernotbelger@9479: import org.dive4elements.river.artifacts.resources.Resources; ingo@399: gernotbelger@9479: public class DischargeLongitudinalSection extends DefaultState implements FacetTypes { gernotbelger@9479: private static Logger log = Logger.getLogger(DischargeLongitudinalSection.class); ingo@687: rrenkert@5138: static { rrenkert@5138: // Active/deactivate facets. gernotbelger@9479: FacetActivity.Registry.getInstance().register("winfo", new FacetActivity() { gernotbelger@9479: @Override gernotbelger@9479: public Boolean isInitialActive(final Artifact artifact, final Facet facet, final String output) { gernotbelger@9479: final String name = facet.getName(); gernotbelger@9479: if (name.equals(DISCHARGE_LONGITUDINAL_Q_INFOLD_CUT)) { gernotbelger@9479: return Boolean.FALSE; rrenkert@5138: } gernotbelger@9479: return Boolean.TRUE; gernotbelger@9479: } gernotbelger@9479: }); rrenkert@5138: } rrenkert@5138: ingo@687: @Override gernotbelger@9479: public Object computeAdvance(final D4EArtifact artifact, final String hash, final CallContext context, final List facets, final Object old) { raimund@2132: if (artifact instanceof ChartArtifact) { raimund@2135: facets.add(new EmptyFacet()); raimund@2132: return null; raimund@2132: } raimund@2132: gernotbelger@9479: final Calculation4Access access = new Calculation4Access(artifact); ingo@692: gernotbelger@9479: final CalculationResult res = old instanceof CalculationResult ? (CalculationResult) old : new Calculation4(access).calculate(context.getMeta()); ingo@692: sascha@705: if (facets == null) { sascha@705: return res; sascha@705: } sascha@705: gernotbelger@9479: final WQKms[] wqkms = (WQKms[]) res.getData(); sascha@709: sascha@709: for (int i = 0; i < wqkms.length; i++) { sascha@697: String nameW = null; sascha@697: String nameQ = null; ingo@692: teichmann@4812: if (access.isQ()) { sascha@709: nameQ = wqkms[i].getName(); sascha@697: nameW = "W(" + nameQ + ")"; gernotbelger@9479: } else { sascha@709: nameW = wqkms[i].getName(); ingo@2014: nameQ = "Q(" + nameW + ")"; sascha@697: } ingo@687: teichmann@5282: // Do not generate Waterlevel/Waterline facets teichmann@4835: // for Q only curves. teichmann@4835: if (!(wqkms[i] instanceof ConstantWQKms)) { teichmann@4835: gernotbelger@9479: final Facet w = new WaterlevelFacet(i, DISCHARGE_LONGITUDINAL_W, nameW); teichmann@4835: gernotbelger@9479: final Facet s = new CrossSectionWaterLineFacet(i, nameW, ComputeType.ADVANCE, hash, getID(), Integer.valueOf(i)); teichmann@4835: gernotbelger@9479: final Facet q = new WaterlevelFacet(i, DISCHARGE_LONGITUDINAL_Q, nameQ); teichmann@4835: facets.add(s); teichmann@4835: facets.add(w); rrenkert@5138: facets.add(q); gernotbelger@9479: } else { rrenkert@5138: Facet q; rrenkert@5138: if (nameQ.contains("geschnitten")) { gernotbelger@9479: q = new WaterlevelFacet(i, DISCHARGE_LONGITUDINAL_Q_INFOLD_CUT, nameQ); gernotbelger@9479: } else { gernotbelger@9479: q = new WaterlevelFacet(i, DISCHARGE_LONGITUDINAL_Q_INFOLD, nameQ); rrenkert@5138: } rrenkert@5138: facets.add(q); rrenkert@5138: } sascha@697: gernotbelger@9479: final String custom = Resources.getMsg(context.getMeta(), "common.custom"); sascha@709: if (wqkms[i] instanceof WQCKms) { sascha@697: // TODO DO i18n sascha@697: gernotbelger@9479: final String nameC = nameW.replace(custom, Resources.getMsg(context.getMeta(), "custom.corrected")); sascha@697: gernotbelger@9479: final Facet c = new WaterlevelFacet(i, DISCHARGE_LONGITUDINAL_C, nameC); sascha@697: felix@3124: // Here, avoid index clash with Facet "s" above and felix@3124: // signal the WINFO later that we want to access Cs. gernotbelger@9479: final Facet r = new CrossSectionWaterLineFacet(i + 1, nameC, ComputeType.ADVANCE, hash, getID(), Integer.valueOf(i + 1)); felix@2730: sascha@697: facets.add(c); felix@2730: facets.add(r); sascha@697: } sascha@697: } sascha@697: sascha@709: if (wqkms.length > 0) { sascha@703: facets.add(new DataFacet(CSV, "CSV data")); sascha@703: facets.add(new DataFacet(WST, "WST data")); sascha@703: } sascha@703: sascha@711: if (res.getReport().hasProblems()) { sascha@711: facets.add(new ReportFacet()); sascha@711: } sascha@711: sascha@697: return res; ingo@687: } ingo@399: } ingo@399: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :