view artifacts/src/main/java/org/dive4elements/river/utils/Formatter.java @ 9573:b9c87bbff6a4

mean bed height -> mean bed LEVEL
author gernotbelger
date Tue, 06 Nov 2018 10:56:22 +0100
parents 83e6acdf8fc6
children f8308db94634
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.utils;

import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Locale;

import org.dive4elements.artifacts.CallContext;
import org.dive4elements.artifacts.CallMeta;
import org.dive4elements.river.artifacts.resources.Resources;

/** Helper to access static i18n Formatters. */
public final class Formatter {

    // KMS IN ERROR REPORTS.
    public static final int CALCULATION_REPORT_KM_MIN_DIGITS = 1;
    public static final int CALCULATION_REPORT_KM_MAX_DIGITS = 3;

    // WATERLEVEL FORMATTER CONSTANTS
    public static final int WATERLEVEL_KM_MIN_DIGITS = 3;
    public static final int WATERLEVEL_KM_MAX_DIGITS = 3;
    public static final int WATERLEVEL_W_MIN_DIGITS = 0;
    public static final int WATERLEVEL_W_MAX_DIGITS = 2;
    public static final int WATERLEVEL_Q_MIN_DIGITS = 0;
    public static final int WATERLEVEL_Q_MAX_DIGITS = 2;

    // COMPUTED DISCHARGE CURVE FORMATTER CONSTANTS
    public static final int COMPUTED_DISCHARGE_W_MIN_DIGITS = 2;
    public static final int COMPUTED_DISCHARGE_W_MAX_DIGITS = 2;
    public static final int COMPUTED_DISCHARGE_Q_MIN_DIGITS = 0;
    public static final int COMPUTED_DISCHARGE_Q_MAX_DIGITS = 2;

    // HISTORICAL DISCHARGE CURVE FORMATTER CONSTANTS
    public static final int HISTORICAL_DISCHARGE_W_MIN_DIGITS = 0;
    public static final int HISTORICAL_DISCHARGE_W_MAX_DIGITS = 2;
    public static final int HISTORICAL_DISCHARGE_Q_MIN_DIGITS = 0;
    public static final int HISTORICAL_DISCHARGE_Q_MAX_DIGITS = 2;

    // DURATION CURVE FORMATTER CONSTANTS
    public static final int DURATION_W_MIN_DIGITS = 0;
    public static final int DURATION_W_MAX_DIGITS = 2;
    public static final int DURATION_Q_MIN_DIGITS = 0;
    public static final int DURATION_Q_MAX_DIGITS = 1;
    public static final int DURATION_D_MIN_DIGITS = 0;
    public static final int DURATION_D_MAX_DIGITS = 0;

    // FLOW VELOCITY FORMATTER CONSTANTS
    public static final int FLOW_VELOCITY_KM_MIN_DIGITS = 3;
    public static final int FLOW_VELOCITY_KM_MAX_DIGITS = 3;
    public static final int FLOW_VELOCITY_VALUES_MIN_DIGITS = 2;
    public static final int FLOW_VELOCITY_VALUES_MAX_DIGITS = 2;
    public static final int FLOW_VELOCITY_Q_MIN_DIGITS = 0;
    public static final int FLOW_VELOCITY_Q_MAX_DIGITS = 2;

    // MEAN BED LEVEL FORMATTER CONSTANTS
    public static final int MIDDLE_BED_HEIGHT_KM_MIN_DIGITS = 3;
    public static final int MIDDLE_BED_HEIGHT_KM_MAX_DIGITS = 3;
    public static final int MIDDLE_BED_HEIGHT_HEIGHT_MIN_DIGITS = 3;
    public static final int MIDDLE_BED_HEIGHT_HEIGHT_MAX_DIGITS = 3;
    public static final int MIDDLE_BED_HEIGHT_UNCERT_MIN_DIGITS = 3;
    public static final int MIDDLE_BED_HEIGHT_UNCERT_MAX_DIGITS = 3;
    public static final int MIDDLE_BED_HEIGHT_DATAGAP_MIN_DIGITS = 2;
    public static final int MIDDLE_BED_HEIGHT_DATAGAP_MAX_DIGITS = 2;
    public static final int MIDDLE_BED_HEIGHT_SOUNDING_WIDTH_MIN_DIGITS = 0;
    public static final int MIDDLE_BED_HEIGHT_SOUNDING_WIDTH_MAX_DIGITS = 0;
    public static final int MIDDLE_BED_HEIGHT_WIDTH_MIN_DIGITS = 3;
    public static final int MIDDLE_BED_HEIGHT_WIDTH_MAX_DIGITS = 3;

