teichmann@5831: package org.dive4elements.river.utils; ingo@445: sascha@3402: import java.text.DateFormat; sascha@3402: import java.text.NumberFormat; sascha@3402: import java.text.SimpleDateFormat; christian@3771: import java.util.Locale; sascha@3402: teichmann@5831: import org.dive4elements.artifacts.CallContext; teichmann@5831: import org.dive4elements.artifacts.CallMeta; teichmann@5831: import org.dive4elements.river.artifacts.resources.Resources; sascha@3402: ingo@445: felix@5639: /** Helper to access static i18n Formatters. */ ingo@445: public final class Formatter { ingo@445: sascha@2290: // KMS IN ERROR REPORTS. sascha@2305: public static final int CALCULATION_REPORT_KM_MIN_DIGITS = 1; sascha@2290: public static final int CALCULATION_REPORT_KM_MAX_DIGITS = 3; sascha@2290: ingo@445: // WATERLEVEL FORMATTER CONSTANTS ingo@445: public static final int WATERLEVEL_KM_MIN_DIGITS = 3; ingo@445: public static final int WATERLEVEL_KM_MAX_DIGITS = 3; ingo@445: public static final int WATERLEVEL_W_MIN_DIGITS = 0; ingo@445: public static final int WATERLEVEL_W_MAX_DIGITS = 2; ingo@445: public static final int WATERLEVEL_Q_MIN_DIGITS = 0; ingo@445: public static final int WATERLEVEL_Q_MAX_DIGITS = 2; ingo@445: ingo@445: ingo@445: // COMPUTED DISCHARGE CURVE FORMATTER CONSTANTS ingo@445: public static final int COMPUTED_DISCHARGE_W_MIN_DIGITS = 2; ingo@445: public static final int COMPUTED_DISCHARGE_W_MAX_DIGITS = 2; ingo@445: public static final int COMPUTED_DISCHARGE_Q_MIN_DIGITS = 0; ingo@1683: public static final int COMPUTED_DISCHARGE_Q_MAX_DIGITS = 2; ingo@445: ingo@445: ingo@2258: // HISTORICAL DISCHARGE CURVE FORMATTER CONSTANTS ingo@2258: public static final int HISTORICAL_DISCHARGE_W_MIN_DIGITS = 0; ingo@2258: public static final int HISTORICAL_DISCHARGE_W_MAX_DIGITS = 2; ingo@2258: public static final int HISTORICAL_DISCHARGE_Q_MIN_DIGITS = 0; ingo@2258: public static final int HISTORICAL_DISCHARGE_Q_MAX_DIGITS = 2; ingo@2258: ingo@2258: ingo@445: // DURATION CURVE FORMATTER CONSTANTS ingo@445: public static final int DURATION_W_MIN_DIGITS = 0; ingo@445: public static final int DURATION_W_MAX_DIGITS = 2; ingo@445: public static final int DURATION_Q_MIN_DIGITS = 0; ingo@445: public static final int DURATION_Q_MAX_DIGITS = 1; ingo@445: public static final int DURATION_D_MIN_DIGITS = 0; ingo@445: public static final int DURATION_D_MAX_DIGITS = 0; ingo@445: ingo@445: ingo@2702: // FLOW VELOCITY FORMATTER CONSTANTS ingo@2702: public static final int FLOW_VELOCITY_KM_MIN_DIGITS = 3; ingo@2702: public static final int FLOW_VELOCITY_KM_MAX_DIGITS = 3; ingo@2702: public static final int FLOW_VELOCITY_VALUES_MIN_DIGITS = 2; ingo@2702: public static final int FLOW_VELOCITY_VALUES_MAX_DIGITS = 2; ingo@2702: public static final int FLOW_VELOCITY_Q_MIN_DIGITS = 0; ingo@2702: public static final int FLOW_VELOCITY_Q_MAX_DIGITS = 2; ingo@2702: ingo@2702: ingo@2714: // MIDDLE BED HEIGHT FORMATTER CONSTANTS ingo@2714: public static final int MIDDLE_BED_HEIGHT_KM_MIN_DIGITS = 3; ingo@2714: public static final int MIDDLE_BED_HEIGHT_KM_MAX_DIGITS = 3; ingo@2714: public static final int MIDDLE_BED_HEIGHT_HEIGHT_MIN_DIGITS = 3; ingo@2714: public static final int MIDDLE_BED_HEIGHT_HEIGHT_MAX_DIGITS = 3; ingo@2714: public static final int MIDDLE_BED_HEIGHT_UNCERT_MIN_DIGITS = 3; ingo@2714: public static final int MIDDLE_BED_HEIGHT_UNCERT_MAX_DIGITS = 3; ingo@2714: public static final int MIDDLE_BED_HEIGHT_DATAGAP_MIN_DIGITS = 2; ingo@2714: public static final int MIDDLE_BED_HEIGHT_DATAGAP_MAX_DIGITS = 2; ingo@2714: public static final int MIDDLE_BED_HEIGHT_SOUNDING_WIDTH_MIN_DIGITS = 0; ingo@2714: public static final int MIDDLE_BED_HEIGHT_SOUNDING_WIDTH_MAX_DIGITS = 0; ingo@2714: public static final int MIDDLE_BED_HEIGHT_WIDTH_MIN_DIGITS = 3; ingo@2714: public static final int MIDDLE_BED_HEIGHT_WIDTH_MAX_DIGITS = 3; ingo@2714: sascha@2787: public static final int FIX_DELTA_W_KM_MIN_DIGITS = 3; sascha@2787: public static final int FIX_DELTA_W_KM_MAX_DIGITS = 3; sascha@2787: public static final int FIX_DELTA_W_DELTA_W_MIN_DIGITS = 3; sascha@2787: public static final int FIX_DELTA_W_DELTA_W_MAX_DIGITS = 3; sascha@3397: public static final int FIX_DELTA_W_DELTA_Q_MIN_DIGITS = 0; sascha@3397: public static final int FIX_DELTA_W_DELTA_Q_MAX_DIGITS = 2; sascha@2787: felix@5639: felix@3017: /** christian@3771: * Creates a localized NumberFormatter with given range of decimal digits. felix@3017: * @param m CallMeta to find the locale. felix@3017: * @param min minimum number of decimal ("fraction") digits. felix@3017: * @param max maximum number of decimal ("fraction") digits. felix@3017: * @return A NumberFormat. Use #format(NUMBER) to get String representation felix@3017: * of NUMBER. felix@3017: */ sascha@2290: public static NumberFormat getFormatter(CallMeta m, int min, int max){ sascha@2290: Locale locale = Resources.getLocale(m); ingo@445: NumberFormat nf = NumberFormat.getInstance(locale); ingo@445: ingo@445: nf.setMaximumFractionDigits(max); ingo@445: nf.setMinimumFractionDigits(min); ingo@445: ingo@445: return nf; ingo@445: } ingo@445: felix@5639: sascha@2290: public static NumberFormat getFormatter(CallContext c, int min, int max){ sascha@2290: return getFormatter(c.getMeta(), min, max); sascha@2290: } sascha@2290: ingo@445: ingo@445: /** ingo@2087: * Returns a number formatter with no max or min digits set. ingo@2087: * ingo@2087: * @param c The CallContext. ingo@2087: * ingo@2087: * @return a number formatter. ingo@2087: */ ingo@2087: public static NumberFormat getRawFormatter(CallContext c) { ingo@2087: Locale locale = Resources.getLocale(c.getMeta()); ingo@2087: return NumberFormat.getInstance(locale); ingo@2087: } ingo@2087: ingo@2087: ingo@2087: /** ingo@2258: * Returns a date formatter with SHORT style. ingo@2258: */ ingo@2258: public static DateFormat getShortDateFormat(CallContext cc) { ingo@2258: Locale locale = Resources.getLocale(cc.getMeta()); ingo@2258: return DateFormat.getDateInstance(DateFormat.SHORT, locale); ingo@2258: } ingo@2258: ingo@2258: ingo@2258: /** raimund@2588: * Returns a date formatter with MEDIUM style. raimund@2588: */ raimund@2588: public static DateFormat getMediumDateFormat(CallContext cc) { raimund@2588: Locale locale = Resources.getLocale(cc.getMeta()); raimund@2588: return DateFormat.getDateInstance(DateFormat.MEDIUM, locale); raimund@2588: } raimund@2588: raimund@2588: raimund@2588: /** ingo@445: * Returns the number formatter for kilometer values in waterlevel exports. ingo@445: * ingo@445: * @return the number formatter for kilometer values. ingo@445: */ ingo@445: public static NumberFormat getWaterlevelKM(CallContext context) { ingo@445: return getFormatter( christian@3771: context, christian@3771: WATERLEVEL_KM_MIN_DIGITS, christian@3771: WATERLEVEL_KM_MAX_DIGITS); ingo@445: } ingo@445: felix@5639: sascha@3162: public static NumberFormat getWaterlevelW(CallMeta meta) { sascha@3162: return getFormatter( christian@3771: meta, christian@3771: WATERLEVEL_W_MIN_DIGITS, christian@3771: WATERLEVEL_W_MAX_DIGITS); sascha@3162: } ingo@445: felix@5639: ingo@445: /** ingo@445: * Returns the number formatter for W values in waterlevel exports. ingo@445: * ingo@445: * @return the number formatter for W values. ingo@445: */ ingo@445: public static NumberFormat getWaterlevelW(CallContext context) { ingo@445: return getFormatter( christian@3771: context, christian@3771: WATERLEVEL_W_MIN_DIGITS, christian@3771: WATERLEVEL_W_MAX_DIGITS); ingo@445: } ingo@445: ingo@445: ingo@445: /** ingo@445: * Returns the number formatter for Q values in waterlevel exports. ingo@445: * ingo@445: * @return the number formatter for Q values. ingo@445: */ ingo@445: public static NumberFormat getWaterlevelQ(CallContext context) { ingo@445: return getFormatter( christian@3771: context, christian@3771: WATERLEVEL_Q_MIN_DIGITS, christian@3771: WATERLEVEL_Q_MAX_DIGITS); ingo@445: } ingo@445: felix@5639: sascha@3162: public static NumberFormat getWaterlevelQ(CallMeta meta) { sascha@3162: return getFormatter( christian@3771: meta, christian@3771: WATERLEVEL_Q_MIN_DIGITS, christian@3771: WATERLEVEL_Q_MAX_DIGITS); sascha@3162: } ingo@445: ingo@445: /** ingo@445: * Returns the number formatter for W values in exports of computed ingo@445: * discharge curves. ingo@445: * ingo@445: * @return the number formatter for W values. ingo@445: */ ingo@445: public static NumberFormat getComputedDischargeW(CallContext context) { ingo@445: return getFormatter( christian@3771: context, christian@3771: COMPUTED_DISCHARGE_W_MIN_DIGITS, christian@3771: COMPUTED_DISCHARGE_W_MAX_DIGITS); ingo@445: } ingo@445: ingo@445: ingo@445: /** ingo@445: * Returns the number formatter for Q values in exports of computed ingo@445: * discharge curves. ingo@445: * ingo@445: * @return the number formatter for Q values. ingo@445: */ ingo@445: public static NumberFormat getComputedDischargeQ(CallContext context) { ingo@445: return getFormatter( christian@3771: context, christian@3771: COMPUTED_DISCHARGE_Q_MIN_DIGITS, christian@3771: COMPUTED_DISCHARGE_Q_MAX_DIGITS); ingo@445: } ingo@445: ingo@445: ingo@445: /** ingo@2258: * Returns the number formatter for W values in exports of historical ingo@2258: * discharge curves. ingo@2258: * ingo@2258: * @return the number formatter for W values. ingo@2258: */ ingo@2258: public static NumberFormat getHistoricalDischargeW(CallContext context) { ingo@2258: return getFormatter( christian@3771: context, christian@3771: HISTORICAL_DISCHARGE_W_MIN_DIGITS, christian@3771: HISTORICAL_DISCHARGE_W_MAX_DIGITS); ingo@2258: } ingo@2258: ingo@2258: ingo@2258: /** ingo@2258: * Returns the number formatter for Q values in exports of historical ingo@2258: * discharge curves. ingo@2258: * ingo@2258: * @return the number formatter for Q values. ingo@2258: */ ingo@2258: public static NumberFormat getHistoricalDischargeQ(CallContext context) { ingo@2258: return getFormatter( christian@3771: context, christian@3771: HISTORICAL_DISCHARGE_Q_MIN_DIGITS, christian@3771: HISTORICAL_DISCHARGE_Q_MAX_DIGITS); ingo@2258: } ingo@2258: ingo@2258: ingo@2258: /** ingo@445: * Returns the number formatter for W values in duration curve exports. ingo@445: * ingo@445: * @return the number formatter for W values. ingo@445: */ ingo@445: public static NumberFormat getDurationW(CallContext context) { ingo@445: return getFormatter( christian@3771: context, christian@3771: DURATION_W_MIN_DIGITS, christian@3771: DURATION_W_MAX_DIGITS); ingo@445: } ingo@445: ingo@445: ingo@445: /** ingo@445: * Returns the number formatter for Q values in duration curve exports. ingo@445: * ingo@445: * @return the number formatter for W values. ingo@445: */ ingo@445: public static NumberFormat getDurationQ(CallContext context) { ingo@445: return getFormatter( christian@3771: context, christian@3771: DURATION_Q_MIN_DIGITS, christian@3771: DURATION_Q_MAX_DIGITS); ingo@445: } ingo@445: ingo@445: ingo@445: /** ingo@445: * Returns the number formatter for D values in duration curve exports. ingo@445: * ingo@445: * @return the number formatter for W values. ingo@445: */ ingo@445: public static NumberFormat getDurationD(CallContext context) { ingo@445: return getFormatter( christian@3771: context, christian@3771: DURATION_D_MIN_DIGITS, christian@3771: DURATION_D_MAX_DIGITS); ingo@445: } sascha@2290: sascha@2290: public static NumberFormat getCalculationKm(CallMeta meta) { sascha@2290: return getFormatter( christian@3771: meta, christian@3771: CALCULATION_REPORT_KM_MIN_DIGITS, christian@3771: CALCULATION_REPORT_KM_MAX_DIGITS); sascha@2290: } ingo@2702: ingo@2702: ingo@2702: public static NumberFormat getFlowVelocityKM(CallContext context) { ingo@2702: return getFormatter( christian@3771: context, christian@3771: FLOW_VELOCITY_KM_MIN_DIGITS, christian@3771: FLOW_VELOCITY_KM_MAX_DIGITS); ingo@2702: } ingo@2702: ingo@2702: ingo@2702: public static NumberFormat getFlowVelocityValues(CallContext context) { ingo@2702: return getFormatter( christian@3771: context, christian@3771: FLOW_VELOCITY_VALUES_MIN_DIGITS, christian@3771: FLOW_VELOCITY_VALUES_MAX_DIGITS); ingo@2702: } ingo@2702: ingo@2702: ingo@2702: public static NumberFormat getFlowVelocityQ(CallContext context) { ingo@2702: return getFormatter( christian@3771: context, christian@3771: FLOW_VELOCITY_Q_MIN_DIGITS, christian@3771: FLOW_VELOCITY_Q_MAX_DIGITS); ingo@2702: } ingo@2714: ingo@2714: ingo@2714: public static NumberFormat getMiddleBedHeightKM(CallContext context) { ingo@2714: return getFormatter( christian@3771: context, christian@3771: MIDDLE_BED_HEIGHT_KM_MIN_DIGITS, christian@3771: MIDDLE_BED_HEIGHT_KM_MAX_DIGITS); ingo@2714: } ingo@2714: ingo@2714: ingo@2714: public static NumberFormat getMiddleBedHeightHeight(CallContext context) { ingo@2714: return getFormatter( christian@3771: context, christian@3771: MIDDLE_BED_HEIGHT_HEIGHT_MIN_DIGITS, christian@3771: MIDDLE_BED_HEIGHT_HEIGHT_MAX_DIGITS); ingo@2714: } ingo@2714: ingo@2714: ingo@2714: public static NumberFormat getMiddleBedHeightUncert(CallContext context) { ingo@2714: return getFormatter( christian@3771: context, christian@3771: MIDDLE_BED_HEIGHT_UNCERT_MIN_DIGITS, christian@3771: MIDDLE_BED_HEIGHT_UNCERT_MAX_DIGITS); ingo@2714: } ingo@2714: ingo@2714: ingo@2714: public static NumberFormat getMiddleBedHeightDataGap(CallContext context) { ingo@2714: return getFormatter( christian@3771: context, christian@3771: MIDDLE_BED_HEIGHT_DATAGAP_MIN_DIGITS, christian@3771: MIDDLE_BED_HEIGHT_DATAGAP_MAX_DIGITS); ingo@2714: } ingo@2714: ingo@2714: ingo@2714: public static NumberFormat getMiddleBedHeightSounding(CallContext context) { ingo@2714: return getFormatter( christian@3771: context, christian@3771: MIDDLE_BED_HEIGHT_SOUNDING_WIDTH_MIN_DIGITS, christian@3771: MIDDLE_BED_HEIGHT_SOUNDING_WIDTH_MAX_DIGITS); ingo@2714: } ingo@2714: ingo@2714: ingo@2714: public static NumberFormat getMiddleBedHeightWidth(CallContext context) { ingo@2714: return getFormatter( christian@3771: context, christian@3771: MIDDLE_BED_HEIGHT_WIDTH_MIN_DIGITS, christian@3771: MIDDLE_BED_HEIGHT_WIDTH_MAX_DIGITS); ingo@2714: } sascha@2787: sascha@2787: public static NumberFormat getFixDeltaWKM(CallContext context) { sascha@2787: return getFormatter( christian@3771: context, christian@3771: FIX_DELTA_W_KM_MIN_DIGITS, christian@3771: FIX_DELTA_W_KM_MAX_DIGITS); sascha@2787: } sascha@2787: sascha@2787: public static NumberFormat getFixDeltaWDeltaW(CallContext context) { sascha@2787: return getFormatter( christian@3771: context, christian@3771: FIX_DELTA_W_DELTA_W_MIN_DIGITS, christian@3771: FIX_DELTA_W_DELTA_W_MAX_DIGITS); sascha@2787: } felix@3017: sascha@3397: public static NumberFormat getFixDeltaWQ(CallContext context) { sascha@3397: return getFormatter( christian@3771: context, christian@3771: FIX_DELTA_W_DELTA_Q_MIN_DIGITS, christian@3771: FIX_DELTA_W_DELTA_Q_MAX_DIGITS); sascha@3397: } sascha@3397: sascha@3402: public static NumberFormat getFixDeltaWW(CallContext context) { sascha@3402: return getFormatter( christian@3771: context, christian@3771: FIX_DELTA_W_DELTA_W_MIN_DIGITS, christian@3771: FIX_DELTA_W_DELTA_W_MAX_DIGITS); sascha@3402: } sascha@3397: felix@3017: public static NumberFormat getMeterFormat(CallContext context) { felix@3017: return getFormatter( christian@3771: context, christian@3771: 0, christian@3771: 2); sascha@3076: felix@3017: } sascha@3402: sascha@3402: public static DateFormat getDateFormatter(CallMeta m, String pattern) { sascha@3402: Locale locale = Resources.getLocale(m); sascha@3402: return new SimpleDateFormat(pattern, locale); sascha@3402: } ingo@445: } ingo@445: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :