raimund@3614: package de.intevation.flys.artifacts.states.minfo;
raimund@3614:
raimund@3898: import java.text.DateFormat;
raimund@3898: import java.util.ArrayList;
raimund@3898: import java.util.List;
raimund@3898:
raimund@3614: import org.apache.log4j.Logger;
raimund@3614:
raimund@3898: import de.intevation.artifactdatabase.state.Facet;
raimund@3898: import de.intevation.artifacts.CallContext;
raimund@3898: import de.intevation.artifacts.CallMeta;
raimund@3898: import de.intevation.flys.artifacts.FLYSArtifact;
raimund@3898: import de.intevation.flys.artifacts.access.BedDifferencesAccess;
raimund@3898: import de.intevation.flys.artifacts.model.CalculationResult;
raimund@3898: import de.intevation.flys.artifacts.model.FacetTypes;
raimund@3898: import de.intevation.flys.artifacts.model.minfo.BedDiffCalculation;
raimund@3898: import de.intevation.flys.artifacts.model.minfo.BedDiffEpochFacet;
raimund@3898: import de.intevation.flys.artifacts.model.minfo.BedDiffEpochResult;
raimund@3898: import de.intevation.flys.artifacts.model.minfo.BedDiffYearFacet;
raimund@3898: import de.intevation.flys.artifacts.model.minfo.BedDiffYearResult;
raimund@3898: import de.intevation.flys.artifacts.model.minfo.BedDifferencesResult;
raimund@3898: import de.intevation.flys.artifacts.resources.Resources;
raimund@3614: import de.intevation.flys.artifacts.states.DefaultState;
raimund@3898: import de.intevation.flys.utils.Formatter;
raimund@3614:
raimund@3614: /**
raimund@3614: * @author Raimund Renkert
raimund@3614: */
raimund@3898: public class DifferencesState
raimund@3898: extends DefaultState
raimund@3898: implements FacetTypes
raimund@3898: {
raimund@3614: /** The logger used in this class. */
raimund@3614: private static Logger logger = Logger.getLogger(DifferencesState.class);
raimund@3898: public static final String I18N_DIFF_YEAR = "beddifference.year";
raimund@3898: public static final String I18N_DIFF_EPOCH = "beddifference.epoch";
raimund@3898:
raimund@3898: public static final String I18N_FACET_BED_DIFF_YEAR = "facet.bedheight.diff.year";
raimund@3898: public static final String I18N_FACET_BED_DIFF_ABSOLUTE = "facet.bedheight.diff.absolute";
raimund@3898: public static final String I18N_FACET_BED_DIFF_MORPH = "facet.bedheight.diff.morph";
raimund@3898: public static final String I18N_FACET_BED_DIFF_EPOCH = "facet.bedheight.diff.epoch";
raimund@3898: public static final String I18N_FACET_BED_DIFF_HEIGHT1 = "facet.bedheight.diff.height1";
raimund@3898: public static final String I18N_FACET_BED_DIFF_HEIGHT2 = "facet.bedheight.diff.height2";
raimund@3614:
raimund@3614: public DifferencesState() {
raimund@3614: }
raimund@3898:
raimund@3898: @Override
raimund@3898: public Object computeAdvance(FLYSArtifact artifact, String hash,
raimund@3898: CallContext context, List facets, Object old) {
raimund@3898: logger.debug("BedQualityState.computeAdvance");
raimund@3898:
raimund@3898: List newFacets = new ArrayList();
raimund@3898:
raimund@3898: BedDifferencesAccess access =
raimund@3898: new BedDifferencesAccess(artifact, context);
raimund@3898:
raimund@3898: CalculationResult res = old instanceof CalculationResult ? (CalculationResult) old
raimund@3898: : new BedDiffCalculation().calculate(access);
raimund@3898:
raimund@3898: if (facets == null || res == null) {
raimund@3898: return res;
raimund@3898: }
raimund@3898:
raimund@3898: BedDifferencesResult[] results = (BedDifferencesResult[]) res.getData();
raimund@3898:
raimund@3898: if (results == null || results.length == 0) {
raimund@3898: logger.warn("Calculation computed no results!");
raimund@3898: return res;
raimund@3898: }
raimund@3898:
raimund@3898: generateFacets(context, newFacets, results, getID(), hash);
raimund@3898: logger.debug("Created " + newFacets.size() + " new Facets.");
raimund@3898:
raimund@3898: facets.addAll(newFacets);
raimund@3898:
raimund@3898: return res;
raimund@3898: }
raimund@3898:
raimund@3898: protected void generateFacets(CallContext context, List newFacets,
raimund@3898: BedDifferencesResult[] results, String stateId, String hash) {
raimund@3898: logger.debug("BedQualityState.generateFacets");
raimund@3898:
raimund@3898: CallMeta meta = context.getMeta();
raimund@3898:
raimund@3898: for (int idx = 0; idx < results.length; idx++) {
raimund@3898: if (results[idx] instanceof BedDiffYearResult) {
raimund@3898: newFacets.add(new BedDiffYearFacet(
raimund@3898: idx,
raimund@3898: BED_DIFFERENCE_YEAR,
raimund@3898: createBedDiffYearDescription(
raimund@3898: meta,
raimund@3898: (BedDiffYearResult)results[idx]),
raimund@3898: ComputeType.ADVANCE,
raimund@3898: stateId,
raimund@3898: hash));
raimund@3898: newFacets.add(new BedDiffYearFacet(
raimund@3898: idx,
raimund@3898: BED_DIFFERENCE_MORPH_WIDTH,
raimund@3898: createBedDiffMorphDescription(
raimund@3898: meta,
raimund@3898: (BedDiffYearResult)results[idx]),
raimund@3898: ComputeType.ADVANCE,
raimund@3898: stateId,
raimund@3898: hash));
raimund@3898: newFacets.add(new BedDiffYearFacet(
raimund@3898: idx,
raimund@3898: BED_DIFFERENCE_YEAR_HEIGHT1,
raimund@3898: createBedDiffHeightDescription(
raimund@3898: meta,
raimund@3898: (BedDiffYearResult)results[idx],
raimund@3898: 0),
raimund@3898: ComputeType.ADVANCE,
raimund@3898: stateId,
raimund@3898: hash));
raimund@3898: newFacets.add(new BedDiffYearFacet(
raimund@3898: idx,
raimund@3898: BED_DIFFERENCE_YEAR_HEIGHT2,
raimund@3898: createBedDiffHeightDescription(
raimund@3898: meta,
raimund@3898: (BedDiffYearResult)results[idx],
raimund@3898: 1),
raimund@3898: ComputeType.ADVANCE,
raimund@3898: stateId,
raimund@3898: hash));
raimund@3898: newFacets.add(new BedDiffYearFacet(
raimund@3898: idx,
raimund@3898: BED_DIFFERENCE_HEIGHT_YEAR,
raimund@3898: createBedDiffAbsoluteDescription(
raimund@3898: meta,
raimund@3898: (BedDiffYearResult)results[idx]),
raimund@3898: ComputeType.ADVANCE,
raimund@3898: stateId,
raimund@3898: hash));
raimund@3898: }
raimund@3898: if (results[idx] instanceof BedDiffEpochResult) {
raimund@3898: newFacets.add(new BedDiffEpochFacet(
raimund@3898: idx,
raimund@3898: BED_DIFFERENCE_EPOCH,
raimund@3898: createBedDiffEpochDescription(
raimund@3898: meta,
raimund@3898: (BedDiffEpochResult)results[idx]),
raimund@3898: ComputeType.ADVANCE,
raimund@3898: stateId,
raimund@3898: hash));
raimund@3898: newFacets.add(new BedDiffEpochFacet(
raimund@3898: idx,
raimund@3898: BED_DIFFERENCE_EPOCH_HEIGHT1,
raimund@3898: createBedDiffHeightEpochDescription(
raimund@3898: meta,
raimund@3898: (BedDiffEpochResult)results[idx],
raimund@3898: 0),
raimund@3898: ComputeType.ADVANCE,
raimund@3898: stateId,
raimund@3898: hash));
raimund@3898: newFacets.add(new BedDiffEpochFacet(
raimund@3898: idx,
raimund@3898: BED_DIFFERENCE_EPOCH_HEIGHT2,
raimund@3898: createBedDiffHeightEpochDescription(
raimund@3898: meta,
raimund@3898: (BedDiffEpochResult)results[idx],
raimund@3898: 1),
raimund@3898: ComputeType.ADVANCE,
raimund@3898: stateId,
raimund@3898: hash));
raimund@3898:
raimund@3898: }
raimund@3898: }
raimund@3898: }
raimund@3898:
raimund@3898: private String createBedDiffHeightDescription(
raimund@3898: CallMeta meta,
raimund@3898: BedDiffYearResult result,
raimund@3898: int ndx
raimund@3898: ) {
raimund@3898: String range = result.getStart() + " - " + result.getEnd();
raimund@3898:
raimund@3898: if (ndx == 0) {
raimund@3898: return Resources.getMsg(meta, I18N_FACET_BED_DIFF_HEIGHT1,
raimund@3898: I18N_FACET_BED_DIFF_HEIGHT1, new Object[] { range });
raimund@3898: }
raimund@3898: else {
raimund@3898: return Resources.getMsg(meta, I18N_FACET_BED_DIFF_HEIGHT2,
raimund@3898: I18N_FACET_BED_DIFF_HEIGHT2, new Object[] {range});
raimund@3898: }
raimund@3898: }
raimund@3898:
raimund@3898: private String createBedDiffHeightEpochDescription(
raimund@3898: CallMeta meta,
raimund@3898: BedDiffEpochResult result,
raimund@3898: int ndx
raimund@3898: ) {
raimund@3898: DateFormat df = Formatter.getDateFormatter(meta, "yyyy");
raimund@3898: String range =
raimund@3898: df.format(result.getStart())
raimund@3898: + " - " +
raimund@3898: df.format(result.getEnd());
raimund@3898:
raimund@3898: if (ndx == 0) {
raimund@3898: return Resources.getMsg(meta, I18N_FACET_BED_DIFF_HEIGHT1,
raimund@3898: I18N_FACET_BED_DIFF_HEIGHT1, new Object[] { range });
raimund@3898: }
raimund@3898: else {
raimund@3898: return Resources.getMsg(meta, I18N_FACET_BED_DIFF_HEIGHT2,
raimund@3898: I18N_FACET_BED_DIFF_HEIGHT2, new Object[] {range});
raimund@3898: }
raimund@3898: }
raimund@3898:
raimund@3898: protected String createBedDiffYearDescription(
raimund@3898: CallMeta meta,
raimund@3898: BedDiffYearResult result) {
raimund@3898: String range = result.getStart() + " - " + result.getEnd();
raimund@3898:
raimund@3898: return Resources.getMsg(meta, I18N_FACET_BED_DIFF_YEAR,
raimund@3898: I18N_FACET_BED_DIFF_YEAR, new Object[] { range });
raimund@3898: }
raimund@3898:
raimund@3898: protected String createBedDiffMorphDescription(
raimund@3898: CallMeta meta,
raimund@3898: BedDiffYearResult result) {
raimund@3898: String range = result.getStart() + " - " + result.getEnd();
raimund@3898:
raimund@3898: return Resources.getMsg(meta, I18N_FACET_BED_DIFF_MORPH,
raimund@3898: I18N_FACET_BED_DIFF_MORPH, new Object[] { range });
raimund@3898: }
raimund@3898:
raimund@3898: protected String createBedDiffAbsoluteDescription(
raimund@3898: CallMeta meta,
raimund@3898: BedDiffYearResult result) {
raimund@3898: String range = result.getStart() + " - " + result.getEnd();
raimund@3898:
raimund@3898: return Resources.getMsg(meta, I18N_FACET_BED_DIFF_ABSOLUTE,
raimund@3898: I18N_FACET_BED_DIFF_ABSOLUTE, new Object[] { range });
raimund@3898: }
raimund@3898:
raimund@3898: protected String createBedDiffEpochDescription(
raimund@3898: CallMeta meta,
raimund@3898: BedDiffEpochResult result) {
raimund@3898: DateFormat df = Formatter.getDateFormatter(meta, "yyyy");
raimund@3898: String range =
raimund@3898: df.format(result.getStart())
raimund@3898: + " - " +
raimund@3898: df.format(result.getEnd());
raimund@3898:
raimund@3898: return Resources.getMsg(meta, I18N_FACET_BED_DIFF_EPOCH,
raimund@3898: I18N_FACET_BED_DIFF_EPOCH, new Object[] { range });
raimund@3898: }
raimund@3614: }