    public static final int FIX_DELTA_W_KM_MIN_DIGITS = 3;
    public static final int FIX_DELTA_W_KM_MAX_DIGITS = 3;
    public static final int FIX_DELTA_W_DELTA_W_MIN_DIGITS = 3;
    public static final int FIX_DELTA_W_DELTA_W_MAX_DIGITS = 3;
    public static final int FIX_DELTA_W_DELTA_Q_MIN_DIGITS = 0;
    public static final int FIX_DELTA_W_DELTA_Q_MAX_DIGITS = 2;

    public static final int VARIANCE_MIN_DIGITS = 3;
    public static final int VARIANCE_MAX_DIGITS = 3;

    // SQ Relation
    public static final int SQ_RELATION_KM_MIN_DIGITS = 2;
    public static final int SQ_RELATION_KM_MAX_DIGITS = 2;
    public static final int SQ_RELATION_A_MAX_DIGITS = 2;
    public static final int SQ_RELATION_A_MIN_DIGITS = 2;
    public static final int SQ_RELATION_B_MAX_DIGITS = 3;
    public static final int SQ_RELATION_B_MIN_DIGITS = 3;

    // OTHER
    public static final int CSV_DIAGRAM_DATA_MAX_DIGITS = 3;
    public static final int CSV_DIAGRAM_DATA_MIN_DIGITS = 3;

    // S-INFO
    public static final int FLOWDEPTH_MAX_DIGITS = 2;

    /**
     * Creates a localized NumberFormatter with given range of decimal digits.
     *
     * @param m
     *            CallMeta to find the locale.
     * @param min
     *            minimum number of decimal ("fraction") digits.
     * @param max
     *            maximum number of decimal ("fraction") digits.
     * @return A NumberFormat. Use #format(NUMBER) to get String representation
     *         of NUMBER.
     */
    public static NumberFormat getFormatter(final CallMeta m, final int min, final int max) {
        final Locale locale = Resources.getLocale(m);
        final NumberFormat nf = NumberFormat.getInstance(locale);

        nf.setMaximumFractionDigits(max);
        nf.setMinimumFractionDigits(min);

        return nf;
    }

    public static NumberFormat getFormatter(final CallContext c, final int min, final int max) {
        return getFormatter(c.getMeta(), min, max);
    }

    /**
     * Returns a number formatter with no max or min digits set.
     *
     * @param c
     *            The CallContext.
     *
     * @return a number formatter.
     */
    public static NumberFormat getRawFormatter(final CallContext c) {
        final Locale locale = Resources.getLocale(c.getMeta());
        return NumberFormat.getInstance(locale);
    }

    /**
     * Returns a formatter in engineering notation.
     */
    public static NumberFormat getEngFormatter(final CallContext c) {
        final NumberFormat nf = getRawFormatter(c);
        if (nf instanceof DecimalFormat) {
            final DecimalFormat df = (DecimalFormat) nf;
            df.applyPattern("##0.#####E0");
        }
        return nf;
    }

    /**
     * Returns a number formatter that uses an exponent after max digits.
     */
    public static NumberFormat getScientificFormater(final CallContext c, final int min, final int max) {
        final NumberFormat nf = getRawFormatter(c);
        if (nf instanceof DecimalFormat) {
            final DecimalFormat df = (DecimalFormat) nf;
            df.applyPattern("0.0E0");
            df.setMaximumFractionDigits(max);
            df.setMinimumFractionDigits(min);
        }
        return nf;
    }

