Mercurial > dive4elements > river
view artifacts/src/main/java/org/dive4elements/river/utils/Formatter.java @ 9432:d194c5b24bf8
Added bundu bzws w calculation and longitudinal sections of wspl and depth
author | mschaefer |
---|---|
date | Mon, 20 Aug 2018 09:46:02 +0200 |
parents | 53e26734e4d2 |
children | fd6621f47a72 |
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.math.BigDecimal; import java.math.RoundingMode; 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; // MIDDLE BED HEIGHT 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); } /** * Decimal half even rounding of a flow depth value * (ATTENTION: throws an exception for NaN or Infinity!) */ public static BigDecimal roundFlowDepth(final double value) { return BigDecimal.valueOf(value).setScale(FLOWDEPTH_MAX_DIGITS, RoundingMode.HALF_EVEN); } public static NumberFormat getW(final CallContext context) { return Formatter.getFormatter(context, 2, 2); } /** * Decimal half even rounding of a W value * (ATTENTION: throws an exception for NaN or Infinity!) */ public static BigDecimal roundW(final double value) { return BigDecimal.valueOf(value).setScale(WATERLEVEL_W_MAX_DIGITS, RoundingMode.HALF_EVEN); } /** * 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(), 0, 0); 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); } }