diff artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/DifferencesState.java @ 5838:5aa05a7a34b7

Rename modules to more fitting names.
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 25 Apr 2013 15:23:37 +0200
parents flys-artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/DifferencesState.java@bd047b71ab37
children 4897a58c8746
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/DifferencesState.java	Thu Apr 25 15:23:37 2013 +0200
@@ -0,0 +1,403 @@
+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.FLYSArtifact;
+import org.dive4elements.river.artifacts.access.BedDifferencesAccess;
+import org.dive4elements.river.artifacts.model.CalculationResult;
+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;
+
+/**
+ * @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 DifferencesState() {
+    }
+
+    @Override
+    public Object computeAdvance(FLYSArtifact artifact, String hash,
+        CallContext context, List<Facet> facets, Object old) {
+        logger.debug("BedQualityState.computeAdvance");
+
+        List<Facet> newFacets = new ArrayList<Facet>();
+
+        BedDifferencesAccess access =
+            new BedDifferencesAccess(artifact, context);
+
+        CalculationResult res = old instanceof CalculationResult ? (CalculationResult) old
+            : new BedDiffCalculation().calculate(access);
+
+        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("BedQualityState.generateFacets");
+
+        CallMeta meta = context.getMeta();
+
+        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
+    ) {
+        String range = result.getStart() + " - " + 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,
+                i18nHeight2, new Object[] { range });
+        }
+        else {
+            return Resources.getMsg(meta, i18nHeight1,
+                i18nHeight2, new Object[] {range});
+        }
+    }
+
+    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_HEIGHT_YEAR) ||
+                        name.equals(BED_DIFFERENCE_YEAR) ||
+                        name.equals(BED_DIFFERENCE_YEAR_HEIGHT1) ||
+                        name.equals(BED_DIFFERENCE_YEAR_HEIGHT2)) {
+                        return Boolean.FALSE;
+                    }
+                    else if (name.equals(BED_DIFFERENCE_MORPH_WIDTH) ||
+                        name.equals(BED_DIFFERENCE_EPOCH_FILTERED) ||
+                        name.equals(BED_DIFFERENCE_EPOCH_HEIGHT1_FILTERED) ||
+                        name.equals(BED_DIFFERENCE_EPOCH_HEIGHT2_FILTERED) ||
+                        name.equals(BED_DIFFERENCE_HEIGHT_YEAR_FILTERED) ||
+                        name.equals(BED_DIFFERENCE_YEAR_FILTERED) ||
+                        name.equals(BED_DIFFERENCE_YEAR_HEIGHT1_FILTERED) ||
+                        name.equals(BED_DIFFERENCE_YEAR_HEIGHT2_FILTERED)){
+                        return Boolean.TRUE;
+                    }
+                    else {
+                        return null;
+                    }
+                }
+            });
+    }
+}

http://dive4elements.wald.intevation.org