teichmann@5831: package org.dive4elements.river.artifacts.states.minfo; rrenkert@4220: rrenkert@4372: import java.util.ArrayList; rrenkert@4372: import java.util.List; rrenkert@4372: rrenkert@4372: import org.apache.log4j.Logger; rrenkert@4372: 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.SedimentLoadAccess; teichmann@5831: import org.dive4elements.river.artifacts.model.CalculationResult; 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.minfo.SedimentLoadCalculation; teichmann@5831: import org.dive4elements.river.artifacts.model.minfo.SedimentLoadFacet; teichmann@5831: import org.dive4elements.river.artifacts.model.minfo.SedimentLoadResult; teichmann@5831: import org.dive4elements.river.artifacts.resources.Resources; teichmann@5831: import org.dive4elements.river.artifacts.states.DefaultState; rrenkert@4220: rrenkert@4220: rrenkert@4220: public class SedimentLoadCalculate rrenkert@4220: extends DefaultState teichmann@4736: implements FacetTypes rrenkert@4220: { rrenkert@4220: rrenkert@4372: private static final long serialVersionUID = 1L; rrenkert@4372: rrenkert@4372: private static final Logger logger = Logger rrenkert@4372: .getLogger(SedimentLoadCalculate.class); rrenkert@4372: rrenkert@4372: public static final String I18N_FACET_SEDIMENTLOAD_COARSE = "facet.sedimentload.coarse"; rrenkert@4372: public static final String I18N_FACET_SEDIMENTLOAD_SAND = "facet.sedimentload.sand"; rrenkert@4372: public static final String I18N_FACET_SEDIMENTLOAD_FINE_MIDDLE = "facet.sedimentload.fine_middle"; rrenkert@4372: public static final String I18N_FACET_SEDIMENTLOAD_SUSPSAND = "facet.sedimentload.susp_sand"; rrenkert@4372: public static final String I18N_FACET_SEDIMENTLOAD_SUSPSANDBED = "facet.sediemntload.susp_sand_bed"; rrenkert@4372: public static final String I18N_FACET_SEDIMENTLOAD_SUSPSEDIMENT = "facet.sedimentload.susp_sediment"; rrenkert@4546: public static final String I18N_FACET_SEDIMENTLOAD_TOTAL_LOAD = "facet.sedimentload.total_load"; rrenkert@4372: public static final String I18N_FACET_SEDIMENTLOAD_TOTAL = "facet.sedimentload.total"; rrenkert@4372: rrenkert@4372: @Override rrenkert@4372: public Object computeAdvance(FLYSArtifact artifact, String hash, rrenkert@4372: CallContext context, List facets, Object old) { rrenkert@4372: logger.debug("SedimentLoadCalculate.computeAdvance"); rrenkert@4372: rrenkert@4372: List newFacets = new ArrayList(); rrenkert@4372: felix@4826: SedimentLoadAccess access = new SedimentLoadAccess(artifact, context); rrenkert@4372: rrenkert@4372: CalculationResult res = old instanceof CalculationResult ? (CalculationResult) old rrenkert@4372: : new SedimentLoadCalculation().calculate(access); rrenkert@4372: rrenkert@4372: if (facets == null || res == null) { rrenkert@4372: return res; rrenkert@4372: } rrenkert@4372: rrenkert@4372: SedimentLoadResult[] results = (SedimentLoadResult[]) res.getData(); rrenkert@4372: rrenkert@4372: if (results == null || results.length == 0) { rrenkert@4372: logger.warn("Calculation computed no results!"); rrenkert@4372: return res; rrenkert@4372: } rrenkert@4372: rrenkert@4372: String type = access.getYearEpoch(); rrenkert@4372: if (type.equals("year")) { rrenkert@4372: generateYearFacets(context, newFacets, results, getID(), hash); rrenkert@4372: } rrenkert@4372: else if (type.equals("epoch")) { rrenkert@4372: generateEpochFacets(context, newFacets, results, getID(), hash); rrenkert@4372: } rrenkert@4372: else if (type.equals("off_epoch")) { rrenkert@4372: generateOffEpochFacets(context, newFacets, results, getID(), hash); rrenkert@4372: } rrenkert@4372: logger.debug("Created " + newFacets.size() + " new Facets."); rrenkert@4519: if (res.getReport().hasProblems()) { rrenkert@4519: newFacets.add(new ReportFacet(ComputeType.ADVANCE, hash, id)); rrenkert@4519: } rrenkert@4372: facets.addAll(newFacets); rrenkert@4372: rrenkert@4372: return res; rrenkert@4372: } rrenkert@4372: rrenkert@4372: protected void generateYearFacets(CallContext context, List newFacets, rrenkert@4372: SedimentLoadResult[] results, String stateId, String hash) { rrenkert@4372: logger.debug("SedimentLoadCalculate.generateFacets"); rrenkert@4372: rrenkert@4372: CallMeta meta = context.getMeta(); rrenkert@4372: rrenkert@4372: // newFacets.add(new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id)); rrenkert@4372: for (int idx = 0; idx < results.length; idx++) { rrenkert@4372: SedimentLoadResult res = results[idx]; rrenkert@4372: if (res.hasCoarseData()) { rrenkert@4372: newFacets.add(new SedimentLoadFacet( rrenkert@4372: idx, rrenkert@4372: SEDIMENT_LOAD_COARSE, rrenkert@4372: Resources.getMsg( rrenkert@4372: meta, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_COARSE, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_COARSE) + rrenkert@4372: " - " + res.getStartYear(), rrenkert@4372: ComputeType.ADVANCE, rrenkert@4372: stateId, rrenkert@4372: hash)); rrenkert@4372: } rrenkert@4372: if (res.hasSandData()) { rrenkert@4372: newFacets.add(new SedimentLoadFacet( rrenkert@4372: idx, rrenkert@4372: SEDIMENT_LOAD_SAND, rrenkert@4372: Resources.getMsg( rrenkert@4372: meta, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_SAND, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_SAND) + rrenkert@4372: " - " + res.getStartYear(), rrenkert@4372: ComputeType.ADVANCE, rrenkert@4372: stateId, rrenkert@4372: hash)); rrenkert@4372: } rrenkert@4372: if (res.hasFineMiddleData()) { rrenkert@4372: newFacets.add(new SedimentLoadFacet( rrenkert@4372: idx, rrenkert@4372: SEDIMENT_LOAD_FINEMIDDLE, rrenkert@4372: Resources.getMsg( rrenkert@4372: meta, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_FINE_MIDDLE, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_FINE_MIDDLE) + rrenkert@4372: " - " + res.getStartYear(), rrenkert@4372: ComputeType.ADVANCE, rrenkert@4372: stateId, rrenkert@4372: hash)); rrenkert@4372: } rrenkert@4372: if (res.hasSuspSandData()) { rrenkert@4372: newFacets.add(new SedimentLoadFacet( rrenkert@4372: idx, rrenkert@4372: SEDIMENT_LOAD_SUSP_SAND, rrenkert@4372: Resources.getMsg( rrenkert@4372: meta, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_SUSPSAND, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_SUSPSAND) rrenkert@4372: + " - " + res.getStartYear(), rrenkert@4372: ComputeType.ADVANCE, rrenkert@4372: stateId, rrenkert@4372: hash)); rrenkert@4372: } rrenkert@4372: if (res.hasSuspSandBedData()) { rrenkert@4372: newFacets.add(new SedimentLoadFacet( rrenkert@4372: idx, rrenkert@4372: SEDIMENT_LOAD_SUSP_SAND_BED, rrenkert@4372: Resources.getMsg( rrenkert@4372: meta, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_SUSPSANDBED, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_SUSPSANDBED) + rrenkert@4372: " - " + res.getStartYear(), rrenkert@4372: ComputeType.ADVANCE, rrenkert@4372: stateId, rrenkert@4372: hash)); rrenkert@4372: } rrenkert@4372: if (res.hasSuspSedimentData()) { rrenkert@4372: newFacets.add(new SedimentLoadFacet( rrenkert@4372: idx, rrenkert@4372: SEDIMENT_LOAD_SUSP_SEDIMENT, rrenkert@4372: Resources.getMsg( rrenkert@4372: meta, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_SUSPSEDIMENT, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_SUSPSEDIMENT) + rrenkert@4372: " - " + res.getStartYear(), rrenkert@4372: ComputeType.ADVANCE, rrenkert@4372: stateId, rrenkert@4372: hash)); rrenkert@4372: rrenkert@4372: } rrenkert@4372: if (res.hasTotalData()) { rrenkert@4372: newFacets.add(new SedimentLoadFacet( rrenkert@4372: idx, rrenkert@4372: SEDIMENT_LOAD_TOTAL, rrenkert@4372: Resources.getMsg( rrenkert@4372: meta, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_TOTAL, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_TOTAL) + rrenkert@4372: " - " + res.getStartYear(), rrenkert@4372: ComputeType.ADVANCE, rrenkert@4372: stateId, rrenkert@4372: hash)); rrenkert@4372: } rrenkert@4372: } rrenkert@4372: } rrenkert@4372: rrenkert@4372: protected void generateEpochFacets( rrenkert@4372: CallContext context, rrenkert@4372: List newFacets, rrenkert@4372: SedimentLoadResult[] results, rrenkert@4372: String stateId, rrenkert@4372: String hash rrenkert@4372: ) { rrenkert@4372: logger.debug("SedimentLoadCalculate.generateEpochFacets"); rrenkert@4372: rrenkert@4372: CallMeta meta = context.getMeta(); rrenkert@4372: rrenkert@4372: // newFacets.add(new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id)); rrenkert@4372: for (int idx = 0; idx < results.length; idx++) { rrenkert@4372: SedimentLoadResult res = results[idx]; rrenkert@4372: if (res.hasCoarseData()) { rrenkert@4372: newFacets.add(new SedimentLoadFacet( rrenkert@4372: idx, rrenkert@4372: SEDIMENT_LOAD_COARSE, rrenkert@4372: Resources.getMsg( rrenkert@4372: meta, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_COARSE, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_COARSE) + rrenkert@4372: " - " + res.getStartYear() + "-" + res.getEndYear(), rrenkert@4372: ComputeType.ADVANCE, rrenkert@4372: stateId, rrenkert@4372: hash)); rrenkert@4372: } rrenkert@4372: if (res.hasSandData()) { rrenkert@4372: newFacets.add(new SedimentLoadFacet( rrenkert@4372: idx, rrenkert@4372: SEDIMENT_LOAD_SAND, rrenkert@4372: Resources.getMsg( rrenkert@4372: meta, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_SAND, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_SAND) + rrenkert@4372: " - " + res.getStartYear() + "-" + res.getEndYear(), rrenkert@4372: ComputeType.ADVANCE, rrenkert@4372: stateId, rrenkert@4372: hash)); rrenkert@4372: } rrenkert@4372: if (res.hasFineMiddleData()) { rrenkert@4372: newFacets.add(new SedimentLoadFacet( rrenkert@4372: idx, rrenkert@4372: SEDIMENT_LOAD_FINEMIDDLE, rrenkert@4372: Resources.getMsg( rrenkert@4372: meta, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_FINE_MIDDLE, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_FINE_MIDDLE) + rrenkert@4372: " - " + res.getStartYear(), rrenkert@4372: ComputeType.ADVANCE, rrenkert@4372: stateId, rrenkert@4372: hash)); rrenkert@4372: } rrenkert@4372: if (res.hasSuspSandData()) { rrenkert@4372: newFacets.add(new SedimentLoadFacet( rrenkert@4372: idx, rrenkert@4372: SEDIMENT_LOAD_SUSP_SAND, rrenkert@4372: Resources.getMsg( rrenkert@4372: meta, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_SUSPSAND, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_SUSPSAND) rrenkert@4372: + " - " + res.getStartYear() + "-" + res.getEndYear(), rrenkert@4372: ComputeType.ADVANCE, rrenkert@4372: stateId, rrenkert@4372: hash)); rrenkert@4372: } rrenkert@4372: if (res.hasSuspSandBedData()) { rrenkert@4372: newFacets.add(new SedimentLoadFacet( rrenkert@4372: idx, rrenkert@4372: SEDIMENT_LOAD_SUSP_SAND_BED, rrenkert@4372: Resources.getMsg( rrenkert@4372: meta, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_SUSPSANDBED, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_SUSPSANDBED) + rrenkert@4372: " - " + res.getStartYear() + "-" + res.getEndYear(), rrenkert@4372: ComputeType.ADVANCE, rrenkert@4372: stateId, rrenkert@4372: hash)); rrenkert@4372: } rrenkert@4372: if (res.hasSuspSedimentData()) { rrenkert@4372: newFacets.add(new SedimentLoadFacet( rrenkert@4372: idx, rrenkert@4372: SEDIMENT_LOAD_SUSP_SEDIMENT, rrenkert@4372: Resources.getMsg( rrenkert@4372: meta, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_SUSPSEDIMENT, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_SUSPSEDIMENT) + rrenkert@4372: " - " + res.getStartYear() + "-" + res.getEndYear(), rrenkert@4372: ComputeType.ADVANCE, rrenkert@4372: stateId, rrenkert@4372: hash)); rrenkert@4372: rrenkert@4372: } rrenkert@4546: if (res.hasTotalLoadData()) { rrenkert@4546: newFacets.add(new SedimentLoadFacet( rrenkert@4546: idx, rrenkert@4546: SEDIMENT_LOAD_TOTAL_LOAD, rrenkert@4546: Resources.getMsg( rrenkert@4546: meta, rrenkert@4546: I18N_FACET_SEDIMENTLOAD_TOTAL_LOAD, rrenkert@4546: I18N_FACET_SEDIMENTLOAD_TOTAL_LOAD) + rrenkert@4546: " - " + res.getStartYear() + "-" + res.getEndYear(), rrenkert@4546: ComputeType.ADVANCE, rrenkert@4546: stateId, rrenkert@4546: hash)); rrenkert@4546: } rrenkert@4372: if (res.hasTotalData()) { rrenkert@4372: newFacets.add(new SedimentLoadFacet( rrenkert@4372: idx, rrenkert@4372: SEDIMENT_LOAD_TOTAL, rrenkert@4372: Resources.getMsg( rrenkert@4372: meta, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_TOTAL, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_TOTAL) + rrenkert@4372: " - " + res.getStartYear() + "-" + res.getEndYear(), rrenkert@4372: ComputeType.ADVANCE, rrenkert@4372: stateId, rrenkert@4372: hash)); rrenkert@4372: } rrenkert@4372: } rrenkert@4372: } rrenkert@4372: rrenkert@4372: protected void generateOffEpochFacets( rrenkert@4372: CallContext context, rrenkert@4372: List newFacets, rrenkert@4372: SedimentLoadResult[] results, rrenkert@4372: String stateId, rrenkert@4372: String hash rrenkert@4372: ) { rrenkert@4372: logger.debug("SedimentLoadCalculate.generateOffEpochFacets"); rrenkert@4372: rrenkert@4372: CallMeta meta = context.getMeta(); rrenkert@4372: rrenkert@4372: // newFacets.add(new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id)); rrenkert@4372: for (int idx = 0; idx < results.length; idx++) { rrenkert@4372: SedimentLoadResult res = results[idx]; rrenkert@4372: if (res.hasCoarseData()) { rrenkert@4372: newFacets.add(new SedimentLoadFacet( rrenkert@4372: idx, rrenkert@4372: SEDIMENT_LOAD_COARSE, rrenkert@4372: Resources.getMsg( rrenkert@4372: meta, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_COARSE, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_COARSE) + rrenkert@4372: " - " + res.getStartYear() + "-" + res.getEndYear(), rrenkert@4372: ComputeType.ADVANCE, rrenkert@4372: stateId, rrenkert@4372: hash)); rrenkert@4372: } rrenkert@4372: if (res.hasSandData()) { rrenkert@4372: newFacets.add(new SedimentLoadFacet( rrenkert@4372: idx, rrenkert@4372: SEDIMENT_LOAD_SAND, rrenkert@4372: Resources.getMsg( rrenkert@4372: meta, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_SAND, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_SAND) + rrenkert@4372: " - " + res.getStartYear() + "-" + res.getEndYear(), rrenkert@4372: ComputeType.ADVANCE, rrenkert@4372: stateId, rrenkert@4372: hash)); rrenkert@4372: } rrenkert@4372: if (res.hasFineMiddleData()) { rrenkert@4372: newFacets.add(new SedimentLoadFacet( rrenkert@4372: idx, rrenkert@4372: SEDIMENT_LOAD_FINEMIDDLE, rrenkert@4372: Resources.getMsg( rrenkert@4372: meta, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_FINE_MIDDLE, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_FINE_MIDDLE) + rrenkert@4372: " - " + res.getStartYear() + "-" + res.getEndYear(), rrenkert@4372: ComputeType.ADVANCE, rrenkert@4372: stateId, rrenkert@4372: hash)); rrenkert@4372: } rrenkert@4372: if (res.hasSuspSandData()) { rrenkert@4372: newFacets.add(new SedimentLoadFacet( rrenkert@4372: idx, rrenkert@4372: SEDIMENT_LOAD_SUSP_SAND, rrenkert@4372: Resources.getMsg( rrenkert@4372: meta, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_SUSPSAND, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_SUSPSAND) + rrenkert@4372: " - " + res.getStartYear() + "-" + res.getEndYear(), rrenkert@4372: ComputeType.ADVANCE, rrenkert@4372: stateId, rrenkert@4372: hash)); rrenkert@4372: } rrenkert@4372: if (res.hasSuspSandBedData()) { rrenkert@4372: newFacets.add(new SedimentLoadFacet( rrenkert@4372: idx, rrenkert@4372: SEDIMENT_LOAD_SUSP_SAND_BED, rrenkert@4372: Resources.getMsg( rrenkert@4372: meta, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_SUSPSANDBED, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_SUSPSANDBED) + rrenkert@4372: " - " + res.getStartYear() + "-" + res.getEndYear(), rrenkert@4372: ComputeType.ADVANCE, rrenkert@4372: stateId, rrenkert@4372: hash)); rrenkert@4372: } rrenkert@4372: if (res.hasSuspSedimentData()) { rrenkert@4372: newFacets.add(new SedimentLoadFacet( rrenkert@4372: idx, rrenkert@4372: SEDIMENT_LOAD_SUSP_SEDIMENT, rrenkert@4372: Resources.getMsg( rrenkert@4372: meta, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_SUSPSEDIMENT, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_SUSPSEDIMENT) + rrenkert@4372: " - " + res.getStartYear() + "-" + res.getEndYear(), rrenkert@4372: ComputeType.ADVANCE, rrenkert@4372: stateId, rrenkert@4372: hash)); rrenkert@4372: rrenkert@4372: } rrenkert@4546: if (res.hasTotalLoadData()) { rrenkert@4546: newFacets.add(new SedimentLoadFacet( rrenkert@4546: idx, rrenkert@4546: SEDIMENT_LOAD_TOTAL_LOAD, rrenkert@4546: Resources.getMsg( rrenkert@4546: meta, rrenkert@4546: I18N_FACET_SEDIMENTLOAD_TOTAL_LOAD, rrenkert@4546: I18N_FACET_SEDIMENTLOAD_TOTAL_LOAD) + rrenkert@4546: " - " + res.getStartYear() + "-" + res.getEndYear(), rrenkert@4546: ComputeType.ADVANCE, rrenkert@4546: stateId, rrenkert@4546: hash)); rrenkert@4546: } rrenkert@4372: if (res.hasTotalData()) { rrenkert@4372: newFacets.add(new SedimentLoadFacet( rrenkert@4372: idx, rrenkert@4372: SEDIMENT_LOAD_TOTAL, rrenkert@4372: Resources.getMsg( rrenkert@4372: meta, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_TOTAL, rrenkert@4372: I18N_FACET_SEDIMENTLOAD_TOTAL) + rrenkert@4372: " - " + res.getStartYear() + "-" + res.getEndYear(), rrenkert@4372: ComputeType.ADVANCE, rrenkert@4372: stateId, rrenkert@4372: hash)); rrenkert@4372: } rrenkert@4372: } rrenkert@4372: } rrenkert@4220: }