    /**
     * Returns a date formatter with SHORT style.
     */
    public static DateFormat getShortDateFormat(final CallContext cc) {
        final Locale locale = Resources.getLocale(cc.getMeta());
        return DateFormat.getDateInstance(DateFormat.SHORT, locale);
    }

    /**
     * Returns a date formatter with MEDIUM style.
     */
    public static DateFormat getMediumDateFormat(final CallContext cc) {
        final Locale locale = Resources.getLocale(cc.getMeta());
        return DateFormat.getDateInstance(DateFormat.MEDIUM, locale);
    }

    /**
     * Returns the number formatter for kilometer values in waterlevel exports.
     *
     * @return the number formatter for kilometer values.
     */
    public static NumberFormat getWaterlevelKM(final CallContext context) {
        return getFormatter(context, WATERLEVEL_KM_MIN_DIGITS, WATERLEVEL_KM_MAX_DIGITS);
    }

    /**
     * Returns the number formatter for data exported from diagram (not from
     * calculation.
     *
     * @return the number formatter for csv data from diagra.
     */
    public static NumberFormat getCSVFormatter(final CallContext context) {
        return getFormatter(context, CSV_DIAGRAM_DATA_MIN_DIGITS, CSV_DIAGRAM_DATA_MAX_DIGITS);
    }

    public static NumberFormat getWaterlevelW(final CallMeta meta) {
        return getFormatter(meta, WATERLEVEL_W_MIN_DIGITS, WATERLEVEL_W_MAX_DIGITS);
    }

    /**
     * Returns the number formatter for W values in waterlevel exports.
     *
     * @return the number formatter for W values.
     */
    public static NumberFormat getWaterlevelW(final CallContext context) {
        return getFormatter(context, WATERLEVEL_W_MIN_DIGITS, WATERLEVEL_W_MAX_DIGITS);
    }

    /**
     * Returns the number formatter for Q values in waterlevel exports.
     *
     * @return the number formatter for Q values.
     */
    public static NumberFormat getWaterlevelQ(final CallContext context) {
        return getFormatter(context, WATERLEVEL_Q_MIN_DIGITS, WATERLEVEL_Q_MAX_DIGITS);
    }

    public static NumberFormat getWaterlevelQ(final CallMeta meta) {
        return getFormatter(meta, WATERLEVEL_Q_MIN_DIGITS, WATERLEVEL_Q_MAX_DIGITS);
    }

    /**
     * Returns the number formatter for W values in exports of computed
     * discharge curves.
     *
     * @return the number formatter for W values.
     */
    public static NumberFormat getComputedDischargeW(final CallContext context) {
        return getFormatter(context, COMPUTED_DISCHARGE_W_MIN_DIGITS, COMPUTED_DISCHARGE_W_MAX_DIGITS);
    }

    /**
     * Returns the number formatter for Q values in exports of computed
     * discharge curves.
     *
     * @return the number formatter for Q values.
     */
    public static NumberFormat getComputedDischargeQ(final CallContext context) {
        return getFormatter(context, COMPUTED_DISCHARGE_Q_MIN_DIGITS, COMPUTED_DISCHARGE_Q_MAX_DIGITS);
    }

    /**
     * Returns the number formatter for W values in exports of historical
     * discharge curves.
     *
     * @return the number formatter for W values.
     */
    public static NumberFormat getHistoricalDischargeW(final CallContext context) {
        return getFormatter(context, HISTORICAL_DISCHARGE_W_MIN_DIGITS, HISTORICAL_DISCHARGE_W_MAX_DIGITS);
    }

    /**
     * Returns the number formatter for Q values in exports of historical
     * discharge curves.
     *
     * @return the number formatter for Q values.
     */
    public static NumberFormat getHistoricalDischargeQ(final CallContext context) {
        return getFormatter(context, HISTORICAL_DISCHARGE_Q_MIN_DIGITS, HISTORICAL_DISCHARGE_Q_MAX_DIGITS);
    }

