gernotbelger@8948: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@8948: * Software engineering by gernotbelger@8948: * Björnsen Beratende Ingenieure GmbH gernotbelger@8948: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@8948: * gernotbelger@8948: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@8948: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@8948: * documentation coming with Dive4Elements River for details. gernotbelger@8948: */ gernotbelger@8948: package org.dive4elements.river.artifacts.sinfo.common; gernotbelger@8948: gernotbelger@8948: import java.text.NumberFormat; gernotbelger@8948: gernotbelger@8948: import org.apache.commons.lang.StringUtils; gernotbelger@8948: import org.dive4elements.artifacts.CallContext; gernotbelger@9000: import org.dive4elements.river.artifacts.common.AbstractResultType; gernotbelger@9000: import org.dive4elements.river.artifacts.common.I18NStrings; gernotbelger@8948: import org.dive4elements.river.artifacts.resources.Resources; gernotbelger@8948: import org.dive4elements.river.artifacts.sinfo.tkhcalculation.SoilKind; gernotbelger@8948: import org.dive4elements.river.utils.Formatter; gernotbelger@8948: import org.dive4elements.river.utils.RiverUtils; gernotbelger@8948: gernotbelger@8948: /** gernotbelger@8948: * Result type for data that goes into {@link SInfoResultRow}s. gernotbelger@8948: * gernotbelger@8948: * @author Gernot Belger gernotbelger@8948: */ gernotbelger@9000: public abstract class SInfoResultType extends AbstractResultType { gernotbelger@8948: gernotbelger@9006: private static final long serialVersionUID = 1L; gernotbelger@9006: gernotbelger@9000: private SInfoResultType(final String unit, final String csvHeader) { gernotbelger@9000: super(unit, csvHeader, csvHeader); gernotbelger@9000: } gernotbelger@8948: gernotbelger@9000: private SInfoResultType(final String unit, final String csvHeader, final String pdfHeader) { gernotbelger@9000: super(unit, csvHeader, pdfHeader); gernotbelger@9000: } gernotbelger@8948: gernotbelger@9000: public static final SInfoResultType waterlevel = new SInfoResultType(null, SInfoI18NStrings.CSV_WATERLEVEL_HEADER, gernotbelger@9000: "sinfo.export.flow_depth.pdf.header.waterlevel") { gernotbelger@9006: private static final long serialVersionUID = 1L; gernotbelger@9006: gernotbelger@8948: @Override gernotbelger@8948: public String exportValue(final CallContext context, final Object value) { gernotbelger@8948: final double doubleValue = asDouble(value); gernotbelger@8948: return exportDoubleValue(context, doubleValue); gernotbelger@8948: } gernotbelger@8948: gernotbelger@8948: @Override gernotbelger@8948: protected NumberFormat createFormatter(final CallContext context) { gernotbelger@8948: // REMARK: other modules use Formatter.getWaterlevelW(context) instead, but that format with a variable number of gernotbelger@8948: // digits. gernotbelger@8948: return Formatter.getFlowDepth(context); gernotbelger@8948: } gernotbelger@9000: }; gernotbelger@8948: gernotbelger@9000: public static final SInfoResultType waterlevelLabel = new SInfoResultType(I18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_LABEL_HEADER) { gernotbelger@9006: private static final long serialVersionUID = 1L; gernotbelger@9006: gernotbelger@8948: @Override gernotbelger@8948: public String exportValue(final CallContext context, final Object value) { gernotbelger@8948: return exportStringValue(value); gernotbelger@8948: } gernotbelger@8948: gernotbelger@8948: @Override gernotbelger@8948: protected NumberFormat createFormatter(final CallContext context) { gernotbelger@8948: throw new UnsupportedOperationException(); gernotbelger@8948: } gernotbelger@9000: }; gernotbelger@8948: gernotbelger@9000: public static final SInfoResultType discharge = new SInfoResultType(I18NStrings.UNIT_CUBIC_M, SInfoI18NStrings.CSV_DISCHARGE_HEADER) { gernotbelger@9006: private static final long serialVersionUID = 1L; gernotbelger@9006: gernotbelger@8948: @Override gernotbelger@8948: public String exportValue(final CallContext context, final Object value) { gernotbelger@8948: final double doubleValue = asDouble(value); gernotbelger@8948: final double roundedDischarge = RiverUtils.roundQ(doubleValue); gernotbelger@8948: return exportDoubleValue(context, roundedDischarge); gernotbelger@8948: } gernotbelger@8948: gernotbelger@8948: @Override gernotbelger@8948: protected NumberFormat createFormatter(final CallContext context) { gernotbelger@8948: return Formatter.getWaterlevelQ(context); gernotbelger@8948: } gernotbelger@9000: }; gernotbelger@8948: gernotbelger@9000: public static final SInfoResultType meanBedHeight = new SInfoResultType(null, SInfoI18NStrings.CSV_MEAN_BED_HEIGHT_HEADER, gernotbelger@9000: SInfoI18NStrings.CSV_MEAN_BED_HEIGHT_HEADER_SHORT) { gernotbelger@9006: private static final long serialVersionUID = 1L; gernotbelger@9006: gernotbelger@8948: @Override gernotbelger@8948: public String exportValue(final CallContext context, final Object value) { gernotbelger@8948: final double doubleValue = asDouble(value); gernotbelger@8948: return exportDoubleValue(context, doubleValue); gernotbelger@8948: } gernotbelger@8948: gernotbelger@8948: @Override gernotbelger@8948: protected NumberFormat createFormatter(final CallContext context) { gernotbelger@8948: return Formatter.getMeanBedHeight(context); gernotbelger@8948: } gernotbelger@9000: }; gernotbelger@8948: gernotbelger@9000: public static final SInfoResultType soundingLabel = new SInfoResultType(I18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_SOUNDING_HEADER) { gernotbelger@9006: private static final long serialVersionUID = 1L; gernotbelger@9006: gernotbelger@8948: @Override gernotbelger@8948: public String exportValue(final CallContext context, final Object value) { gernotbelger@8948: return exportStringValue(value); gernotbelger@8948: } gernotbelger@8948: gernotbelger@8948: @Override gernotbelger@8948: protected NumberFormat createFormatter(final CallContext context) { gernotbelger@8948: throw new UnsupportedOperationException(); gernotbelger@8948: } gernotbelger@9000: }; gernotbelger@9000: public static final SInfoResultType flowdepthDevelopmentPerYear = new SInfoResultType(I18NStrings.UNIT_CM_A, gernotbelger@9000: SInfoI18NStrings.CSV_FLOWDEPTH_DEVELOPMENT_PER_YEAR_HEADER) { gernotbelger@9006: private static final long serialVersionUID = 1L; gernotbelger@9006: gernotbelger@9000: @Override gernotbelger@9000: public String exportValue(final CallContext context, final Object value) { gernotbelger@9000: final double doubleValue = asDouble(value); gernotbelger@9000: return exportDoubleValue(context, doubleValue); gernotbelger@9000: } gernotbelger@8948: gernotbelger@9000: @Override gernotbelger@9000: protected NumberFormat createFormatter(final CallContext context) { gernotbelger@9000: return Formatter.getFlowDepthDevelopmentPerYear(context); gernotbelger@9000: } gernotbelger@9000: }; gernotbelger@9000: gernotbelger@9000: public static final SInfoResultType flowdepthmin = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_MIN_HEADER) { gernotbelger@9006: private static final long serialVersionUID = 1L; gernotbelger@9006: gernotbelger@8948: @Override gernotbelger@8948: public String exportValue(final CallContext context, final Object value) { gernotbelger@8948: final double doubleValue = asDouble(value); gernotbelger@8948: return exportDoubleValue(context, doubleValue); gernotbelger@8948: } gernotbelger@8948: gernotbelger@8948: @Override gernotbelger@8948: protected NumberFormat createFormatter(final CallContext context) { gernotbelger@8948: return Formatter.getFlowDepth(context); gernotbelger@8948: } gernotbelger@9000: }; gernotbelger@8948: gernotbelger@9000: public static final SInfoResultType flowdepthmax = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_MAX_HEADER) { gernotbelger@9006: private static final long serialVersionUID = 1L; gernotbelger@9006: gernotbelger@8948: @Override gernotbelger@8948: public String exportValue(final CallContext context, final Object value) { gernotbelger@8948: final double doubleValue = asDouble(value); gernotbelger@8948: return exportDoubleValue(context, doubleValue); gernotbelger@8948: } gernotbelger@8948: gernotbelger@8948: @Override gernotbelger@8948: protected NumberFormat createFormatter(final CallContext context) { gernotbelger@8948: return Formatter.getFlowDepth(context); gernotbelger@8948: } gernotbelger@9000: }; gernotbelger@8948: gernotbelger@9000: public static final SInfoResultType gaugeLabel = new SInfoResultType(I18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_GAUGE_HEADER) { gernotbelger@9006: private static final long serialVersionUID = 1L; gernotbelger@9006: gernotbelger@8948: @Override gernotbelger@8948: public String exportValue(final CallContext context, final Object value) { gernotbelger@8948: return exportStringValue(value); gernotbelger@8948: } gernotbelger@8948: gernotbelger@8948: @Override gernotbelger@8948: protected NumberFormat createFormatter(final CallContext context) { gernotbelger@8948: throw new UnsupportedOperationException(); gernotbelger@8948: } gernotbelger@9000: }; gernotbelger@8948: gernotbelger@9000: public static final SInfoResultType location = new SInfoResultType(I18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_LOCATION_HEADER) { gernotbelger@9006: private static final long serialVersionUID = 1L; gernotbelger@9006: gernotbelger@8948: @Override gernotbelger@8948: public String exportValue(final CallContext context, final Object value) { gernotbelger@8948: return exportStringValue(value); gernotbelger@8948: } gernotbelger@8948: gernotbelger@8948: @Override gernotbelger@8948: protected NumberFormat createFormatter(final CallContext context) { gernotbelger@8948: throw new UnsupportedOperationException(); gernotbelger@8948: } gernotbelger@9000: }; gernotbelger@8950: gernotbelger@9000: public static final SInfoResultType soilkind = new SInfoResultType(I18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_TKHKIND_HEADER, gernotbelger@9000: "sinfo.export.tkh.pdf.header.tkhkind") { gernotbelger@9006: private static final long serialVersionUID = 1L; gernotbelger@9006: gernotbelger@8948: @Override gernotbelger@8948: public String exportValue(final CallContext context, final Object value) { gernotbelger@8948: gernotbelger@8948: if (value == null) gernotbelger@8948: return StringUtils.EMPTY; gernotbelger@8948: gernotbelger@8948: final SoilKind kind = (SoilKind) value; gernotbelger@8948: gernotbelger@8948: final String key = SInfoI18NStrings.PREFIX_TKH_KIND + kind.name(); gernotbelger@8948: return Resources.getMsg(context.getMeta(), key, key); gernotbelger@8948: } gernotbelger@8948: gernotbelger@8948: @Override gernotbelger@8948: protected NumberFormat createFormatter(final CallContext context) { gernotbelger@8948: throw new UnsupportedOperationException(); gernotbelger@8948: } gernotbelger@9000: }; gernotbelger@8950: gernotbelger@9000: public static final SInfoResultType flowdepth = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_HEADER) { gernotbelger@9006: private static final long serialVersionUID = 1L; gernotbelger@9006: gernotbelger@8951: @Override gernotbelger@8951: public String exportValue(final CallContext context, final Object value) { gernotbelger@8951: final double doubleValue = asDouble(value); gernotbelger@8951: return exportDoubleValue(context, doubleValue); gernotbelger@8951: } gernotbelger@8951: gernotbelger@8951: @Override gernotbelger@8951: protected NumberFormat createFormatter(final CallContext context) { gernotbelger@8951: return Formatter.getFlowDepth(context); gernotbelger@8951: } gernotbelger@8948: }; gernotbelger@8948: gernotbelger@9000: public static final SInfoResultType d50 = new SInfoResultType(null, null) { gernotbelger@9006: private static final long serialVersionUID = 1L; gernotbelger@9006: gernotbelger@9000: @Override gernotbelger@9000: public String exportValue(final CallContext context, final Object value) { gernotbelger@9000: final double doubleValue = asDouble(value); gernotbelger@9000: return exportDoubleValue(context, doubleValue); gernotbelger@9000: } gernotbelger@8948: gernotbelger@9000: @Override gernotbelger@9000: protected NumberFormat createFormatter(final CallContext context) { gernotbelger@9000: throw new UnsupportedOperationException(); gernotbelger@9000: } gernotbelger@9000: }; gernotbelger@8948: gernotbelger@9000: public static final SInfoResultType velocity = new SInfoResultType(null, null) { gernotbelger@9006: private static final long serialVersionUID = 1L; gernotbelger@9006: gernotbelger@9000: @Override gernotbelger@9000: public String exportValue(final CallContext context, final Object value) { gernotbelger@9000: final double doubleValue = asDouble(value); gernotbelger@9000: return exportDoubleValue(context, doubleValue); gernotbelger@9000: } gernotbelger@8948: gernotbelger@9000: @Override gernotbelger@9000: protected NumberFormat createFormatter(final CallContext context) { gernotbelger@9000: throw new UnsupportedOperationException(); gernotbelger@9000: } gernotbelger@9000: }; gernotbelger@8948: gernotbelger@9000: public static final SInfoResultType tau = new SInfoResultType(null, null) { gernotbelger@9006: private static final long serialVersionUID = 1L; gernotbelger@9006: gernotbelger@9000: @Override gernotbelger@9000: public String exportValue(final CallContext context, final Object value) { gernotbelger@9000: final double doubleValue = asDouble(value); gernotbelger@9000: return exportDoubleValue(context, doubleValue); gernotbelger@9000: } gernotbelger@8949: gernotbelger@9000: @Override gernotbelger@9000: protected NumberFormat createFormatter(final CallContext context) { gernotbelger@9000: throw new UnsupportedOperationException(); gernotbelger@9000: } gernotbelger@9000: }; gernotbelger@9000: gernotbelger@9000: public static final SInfoResultType tkh = new SInfoResultType(I18NStrings.UNIT_CM, SInfoI18NStrings.CSV_TKH_HEADER, SInfoI18NStrings.CSV_TKH_HEADER_SHORT) { gernotbelger@9006: private static final long serialVersionUID = 1L; gernotbelger@9006: gernotbelger@9000: @Override gernotbelger@9000: public String exportValue(final CallContext context, final Object value) { gernotbelger@9000: final double doubleValue = asDouble(value); gernotbelger@9000: return exportDoubleValue(context, doubleValue); gernotbelger@9000: } gernotbelger@9000: gernotbelger@9000: @Override gernotbelger@9000: protected NumberFormat createFormatter(final CallContext context) { gernotbelger@9000: return Formatter.getTkh(context); gernotbelger@9000: } gernotbelger@9000: }; gernotbelger@9000: gernotbelger@9000: public static final SInfoResultType tkhup = new SInfoResultType(I18NStrings.UNIT_M, null) { gernotbelger@9006: private static final long serialVersionUID = 1L; gernotbelger@9006: gernotbelger@9000: @Override gernotbelger@9000: public String exportValue(final CallContext context, final Object value) { gernotbelger@9000: final double doubleValue = asDouble(value); gernotbelger@9000: return exportDoubleValue(context, doubleValue); gernotbelger@9000: } gernotbelger@9000: gernotbelger@9000: @Override gernotbelger@9000: protected NumberFormat createFormatter(final CallContext context) { gernotbelger@9000: throw new UnsupportedOperationException(); gernotbelger@9000: } gernotbelger@9000: }; gernotbelger@9000: gernotbelger@9000: public static final SInfoResultType tkhdown = new SInfoResultType(I18NStrings.UNIT_M, null) { gernotbelger@9006: private static final long serialVersionUID = 1L; gernotbelger@9006: gernotbelger@9000: @Override gernotbelger@9000: public String exportValue(final CallContext context, final Object value) { gernotbelger@9000: final double doubleValue = asDouble(value); gernotbelger@9000: return exportDoubleValue(context, doubleValue); gernotbelger@9000: } gernotbelger@9000: gernotbelger@9000: @Override gernotbelger@9000: protected NumberFormat createFormatter(final CallContext context) { gernotbelger@9000: throw new UnsupportedOperationException(); gernotbelger@9000: } gernotbelger@9000: }; gernotbelger@9000: gernotbelger@9000: public static final SInfoResultType flowdepthtkh = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTHTKH_HEADER) { gernotbelger@9006: private static final long serialVersionUID = 1L; gernotbelger@9006: gernotbelger@9000: @Override gernotbelger@9000: public String exportValue(final CallContext context, final Object value) { gernotbelger@9000: final double doubleValue = asDouble(value); gernotbelger@9000: return exportDoubleValue(context, doubleValue); gernotbelger@9000: } gernotbelger@9000: gernotbelger@9000: @Override gernotbelger@9000: protected NumberFormat createFormatter(final CallContext context) { gernotbelger@9000: return Formatter.getFlowDepth(context); gernotbelger@9000: } gernotbelger@9000: }; gernotbelger@9000: gernotbelger@9000: public static final SInfoResultType flowdepthDevelopment = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_DEVELOPMENT_HEADER, gernotbelger@9000: SInfoI18NStrings.PDF_FLOWDEPTH_DEVELOPMENT_HEADER) { gernotbelger@9006: private static final long serialVersionUID = 1L; gernotbelger@9006: gernotbelger@9000: @Override gernotbelger@9000: public String exportValue(final CallContext context, final Object value) { gernotbelger@9000: final double doubleValue = asDouble(value); gernotbelger@9000: return exportDoubleValue(context, doubleValue); gernotbelger@9000: } gernotbelger@9000: gernotbelger@9000: @Override gernotbelger@9000: protected NumberFormat createFormatter(final CallContext context) { gernotbelger@9000: return Formatter.getTkh(context); gernotbelger@9000: } gernotbelger@9000: }; gernotbelger@9000: gernotbelger@9000: public static final SInfoResultType depthDevelopmentPerYear = new SInfoResultType(I18NStrings.UNIT_CM_A, gernotbelger@9000: SInfoI18NStrings.CSV_FLOWDEPTH_DEVELOPMENT_PER_YEAR_HEADER) { gernotbelger@9006: private static final long serialVersionUID = 1L; gernotbelger@9006: gernotbelger@9000: @Override gernotbelger@9000: public String exportValue(final CallContext context, final Object value) { gernotbelger@9000: final double doubleValue = asDouble(value); gernotbelger@9000: return exportDoubleValue(context, doubleValue); gernotbelger@9000: } gernotbelger@9000: gernotbelger@9000: @Override gernotbelger@9000: protected NumberFormat createFormatter(final CallContext context) { gernotbelger@9000: return Formatter.getFlowDepthDevelopmentPerYear(context); gernotbelger@9000: } gernotbelger@9000: }; gernotbelger@9000: public static final SInfoResultType waterlevelDifference = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_WATERLEVEL_DIFFERENCE_HEADER, gernotbelger@9109: "sinfo.export.csv.header.waterlevel.difference") { gernotbelger@9006: private static final long serialVersionUID = 1L; gernotbelger@9006: gernotbelger@9000: @Override gernotbelger@9000: public String exportValue(final CallContext context, final Object value) { gernotbelger@9000: final double doubleValue = asDouble(value); gernotbelger@9000: return exportDoubleValue(context, doubleValue); gernotbelger@9000: } gernotbelger@9000: gernotbelger@9000: @Override gernotbelger@9000: protected NumberFormat createFormatter(final CallContext context) { gernotbelger@9000: return Formatter.getTkh(context); gernotbelger@9000: } gernotbelger@9000: }; gernotbelger@9000: public static final SInfoResultType bedHeightDifference = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_MEAN_BED_HEIGHT_DIFFERENCE_HEADER, gernotbelger@9109: "sinfo.export.csv.header.mean_bed_height.difference") { gernotbelger@9006: private static final long serialVersionUID = 1L; gernotbelger@9006: gernotbelger@9000: @Override gernotbelger@9000: public String exportValue(final CallContext context, final Object value) { gernotbelger@9000: final double doubleValue = asDouble(value); gernotbelger@9000: return exportDoubleValue(context, doubleValue); gernotbelger@9000: } gernotbelger@9000: gernotbelger@9000: @Override gernotbelger@9000: protected NumberFormat createFormatter(final CallContext context) { gernotbelger@9000: return Formatter.getTkh(context); gernotbelger@9000: } gernotbelger@9000: }; gernotbelger@9000: public static final SInfoResultType flowdepthCurrent = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_CURRENT_HEADER) { gernotbelger@9006: private static final long serialVersionUID = 1L; gernotbelger@9006: gernotbelger@9000: @Override gernotbelger@9000: public String exportValue(final CallContext context, final Object value) { gernotbelger@9000: final double doubleValue = asDouble(value); gernotbelger@9000: return exportDoubleValue(context, doubleValue); gernotbelger@9000: } gernotbelger@9000: gernotbelger@9000: @Override gernotbelger@9000: protected NumberFormat createFormatter(final CallContext context) { gernotbelger@9000: return Formatter.getFlowDepth(context); gernotbelger@9000: } gernotbelger@9000: }; gernotbelger@9000: public static final SInfoResultType flowdepthHistorical = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_HISTORICAL_HEADER) { gernotbelger@9006: private static final long serialVersionUID = 1L; gernotbelger@9006: gernotbelger@9000: @Override gernotbelger@9000: public String exportValue(final CallContext context, final Object value) { gernotbelger@9000: final double doubleValue = asDouble(value); gernotbelger@9000: return exportDoubleValue(context, doubleValue); gernotbelger@9000: } gernotbelger@9000: gernotbelger@9000: @Override gernotbelger@9000: protected NumberFormat createFormatter(final CallContext context) { gernotbelger@9000: return Formatter.getFlowDepth(context); gernotbelger@9000: } gernotbelger@9000: }; gernotbelger@9000: gernotbelger@8948: }