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.fixation; sascha@3413: teichmann@7525: import java.text.DateFormat; teichmann@7525: import java.util.Collection; teichmann@7525: import java.util.Date; ingo@3466: import java.util.List; ingo@3466: ingo@3466: import org.apache.log4j.Logger; teichmann@5831: import org.dive4elements.artifactdatabase.state.Facet; teichmann@5831: import org.dive4elements.artifacts.CallContext; teichmann@5831: import org.dive4elements.artifacts.CallMeta; teichmann@5867: import org.dive4elements.river.artifacts.D4EArtifact; 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.fixings.FixRealizingCalculation; teichmann@5831: import org.dive4elements.river.artifacts.model.fixings.FixRealizingResult; teichmann@7525: 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; teichmann@7525: import org.dive4elements.river.utils.Formatter; teichmann@7525: import org.dive4elements.river.utils.UniqueDateFormatter; 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: teichmann@8202: /** The log used in this class. */ teichmann@8202: private static Logger log = Logger.getLogger(FixRealizingCompute.class); sascha@3413: ingo@3466: public static final String I18N_WQ_CURVE = "fix.vollmer.wq.curve"; 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: sascha@3414: @Override gernotbelger@9082: public Object computeAdvance(final D4EArtifact artifact, final String hash, final CallContext context, final List facets, final Object old) { teichmann@8202: log.debug("FixRealizingCompute.computeAdvance"); sascha@3414: sascha@3414: CalculationResult res; sascha@3414: gernotbelger@9082: final FixRealizingAccess access = new FixRealizingAccess(artifact); sascha@3414: sascha@3414: if (old instanceof CalculationResult) { felix@5646: res = (CalculationResult) old; gernotbelger@9082: } else { gernotbelger@9082: final 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: gernotbelger@9082: final String id = getID(); gernotbelger@9082: final CallMeta meta = context.getMeta(); sascha@3775: gernotbelger@9082: final FixRealizingResult fixRes = (FixRealizingResult) res.getData(); gernotbelger@9082: final 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 + ")"; gernotbelger@9082: } else { ingo@3460: nameW = wqkms[i].getName(); ingo@3460: nameQ = "Q(" + nameW + ")"; ingo@3460: } ingo@3460: gernotbelger@9360: facets.add(new FixWaterlevelFacet(i, FIX_WQ_LS, nameW, ComputeType.ADVANCE, hash, id)); gernotbelger@9360: facets.add(new FixWaterlevelFacet(i, LONGITUDINAL_W, nameW, ComputeType.ADVANCE, hash, id)); gernotbelger@9360: facets.add(new FixWaterlevelFacet(i, LONGITUDINAL_Q, nameQ, ComputeType.ADVANCE, hash, id)); gernotbelger@9360: facets.add(new CrossSectionWaterLineFacet(i, nameW)); ingo@3460: teichmann@7525: // XXX: THIS CAN NOT HAPPEN! REMOVE IT! ingo@3460: if (wqkms[i] instanceof WQCKms) { gernotbelger@9082: final String nameC = nameW.replace("benutzerdefiniert", "benutzerdefiniert [korrigiert]"); gernotbelger@9360: facets.add(new FixWaterlevelFacet(i, DISCHARGE_LONGITUDINAL_C, nameC)); ingo@3460: } sascha@3414: } sascha@3414: gernotbelger@9360: if (fixRes != null && wqkms.length > 0) { gernotbelger@9082: final DateFormat df = Formatter.getDateFormatter(context.getMeta(), "dd.MM.yyyy"); gernotbelger@9082: final DateFormat lf = Formatter.getDateFormatter(context.getMeta(), "dd.MM.yyyy'T'HH:mm"); teichmann@7525: gernotbelger@9082: final Collection reds = fixRes.getReferenceEventsDates(); gernotbelger@9082: final UniqueDateFormatter cf = new UniqueDateFormatter(df, lf, reds); felix@5730: tom@8703: int i = 0; gernotbelger@9082: for (final Date d : reds) { gernotbelger@9082: facets.add(new FixReferenceEventsFacet((1 << 9) | i, FIX_EVENTS, cf.format(d))); tom@8703: i++; tom@8703: } tom@8703: gernotbelger@9082: facets.add(new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id)); ingo@3466: gernotbelger@9082: facets.add(new DataFacet(WST, "WST data", ComputeType.ADVANCE, hash, id)); ingo@3466: gernotbelger@9082: facets.add(new DataFacet(PDF, "PDF data", ComputeType.ADVANCE, hash, id)); ingo@3460: } felix@3459: gernotbelger@9082: facets.add(new DataFacet(AT, "AT data", ComputeType.ADVANCE, hash, id)); rrenkert@5055: gernotbelger@9342: if (fixRes != null) gernotbelger@9342: facets.add(new FixWQCurveFacet(0, Resources.getMsg(meta, I18N_WQ_CURVE, I18N_WQ_CURVE) + " (" + access.getFunction() + ")")); ingo@3466: sascha@3414: return res; sascha@3414: } gernotbelger@9342: }