    /**
     * Returns the number formatter for W values in duration curve exports.
     *
     * @return the number formatter for W values.
     */
    public static NumberFormat getDurationW(final CallContext context) {
        return getFormatter(context, DURATION_W_MIN_DIGITS, DURATION_W_MAX_DIGITS);
    }

    /**
     * Returns the number formatter for Q values in duration curve exports.
     *
     * @return the number formatter for W values.
     */
    public static NumberFormat getDurationQ(final CallContext context) {
        return getFormatter(context, DURATION_Q_MIN_DIGITS, DURATION_Q_MAX_DIGITS);
    }

    /**
     * Returns the number formatter for D values in duration curve exports.
     *
     * @return the number formatter for W values.
     */
    public static NumberFormat getDurationD(final CallContext context) {
        return getFormatter(context, DURATION_D_MIN_DIGITS, DURATION_D_MAX_DIGITS);
    }

    public static NumberFormat getCalculationKm(final CallMeta meta) {
        return getFormatter(meta, CALCULATION_REPORT_KM_MIN_DIGITS, CALCULATION_REPORT_KM_MAX_DIGITS);
    }

    public static NumberFormat getFlowVelocityKM(final CallContext context) {
        return getFormatter(context, FLOW_VELOCITY_KM_MIN_DIGITS, FLOW_VELOCITY_KM_MAX_DIGITS);
    }

    public static NumberFormat getFlowVelocityValues(final CallContext context) {
        return getFormatter(context, FLOW_VELOCITY_VALUES_MIN_DIGITS, FLOW_VELOCITY_VALUES_MAX_DIGITS);
    }

    public static NumberFormat getFlowVelocityQ(final CallContext context) {
        return getFormatter(context, FLOW_VELOCITY_Q_MIN_DIGITS, FLOW_VELOCITY_Q_MAX_DIGITS);
    }

    public static NumberFormat getMiddleBedHeightKM(final CallContext context) {
        return getFormatter(context, MIDDLE_BED_HEIGHT_KM_MIN_DIGITS, MIDDLE_BED_HEIGHT_KM_MAX_DIGITS);
    }

    public static NumberFormat getMiddleBedHeightHeight(final CallContext context) {
        return getFormatter(context, MIDDLE_BED_HEIGHT_HEIGHT_MIN_DIGITS, MIDDLE_BED_HEIGHT_HEIGHT_MAX_DIGITS);
    }

    public static NumberFormat getMiddleBedHeightUncert(final CallContext context) {
        return getFormatter(context, MIDDLE_BED_HEIGHT_UNCERT_MIN_DIGITS, MIDDLE_BED_HEIGHT_UNCERT_MAX_DIGITS);
    }

    public static NumberFormat getMiddleBedHeightDataGap(final CallContext context) {
        return getFormatter(context, MIDDLE_BED_HEIGHT_DATAGAP_MIN_DIGITS, MIDDLE_BED_HEIGHT_DATAGAP_MAX_DIGITS);
    }

    public static NumberFormat getMiddleBedHeightSounding(final CallContext context) {
        return getFormatter(context, MIDDLE_BED_HEIGHT_SOUNDING_WIDTH_MIN_DIGITS, MIDDLE_BED_HEIGHT_SOUNDING_WIDTH_MAX_DIGITS);
    }

    public static NumberFormat getFixDeltaWKM(final CallContext context) {
        return getFormatter(context, FIX_DELTA_W_KM_MIN_DIGITS, FIX_DELTA_W_KM_MAX_DIGITS);
    }

    public static NumberFormat getFixDeltaWDeltaW(final CallContext context) {
        return getFormatter(context, FIX_DELTA_W_DELTA_W_MIN_DIGITS, FIX_DELTA_W_DELTA_W_MAX_DIGITS);
    }

    public static NumberFormat getFixDeltaWQ(final CallContext context) {
        return getFormatter(context, FIX_DELTA_W_DELTA_Q_MIN_DIGITS, FIX_DELTA_W_DELTA_Q_MAX_DIGITS);
    }

    public static NumberFormat getFixDeltaWW(final CallContext context) {
        return getFormatter(context, FIX_DELTA_W_DELTA_W_MIN_DIGITS, FIX_DELTA_W_DELTA_W_MAX_DIGITS);
    }

    public static NumberFormat getVariance(final CallContext context) {
        return getFormatter(context, VARIANCE_MIN_DIGITS, VARIANCE_MAX_DIGITS);
    }

    public static NumberFormat getSQRelationA(final CallContext context) {
        return getScientificFormater(context, SQ_RELATION_A_MIN_DIGITS, SQ_RELATION_A_MAX_DIGITS);
    }

    public static NumberFormat getSQRelationB(final CallContext context) {
        return getFormatter(context, SQ_RELATION_B_MIN_DIGITS, SQ_RELATION_B_MAX_DIGITS);
    }

    public static NumberFormat getSQRelationKM(final CallContext context) {
        return getFormatter(context, SQ_RELATION_KM_MIN_DIGITS, SQ_RELATION_KM_MAX_DIGITS);
    }

    public static NumberFormat getMeterFormat(final CallContext context) {
        return getFormatter(context, 0, 2);

    }

    public static DateFormat getDateFormatter(final CallMeta m, final String pattern) {
        final Locale locale = Resources.getLocale(m);
        return new SimpleDateFormat(pattern, locale);
    }

    public static NumberFormat getMeanBedHeight(final CallContext context) {
        return Formatter.getFormatter(context, 2, 2);
    }

    public static NumberFormat getTkh(final CallContext context) {
        return Formatter.getFormatter(context, 1, 1);
    }

    public static NumberFormat getFlowDepth(final CallContext context) {
        return Formatter.getFormatter(context, FLOWDEPTH_MAX_DIGITS, FLOWDEPTH_MAX_DIGITS);
    }

    public static NumberFormat getW(final CallContext context) {
        return Formatter.getFormatter(context, 2, 2);
    }

    /**
     * Another waterlevel formatter with fixed digits (always 2)
     */
    public static NumberFormat getWaterlevelW2(final CallMeta meta) {
        return getFormatter(meta, 2, 2);
    }

    public static NumberFormat getChannelWidth(final CallContext context) {
        return getFormatter(context.getMeta(), 2, 2);
    }

    public static NumberFormat getChannelDepth(final CallContext context) {
        return getFormatter(context.getMeta(), 2, 2);
    }

    public static NumberFormat getFlowDepthDevelopmentPerYear(final CallContext context) {
        return getFormatter(context.getMeta(), 2, 2);
    }

    public static NumberFormat getSalixLine(final CallContext context) {
        return Formatter.getFormatter(context, 2, 2);
    }

    public static NumberFormat getUeberflutungsdauer(final CallContext context) {
        return Formatter.getFormatter(context, 0, 0);
    }

    public static NumberFormat getInfrastructureHeight(final CallContext context) {
        return getFormatter(context.getMeta(), 2, 2);
    }

    public static NumberFormat getIntegerFormatter(final CallContext context) {
        return getFormatter(context.getMeta(), 0, 0);
    }

    public static NumberFormat getCollisionCount(final CallContext context) {
        return getFormatter(context.getMeta(), 0, 0);
    }

    public static NumberFormat getCollisionGaugeW(final CallContext context) {
        return getFormatter(context.getMeta(), 0, 2); // cm
    }

    public static NumberFormat getCurrencyFormat(final CallContext context) {
        final NumberFormat nf = getFormatter(context.getMeta(), 2, 2);
        nf.setGroupingUsed(true);
        return nf;
    }

    public static NumberFormat getDensityFormat(final CallContext context) {
        return getFormatter(context, 3, 3);
    }

    public static NumberFormat getMassFormat(final CallContext context) {
        return getFormatter(context, 0, 1);
    }
}

http://dive4elements.wald.intevation.org