teichmann@5831: package org.dive4elements.river.artifacts.states; teichmann@4812: teichmann@5831: import org.dive4elements.artifactdatabase.state.Facet; teichmann@5831: import org.dive4elements.artifactdatabase.state.FacetActivity; teichmann@4812: teichmann@5831: import org.dive4elements.artifacts.Artifact; teichmann@5831: import org.dive4elements.artifacts.CallContext; teichmann@5831: teichmann@5831: import org.dive4elements.river.artifacts.ChartArtifact; teichmann@5831: import org.dive4elements.river.artifacts.FLYSArtifact; teichmann@5831: teichmann@5831: import org.dive4elements.river.artifacts.access.Calculation4Access; teichmann@5831: 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; teichmann@4812: ingo@687: import java.util.List; ingo@687: ingo@399: import org.apache.log4j.Logger; ingo@399: ingo@692: public class DischargeLongitudinalSection ingo@692: extends DefaultState ingo@692: implements FacetTypes ingo@692: { teichmann@4812: private static Logger log = ingo@399: Logger.getLogger(DischargeLongitudinalSection.class); ingo@687: rrenkert@5138: static { rrenkert@5138: // Active/deactivate facets. rrenkert@5138: FacetActivity.Registry.getInstance().register( rrenkert@5138: "winfo", rrenkert@5138: new FacetActivity() { rrenkert@5138: @Override rrenkert@5138: public Boolean isInitialActive( rrenkert@5138: Artifact artifact, rrenkert@5138: Facet facet, rrenkert@5138: String output rrenkert@5138: ) { rrenkert@5138: String name = facet.getName(); rrenkert@5138: if (name.equals(DISCHARGE_LONGITUDINAL_Q_INFOLD_CUT)) { rrenkert@5138: return Boolean.FALSE; rrenkert@5138: } rrenkert@5138: return Boolean.TRUE; rrenkert@5138: } rrenkert@5138: }); rrenkert@5138: } rrenkert@5138: ingo@687: @Override sascha@697: public Object computeAdvance( sascha@697: FLYSArtifact artifact, sascha@697: String hash, sascha@697: CallContext context, sascha@742: List facets, sascha@697: Object old sascha@697: ) { raimund@2132: if (artifact instanceof ChartArtifact) { raimund@2135: ChartArtifact chart = (ChartArtifact)artifact; raimund@2135: facets.add(new EmptyFacet()); raimund@2132: return null; raimund@2132: } raimund@2132: teichmann@4812: Calculation4Access access = new Calculation4Access(artifact); ingo@692: sascha@711: CalculationResult res = old instanceof CalculationResult sascha@711: ? (CalculationResult)old teichmann@4812: : new Calculation4(access).calculate(); ingo@692: sascha@705: if (facets == null) { sascha@705: return res; sascha@705: } sascha@705: sascha@709: 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 + ")"; ingo@687: } sascha@697: 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: teichmann@4835: Facet w = new WaterlevelFacet( teichmann@4835: i, DISCHARGE_LONGITUDINAL_W, nameW); teichmann@4835: teichmann@4835: Facet s = new CrossSectionWaterLineFacet(i, nameW); teichmann@4835: rrenkert@5138: Facet q = new WaterlevelFacet( rrenkert@5138: i, DISCHARGE_LONGITUDINAL_Q, nameQ); teichmann@4835: facets.add(s); teichmann@4835: facets.add(w); rrenkert@5138: facets.add(q); teichmann@4835: } rrenkert@5138: else { rrenkert@5138: Facet q; rrenkert@5138: if (nameQ.contains("geschnitten")) { rrenkert@5138: q = new WaterlevelFacet( rrenkert@5138: i, DISCHARGE_LONGITUDINAL_Q_INFOLD_CUT, nameQ); rrenkert@5138: } rrenkert@5138: else { rrenkert@5138: q = new WaterlevelFacet( rrenkert@5138: i, DISCHARGE_LONGITUDINAL_Q_INFOLD, nameQ); rrenkert@5138: } rrenkert@5138: facets.add(q); rrenkert@5138: } sascha@697: sascha@709: if (wqkms[i] instanceof WQCKms) { sascha@697: // TODO DO i18n sascha@697: sascha@697: String nameC = nameW.replace( ingo@1712: "benutzerdefiniert", ingo@1712: "benutzerdefiniert [korrigiert]"); sascha@697: sascha@697: Facet c = new WaterlevelFacet( sascha@697: 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. felix@3124: Facet r = new CrossSectionWaterLineFacet(i + 1, nameC); 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 :