Mercurial > dive4elements > river
view artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/DifferencesState.java @ 6710:ffc9cb39cea7
Remove duplicate code for mapfile generation. ID problem still not fixed (#657).
author | Christian Lins <christian.lins@intevation.de> |
---|---|
date | Tue, 30 Jul 2013 16:09:40 +0200 |
parents | 1994d064ebb1 |
children | 7b81b3c3c0fa |
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde * Software engineering by Intevation GmbH * * This file is Free Software under the GNU AGPL (>=v3) * and comes with ABSOLUTELY NO WARRANTY! Check out the * documentation coming with Dive4Elements River for details. */ package org.dive4elements.river.artifacts.states.minfo; import java.text.DateFormat; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.dive4elements.artifactdatabase.state.Facet; import org.dive4elements.artifactdatabase.state.FacetActivity; import org.dive4elements.artifacts.Artifact; import org.dive4elements.artifacts.CallContext; import org.dive4elements.artifacts.CallMeta; import org.dive4elements.river.artifacts.D4EArtifact; import org.dive4elements.river.artifacts.access.BedDifferencesAccess; import org.dive4elements.river.artifacts.model.CalculationResult; import org.dive4elements.river.artifacts.model.DataFacet; import org.dive4elements.river.artifacts.model.FacetTypes; import org.dive4elements.river.artifacts.model.minfo.BedDiffCalculation; import org.dive4elements.river.artifacts.model.minfo.BedDiffEpochFacet; import org.dive4elements.river.artifacts.model.minfo.BedDiffEpochFilterFacet; import org.dive4elements.river.artifacts.model.minfo.BedDiffEpochResult; import org.dive4elements.river.artifacts.model.minfo.BedDiffYearFacet; import org.dive4elements.river.artifacts.model.minfo.BedDiffYearFilterFacet; import org.dive4elements.river.artifacts.model.minfo.BedDiffYearResult; import org.dive4elements.river.artifacts.model.minfo.BedDifferencesResult; import org.dive4elements.river.artifacts.resources.Resources; import org.dive4elements.river.artifacts.states.DefaultState; import org.dive4elements.river.utils.Formatter; /** * State for BedDifferences. * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a> */ public class DifferencesState extends DefaultState implements FacetTypes { /** The logger used in this class. */ private static Logger logger = Logger.getLogger(DifferencesState.class); public static final String I18N_DIFF_YEAR = "beddifference.year"; public static final String I18N_DIFF_EPOCH = "beddifference.epoch"; public static final String I18N_FACET_BED_DIFF_YEAR = "facet.bedheight.diff.year"; public static final String I18N_FACET_BED_DIFF_YEAR_RAW = "facet.bedheight.diff.year.raw"; public static final String I18N_FACET_BED_DIFF_ABSOLUTE = "facet.bedheight.diff.absolute"; public static final String I18N_FACET_BED_DIFF_ABSOLUTE_RAW = "facet.bedheight.diff.absolute.raw"; public static final String I18N_FACET_BED_DIFF_MORPH = "facet.bedheight.diff.morph"; public static final String I18N_FACET_BED_DIFF_EPOCH = "facet.bedheight.diff.epoch"; public static final String I18N_FACET_BED_DIFF_EPOCH_RAW = "facet.bedheight.diff.epoch.raw"; public static final String I18N_FACET_BED_DIFF_HEIGHT1 = "facet.bedheight.diff.height1"; public static final String I18N_FACET_BED_DIFF_HEIGHT1_RAW = "facet.bedheight.diff.height1.raw"; public static final String I18N_FACET_BED_DIFF_HEIGHT2 = "facet.bedheight.diff.height2"; public static final String I18N_FACET_BED_DIFF_HEIGHT2_RAW = "facet.bedheight.diff.height2.raw"; public static final String I18N_FACET_BED_DIFF_HEIGHT_RAW = "facet.bedheight.diff.height.raw"; public DifferencesState() { } @Override public Object computeAdvance(D4EArtifact artifact, String hash, CallContext context, List<Facet> facets, Object old) { logger.debug("DifferencesState.computeAdvance"); List<Facet> newFacets = new ArrayList<Facet>(); BedDifferencesAccess access = new BedDifferencesAccess(artifact); CalculationResult res = old instanceof CalculationResult ? (CalculationResult)old : new BedDiffCalculation().calculate(access, context); if (facets == null || res == null) { return res; } BedDifferencesResult[] results = (BedDifferencesResult[]) res.getData(); if (results == null || results.length == 0) { logger.warn("Calculation computed no results!"); return res; } generateFacets(context, newFacets, results, getID(), hash); logger.debug("Created " + newFacets.size() + " new Facets."); facets.addAll(newFacets); return res; } protected void generateFacets(CallContext context, List<Facet> newFacets, BedDifferencesResult[] results, String stateId, String hash) { logger.debug("DifferencesState.generateFacets"); CallMeta meta = context.getMeta(); newFacets.add(new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id)); newFacets.add(new DataFacet(PDF, "PDF data", ComputeType.ADVANCE, hash, id)); for (int idx = 0; idx < results.length; idx++) { if (results[idx] instanceof BedDiffYearResult) { newFacets.add(new BedDiffYearFacet( idx, BED_DIFFERENCE_YEAR, createBedDiffYearDescription( meta, (BedDiffYearResult)results[idx], true), ComputeType.ADVANCE, stateId, hash)); newFacets.add(new BedDiffYearFacet( idx, BED_DIFFERENCE_MORPH_WIDTH, createBedDiffMorphDescription( meta, (BedDiffYearResult)results[idx]), ComputeType.ADVANCE, stateId, hash)); newFacets.add(new BedDiffYearFacet( idx, BED_DIFFERENCE_YEAR_HEIGHT1, createBedDiffHeightDescription( meta, (BedDiffYearResult)results[idx], 0, true), ComputeType.ADVANCE, stateId, hash)); newFacets.add(new BedDiffYearFacet( idx, BED_DIFFERENCE_YEAR_HEIGHT2, createBedDiffHeightDescription( meta, (BedDiffYearResult)results[idx], 1, true), ComputeType.ADVANCE, stateId, hash)); newFacets.add(new BedDiffYearFacet( idx, BED_DIFFERENCE_HEIGHT_YEAR, createBedDiffAbsoluteDescription( meta, (BedDiffYearResult)results[idx], true), ComputeType.ADVANCE, stateId, hash)); newFacets.add(new BedDiffYearFilterFacet( idx, BED_DIFFERENCE_YEAR_FILTERED, createBedDiffYearDescription( meta, (BedDiffYearResult)results[idx], false), ComputeType.ADVANCE, stateId, hash)); newFacets.add(new BedDiffYearFilterFacet( idx, BED_DIFFERENCE_YEAR_HEIGHT1_FILTERED, createBedDiffHeightDescription( meta, (BedDiffYearResult)results[idx], 0, false), ComputeType.ADVANCE, stateId, hash)); newFacets.add(new BedDiffYearFilterFacet( idx, BED_DIFFERENCE_YEAR_HEIGHT2_FILTERED, createBedDiffHeightDescription( meta, (BedDiffYearResult)results[idx], 1, false), ComputeType.ADVANCE, stateId, hash)); newFacets.add(new BedDiffYearFilterFacet( idx, BED_DIFFERENCE_HEIGHT_YEAR_FILTERED, createBedDiffAbsoluteDescription( meta, (BedDiffYearResult)results[idx], false), ComputeType.ADVANCE, stateId, hash)); } if (results[idx] instanceof BedDiffEpochResult) { newFacets.add(new BedDiffEpochFacet( idx, BED_DIFFERENCE_EPOCH, createBedDiffEpochDescription( meta, (BedDiffEpochResult)results[idx], true), ComputeType.ADVANCE, stateId, hash)); newFacets.add(new BedDiffEpochFacet( idx, BED_DIFFERENCE_EPOCH_HEIGHT1, createBedDiffHeightEpochDescription( meta, (BedDiffEpochResult)results[idx], 0, true), ComputeType.ADVANCE, stateId, hash)); newFacets.add(new BedDiffEpochFacet( idx, BED_DIFFERENCE_EPOCH_HEIGHT2, createBedDiffHeightEpochDescription( meta, (BedDiffEpochResult)results[idx], 1, true), ComputeType.ADVANCE, stateId, hash)); newFacets.add(new BedDiffEpochFilterFacet( idx, BED_DIFFERENCE_EPOCH_FILTERED, createBedDiffEpochDescription( meta, (BedDiffEpochResult)results[idx], false), ComputeType.ADVANCE, stateId, hash)); newFacets.add(new BedDiffEpochFilterFacet( idx, BED_DIFFERENCE_EPOCH_HEIGHT1_FILTERED, createBedDiffHeightEpochDescription( meta, (BedDiffEpochResult)results[idx], 0, false), ComputeType.ADVANCE, stateId, hash)); newFacets.add(new BedDiffEpochFilterFacet( idx, BED_DIFFERENCE_EPOCH_HEIGHT2_FILTERED, createBedDiffHeightEpochDescription( meta, (BedDiffEpochResult)results[idx], 1, false), ComputeType.ADVANCE, stateId, hash)); } } } private String createBedDiffHeightDescription( CallMeta meta, BedDiffYearResult result, int ndx, boolean raw ) { if (raw && ndx == 0) { return Resources.getMsg(meta, I18N_FACET_BED_DIFF_HEIGHT_RAW, I18N_FACET_BED_DIFF_HEIGHT_RAW, new Object[] {result.getNameFirst()}); } if (raw && ndx == 1) { return Resources.getMsg(meta, I18N_FACET_BED_DIFF_HEIGHT_RAW, I18N_FACET_BED_DIFF_HEIGHT_RAW, new Object[] {result.getNameSecond()}); } if (ndx == 0) { return result.getNameFirst(); } else { return result.getNameSecond(); } } private String createBedDiffHeightEpochDescription( CallMeta meta, BedDiffEpochResult result, int ndx, boolean raw ) { DateFormat df = Formatter.getDateFormatter(meta, "yyyy"); String range = df.format(result.getStart()) + " - " + df.format(result.getEnd()); String i18nHeight1 = I18N_FACET_BED_DIFF_HEIGHT1; String i18nHeight2 = I18N_FACET_BED_DIFF_HEIGHT2; if (raw) { i18nHeight1 = I18N_FACET_BED_DIFF_HEIGHT1_RAW; i18nHeight2 = I18N_FACET_BED_DIFF_HEIGHT2_RAW; } if (ndx == 0) { return Resources.getMsg(meta, i18nHeight1, i18nHeight1, new Object[] { range }); } else { return Resources.getMsg(meta, i18nHeight2, i18nHeight2, new Object[] {range}); } } protected String createBedDiffYearDescription( CallMeta meta, BedDiffYearResult result, boolean raw ) { String range = result.getStart() + " - " + result.getEnd(); String i18n = I18N_FACET_BED_DIFF_YEAR; if (raw) { i18n = I18N_FACET_BED_DIFF_YEAR_RAW; } return Resources.getMsg(meta, i18n, i18n, new Object[] { range }); } protected String createBedDiffMorphDescription( CallMeta meta, BedDiffYearResult result) { String range = result.getStart() + " - " + result.getEnd(); return Resources.getMsg(meta, I18N_FACET_BED_DIFF_MORPH, I18N_FACET_BED_DIFF_MORPH, new Object[] { range }); } protected String createBedDiffAbsoluteDescription( CallMeta meta, BedDiffYearResult result, boolean raw ) { String range = result.getStart() + " - " + result.getEnd(); String i18n = I18N_FACET_BED_DIFF_ABSOLUTE; if (raw) { i18n = I18N_FACET_BED_DIFF_ABSOLUTE_RAW; } return Resources.getMsg(meta, i18n, i18n, new Object[] { range }); } protected String createBedDiffEpochDescription( CallMeta meta, BedDiffEpochResult result, boolean raw) { DateFormat df = Formatter.getDateFormatter(meta, "yyyy"); String range = df.format(result.getStart()) + " - " + df.format(result.getEnd()); String i18n = I18N_FACET_BED_DIFF_EPOCH; if (raw) { i18n = I18N_FACET_BED_DIFF_EPOCH_RAW; } return Resources.getMsg(meta, i18n, i18n, new Object[] { range }); } static { // Active/deactivate facets. FacetActivity.Registry.getInstance().register( "minfo", new FacetActivity() { @Override public Boolean isInitialActive( Artifact artifact, Facet facet, String output ) { String name = facet.getName(); if (name.equals(BED_DIFFERENCE_EPOCH) || name.equals(BED_DIFFERENCE_EPOCH_HEIGHT1) || name.equals(BED_DIFFERENCE_EPOCH_HEIGHT2) || name.equals(BED_DIFFERENCE_EPOCH_HEIGHT1_FILTERED) || name.equals(BED_DIFFERENCE_EPOCH_HEIGHT2_FILTERED) || name.equals(BED_DIFFERENCE_HEIGHT_YEAR) || name.equals(BED_DIFFERENCE_YEAR) || name.equals(BED_DIFFERENCE_YEAR_HEIGHT1) || name.equals(BED_DIFFERENCE_YEAR_HEIGHT2) || name.equals(BED_DIFFERENCE_YEAR_HEIGHT1_FILTERED) || name.equals(BED_DIFFERENCE_YEAR_HEIGHT2_FILTERED)){ return Boolean.FALSE; } else if (name.equals(BED_DIFFERENCE_MORPH_WIDTH) || name.equals(BED_DIFFERENCE_EPOCH_FILTERED) || name.equals(BED_DIFFERENCE_HEIGHT_YEAR_FILTERED) || name.equals(BED_DIFFERENCE_YEAR_FILTERED)) { return Boolean.TRUE; } else { return null; } } }); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :