teichmann@5863: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5863: * Software engineering by Intevation GmbH teichmann@5863: * teichmann@5863: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5863: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5863: * documentation coming with Dive4Elements River for details. teichmann@5863: */ teichmann@5863: teichmann@5831: package org.dive4elements.river.artifacts.states.fixation; sascha@3413: ingo@3466: import java.util.List; ingo@3466: ingo@3466: import org.apache.log4j.Logger; ingo@3466: teichmann@5831: import org.dive4elements.artifactdatabase.state.Facet; teichmann@5831: import org.dive4elements.artifacts.CallContext; teichmann@5831: import org.dive4elements.artifacts.CallMeta; teichmann@5831: import org.dive4elements.river.artifacts.FLYSArtifact; teichmann@5831: import org.dive4elements.river.artifacts.access.FixRealizingAccess; teichmann@5831: import org.dive4elements.river.artifacts.model.CalculationResult; 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.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.WQKmsFactory; teichmann@5831: import org.dive4elements.river.artifacts.model.fixings.FixOutlierFacet; teichmann@5831: import org.dive4elements.river.artifacts.model.fixings.FixRealizingCalculation; teichmann@5831: import org.dive4elements.river.artifacts.model.fixings.FixRealizingResult; teichmann@5831: import org.dive4elements.river.artifacts.model.fixings.FixEventFacet; teichmann@5831: import org.dive4elements.river.artifacts.model.fixings.FixReferenceEventsFacet; teichmann@5831: import org.dive4elements.river.artifacts.model.fixings.FixWQCurveFacet; teichmann@5831: import org.dive4elements.river.artifacts.model.fixings.FixWaterlevelFacet; teichmann@5831: import org.dive4elements.river.artifacts.resources.Resources; teichmann@5831: import org.dive4elements.river.artifacts.states.DefaultState; ingo@3460: sascha@3413: /** felix@5646: * State to compute the fixation realizing (vollmer) results. felix@5646: * sascha@3413: * @author Raimund Renkert sascha@3413: */ felix@3457: public class FixRealizingCompute extends DefaultState implements FacetTypes { sascha@3413: sascha@3413: /** The logger used in this class. */ felix@3457: private static Logger logger = Logger.getLogger(FixRealizingCompute.class); sascha@3413: ingo@3466: public static final String I18N_WQ_CURVE = "fix.vollmer.wq.curve"; ingo@3466: ingo@3466: public static final String I18N_WQ_OUTLIER = "fix.vollmer.wq.outliers"; ingo@3466: ingo@3466: public static final String I18N_WQ_EVENTS = "fix.vollmer.wq.events"; ingo@3466: ingo@3466: sascha@3413: /** sascha@3413: * The default constructor that initializes an empty State object. sascha@3413: */ sascha@3413: public FixRealizingCompute() { sascha@3413: } sascha@3414: felix@5646: sascha@3414: @Override sascha@3414: public Object computeAdvance( sascha@3414: FLYSArtifact artifact, sascha@3414: String hash, sascha@3414: CallContext context, sascha@3414: List facets, sascha@3414: Object old sascha@3414: ) { felix@3457: logger.debug("FixRealizingCompute.computeAdvance"); sascha@3414: sascha@3414: CalculationResult res; sascha@3414: sascha@3414: FixRealizingAccess access = rrenkert@4866: new FixRealizingAccess(artifact, context); sascha@3414: sascha@3414: if (old instanceof CalculationResult) { felix@5646: res = (CalculationResult) old; sascha@3414: } sascha@3414: else { sascha@3414: FixRealizingCalculation calc = new FixRealizingCalculation(access); sascha@3414: res = calc.calculate(); sascha@3414: } sascha@3414: sascha@3414: if (facets == null) { sascha@3414: return res; sascha@3414: } sascha@3414: sascha@3461: if (res.getReport().hasProblems()) { sascha@3461: facets.add(new ReportFacet()); sascha@3461: } sascha@3461: sascha@3775: String id = getID(); sascha@3775: CallMeta meta = context.getMeta(); sascha@3775: ingo@3460: FixRealizingResult fixRes = (FixRealizingResult) res.getData(); ingo@3460: WQKms [] wqkms = fixRes != null ? fixRes.getWQKms() : new WQKms[0]; ingo@3460: ingo@3460: for (int i = 0; i < wqkms.length; i++) { ingo@3460: String nameW = null; ingo@3460: String nameQ = null; ingo@3460: ingo@3460: if (access.isQ()) { ingo@3460: nameQ = wqkms[i].getName(); ingo@3460: nameW = "W(" + nameQ + ")"; ingo@3460: } ingo@3460: else { ingo@3460: nameW = wqkms[i].getName(); ingo@3460: nameQ = "Q(" + nameW + ")"; ingo@3460: } ingo@3460: sascha@3461: Facet w = new FixWaterlevelFacet( ingo@3460: i, LONGITUDINAL_W, nameW); ingo@3460: sascha@3461: Facet q = new FixWaterlevelFacet( ingo@3460: i, LONGITUDINAL_Q, nameQ); felix@4509: Facet csFacet = new CrossSectionWaterLineFacet(i, nameW); ingo@3460: ingo@3460: facets.add(w); ingo@3460: facets.add(q); felix@4509: facets.add(csFacet); ingo@3460: ingo@3460: if (wqkms[i] instanceof WQCKms) { ingo@3460: String nameC = nameW.replace( ingo@3460: "benutzerdefiniert", ingo@3460: "benutzerdefiniert [korrigiert]"); ingo@3460: sascha@3461: Facet c = new FixWaterlevelFacet( ingo@3460: i, DISCHARGE_LONGITUDINAL_C, nameC); ingo@3460: ingo@3460: facets.add(c); ingo@3460: } sascha@3414: } sascha@3414: felix@5730: // Add one facet per event. felix@5730: int i = 0; felix@5730: for (int event: access.getEvents()) { felix@5730: facets.add(new FixEventFacet(i, FIX_EVENTS, WQKmsFactory.getWQKmsName(event))); felix@5730: i++; felix@5730: } felix@5730: ingo@3460: if (wqkms.length > 0) { ingo@3466: facets.add( ingo@3466: new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id)); ingo@3466: ingo@3466: facets.add( ingo@3466: new DataFacet(WST, "WST data", ComputeType.ADVANCE, hash, id)); ingo@3466: ingo@3466: facets.add( ingo@3466: new DataFacet(PDF, "PDF data", ComputeType.ADVANCE, hash, id)); ingo@3460: } felix@3459: rrenkert@5055: facets.add( rrenkert@5055: new DataFacet(AT, "AT data", ComputeType.ADVANCE, hash, id)); rrenkert@5055: ingo@3466: facets.add(new FixWQCurveFacet( felix@5702: 0, felix@5702: Resources.getMsg(meta, I18N_WQ_CURVE, I18N_WQ_CURVE) + " (" felix@5702: + access.getFunction() + ")")); ingo@3466: ingo@3466: facets.add(new FixReferenceEventsFacet( ingo@3466: 0, ingo@3466: FIX_REFERENCE_EVENTS_WQ, ingo@3466: Resources.getMsg(meta, I18N_WQ_EVENTS, I18N_WQ_EVENTS))); ingo@3466: felix@5849: felix@5849: if (access.getPreprocessing()) { felix@5849: facets.add(new FixOutlierFacet( felix@5849: 0, felix@5849: FIX_OUTLIER, felix@5849: Resources.getMsg(meta, I18N_WQ_OUTLIER, I18N_WQ_OUTLIER))); felix@5849: } ingo@3466: sascha@3414: return res; sascha@3414: } sascha@3413: } sascha@3413: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :