Mercurial > dive4elements > river
view artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/SInfoResultType.java @ 9358:8eddc2393750
Fixed: S-Info flood duration Q-D interpolation for non monotonous Q values, NaN instead of -1 in error cases
author | mschaefer |
---|---|
date | Wed, 01 Aug 2018 13:20:38 +0200 |
parents | 7b2b086e45f0 |
children | bd5f5d2220fa |
line wrap: on
line source
/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde * Software engineering by * Björnsen Beratende Ingenieure GmbH * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt * * 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.artifacts.sinfo.common; import java.text.NumberFormat; import org.apache.commons.lang.StringUtils; import org.dive4elements.artifacts.CallContext; import org.dive4elements.river.artifacts.common.AbstractResultType; import org.dive4elements.river.artifacts.common.I18NStrings; import org.dive4elements.river.artifacts.resources.Resources; import org.dive4elements.river.artifacts.sinfo.tkhcalculation.SoilKind; import org.dive4elements.river.model.Attribute.AttributeKey; import org.dive4elements.river.utils.Formatter; import org.dive4elements.river.utils.RiverUtils; /** * Result type for data that goes into {@link SInfoResultRow}s. * * @author Gernot Belger */ public abstract class SInfoResultType extends AbstractResultType { private static final long serialVersionUID = 1L; private SInfoResultType(final String unit, final String csvHeader) { super(unit, csvHeader, csvHeader); } private SInfoResultType(final String unit, final String csvHeader, final String pdfHeader) { super(unit, csvHeader, pdfHeader); } public static final SInfoResultType customMultiRowColWaterlevel = new SInfoResultType(null, SInfoI18NStrings.CSV_WATERLEVEL_HEADER, "sinfo.export.flow_depth.pdf.header.waterlevel") { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { throw new UnsupportedOperationException(); } @Override protected NumberFormat createFormatter(final CallContext context) { throw new UnsupportedOperationException(); } }; public static final SInfoResultType floodDischarge = new SInfoResultType(I18NStrings.UNIT_CUBIC_M, "sinfo.export.flood_duration.csv.header.discharge", "sinfo.export.flood_duration.pdf.header.discharge") { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { return Formatter.getWaterlevelQ(context); } }; public static final SInfoResultType floodDuration = new SInfoResultType(null, "sinfo.export.flood_duration.csv.header.duration", "sinfo.export.flood_duration.pdf.header.duration") { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { return Formatter.getIntegerFormatter(context); } }; public static final SInfoResultType waterlevel = new SInfoResultType(null, SInfoI18NStrings.CSV_WATERLEVEL_HEADER, "sinfo.export.flow_depth.pdf.header.waterlevel") { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { // REMARK: other modules use Formatter.getWaterlevelW(context) instead, but that format with a variable number of // digits. return Formatter.getFlowDepth(context); } }; public static final SInfoResultType waterlevel1 = new SInfoResultType(null, "sinfo.flood_duration.header.mainvalue.1.w", "sinfo.flood_duration.header.pdf.mainvalue.1.w") { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { return Formatter.getFlowDepth(context); } }; public static final SInfoResultType waterlevel2 = new SInfoResultType(null, "sinfo.flood_duration.header.mainvalue.2.w", "sinfo.flood_duration.header.pdf.mainvalue.2.w") { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { return Formatter.getFlowDepth(context); } }; // public static final SInfoResultType waterlevel3 = new SInfoResultType(null, // "sinfo.flood_duration.header.mainvalue.3.w", // "sinfo.flood_duration.header.pdf.mainvalue.3.w") { // private static final long serialVersionUID = 1L; // // @Override // public String exportValue(final CallContext context, final Object value) { // final double doubleValue = asDouble(value); // return exportDoubleValue(context, doubleValue); // } // // @Override // protected NumberFormat createFormatter(final CallContext context) { // return Formatter.getFlowDepth(context); // } // }; public static final SInfoResultType infrastructuretype = new SInfoResultType(I18NStrings.UNIT_NONE, "sinfo.export.flood_duration.csv.header.infrastructure_type", "sinfo.export.flood_duration.pdf.header.infrastructure_type") { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { return exportStringValue(value); } @Override protected NumberFormat createFormatter(final CallContext context) { throw new UnsupportedOperationException(); } }; public static final SInfoResultType dischargeLong = new SInfoResultType(I18NStrings.UNIT_CUBIC_M, "sinfo.export.collision.csv.header.discharge_long") { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); final double roundedDischarge = RiverUtils.roundQ(doubleValue); return exportDoubleValue(context, roundedDischarge); } @Override protected NumberFormat createFormatter(final CallContext context) { return Formatter.getWaterlevelQ(context); } }; public static final SInfoResultType discharge = new SInfoResultType(I18NStrings.UNIT_CUBIC_M, SInfoI18NStrings.CSV_DISCHARGE_HEADER) { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); final double roundedDischarge = RiverUtils.roundQ(doubleValue); return exportDoubleValue(context, roundedDischarge); } @Override protected NumberFormat createFormatter(final CallContext context) { return Formatter.getWaterlevelQ(context); } }; public static final SInfoResultType discharge1 = new SInfoResultType(I18NStrings.UNIT_CUBIC_M, "sinfo.flood_duration.header.mainvalue.1.q", "sinfo.flood_duration.header.pdf.mainvalue.1.q") { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); final double roundedDischarge = RiverUtils.roundQ(doubleValue); return exportDoubleValue(context, roundedDischarge); } @Override protected NumberFormat createFormatter(final CallContext context) { return Formatter.getWaterlevelQ(context); } }; public static final SInfoResultType discharge2 = new SInfoResultType(I18NStrings.UNIT_CUBIC_M, "sinfo.flood_duration.header.mainvalue.2.q", "sinfo.flood_duration.header.pdf.mainvalue.2.q") { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); final double roundedDischarge = RiverUtils.roundQ(doubleValue); return exportDoubleValue(context, roundedDischarge); } @Override protected NumberFormat createFormatter(final CallContext context) { return Formatter.getWaterlevelQ(context); } }; public static final SInfoResultType discharge3 = new SInfoResultType(I18NStrings.UNIT_CUBIC_M, "sinfo.flood_duration.header.mainvalue.3.q", "sinfo.flood_duration.header.pdf.mainvalue.3.q") { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); final double roundedDischarge = RiverUtils.roundQ(doubleValue); return exportDoubleValue(context, roundedDischarge); } @Override protected NumberFormat createFormatter(final CallContext context) { return Formatter.getWaterlevelQ(context); } }; public static final SInfoResultType meanBedHeight = new SInfoResultType(null, SInfoI18NStrings.CSV_MEAN_BED_HEIGHT_HEADER, SInfoI18NStrings.CSV_MEAN_BED_HEIGHT_HEADER_SHORT) { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { return Formatter.getMeanBedHeight(context); } }; public static final SInfoResultType soundingLabel = new SInfoResultType(I18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_SOUNDING_HEADER) { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { return exportStringValue(value); } @Override protected NumberFormat createFormatter(final CallContext context) { throw new UnsupportedOperationException(); } }; public static final SInfoResultType flowdepthDevelopmentPerYear = new SInfoResultType(I18NStrings.UNIT_CM_A, SInfoI18NStrings.CSV_FLOWDEPTH_DEVELOPMENT_PER_YEAR_HEADER, "sinfo.export.pdf.header.flowdepth.development.per.year") { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { return Formatter.getFlowDepthDevelopmentPerYear(context); } }; public static final SInfoResultType flowdepthmin = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_MIN_HEADER) { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { return Formatter.getFlowDepth(context); } }; public static final SInfoResultType flowdepthmax = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_MAX_HEADER) { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { return Formatter.getFlowDepth(context); } }; public static final SInfoResultType riverside = new SInfoResultType(I18NStrings.UNIT_NONE, "sinfo.export.flood_duration.csv.header.riverside") { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { return localizeRiverside(context, (AttributeKey) value); } @Override protected NumberFormat createFormatter(final CallContext context) { throw new UnsupportedOperationException(); } }; /** * Returns the localized text of a riverside * FIXME: Find a better place for this common method */ public static final String localizeRiverside(final CallContext context, final AttributeKey riverside) { if (riverside == AttributeKey.LEFT) return Resources.getMsg(context.getMeta(), "riverside.left"); else if (riverside == AttributeKey.RIGHT) return Resources.getMsg(context.getMeta(), "riverside.right"); else return "?"; } public static final SInfoResultType soilkind = new SInfoResultType(I18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_TKHKIND_HEADER, "sinfo.export.tkh.pdf.header.tkhkind") { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { if (value == null) return StringUtils.EMPTY; final SoilKind kind = (SoilKind) value; final String key = SInfoI18NStrings.PREFIX_TKH_KIND + kind.name(); return Resources.getMsg(context.getMeta(), key, key); } @Override protected NumberFormat createFormatter(final CallContext context) { throw new UnsupportedOperationException(); } }; public static final SInfoResultType flowdepth = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_HEADER) { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { return Formatter.getFlowDepth(context); } }; public static final SInfoResultType d50 = new SInfoResultType(null, null) { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { throw new UnsupportedOperationException(); } }; public static final SInfoResultType velocity = new SInfoResultType(null, null) { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { throw new UnsupportedOperationException(); } }; public static final SInfoResultType tau = new SInfoResultType(null, null) { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { throw new UnsupportedOperationException(); } }; public static final SInfoResultType tkh = new SInfoResultType(I18NStrings.UNIT_CM, SInfoI18NStrings.CSV_TKH_HEADER, SInfoI18NStrings.CSV_TKH_HEADER_SHORT) { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { return Formatter.getTkh(context); } }; public static final SInfoResultType tkhup = new SInfoResultType(I18NStrings.UNIT_M, null) { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { throw new UnsupportedOperationException(); } }; public static final SInfoResultType tkhdown = new SInfoResultType(I18NStrings.UNIT_M, null) { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { throw new UnsupportedOperationException(); } }; public static final SInfoResultType flowdepthtkh = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTHTKH_HEADER) { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { return Formatter.getFlowDepth(context); } }; public static final SInfoResultType channelWidth = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_CHANNEL_WIDTH_HEADER) { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { return Formatter.getChannelWidth(context); } }; public static final SInfoResultType channelDepth = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_CHANNEL_DEPTH_HEADER) { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { return Formatter.getChannelDepth(context); } }; public static final SInfoResultType flowdepthDevelopment = new SInfoResultType(I18NStrings.UNIT_CM, SInfoI18NStrings.CSV_FLOWDEPTH_DEVELOPMENT_HEADER, SInfoI18NStrings.PDF_FLOWDEPTH_DEVELOPMENT_HEADER) { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { return Formatter.getTkh(context); } }; public static final SInfoResultType waterlevelDifference = new SInfoResultType(I18NStrings.UNIT_CM, SInfoI18NStrings.CSV_WATERLEVEL_DIFFERENCE_HEADER, SInfoI18NStrings.CSV_WATERLEVEL_DIFFERENCE_HEADER) { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { return Formatter.getTkh(context); } }; public static final SInfoResultType bedHeightDifference = new SInfoResultType(I18NStrings.UNIT_CM, SInfoI18NStrings.CSV_MEAN_BED_HEIGHT_DIFFERENCE_HEADER, "sinfo.export.csv.header.mean_bed_height.difference") { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { return Formatter.getTkh(context); } }; public static final SInfoResultType flowdepthCurrent = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_CURRENT_HEADER) { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { return Formatter.getFlowDepth(context); } }; public static final SInfoResultType flowdepthHistorical = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_HISTORICAL_HEADER) { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { return Formatter.getFlowDepth(context); } }; public static final SInfoResultType infrastructureHeight = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_INFRASTRUCTURE_HEIGHT_HEADER, SInfoI18NStrings.PDF_INFRASTRUCTURE_HEIGHT_HEADER) { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { return Formatter.getInfrastructureHeight(context); } }; public static final SInfoResultType collisionCount = new SInfoResultType(I18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_COLLISION_COUNT_HEADER) { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { return Formatter.getCollisionCount(context); } }; public static final SInfoResultType collisionGaugeW = new SInfoResultType(I18NStrings.UNIT_CM, SInfoI18NStrings.CSV_COLLISION_GAUGEW_HEADER) { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { final double doubleValue = asDouble(value); return exportDoubleValue(context, doubleValue); } @Override protected NumberFormat createFormatter(final CallContext context) { return Formatter.getCollisionGaugeW(context); } }; public static final SInfoResultType years = new SInfoResultType(I18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_YEARS_HEADER) { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { return exportStringValue(value); } @Override protected NumberFormat createFormatter(final CallContext context) { throw new UnsupportedOperationException(); } }; public static final SInfoResultType dischargeZone = new SInfoResultType(I18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_DISCHARGE_ZONE_HEADER) { private static final long serialVersionUID = 1L; @Override public String exportValue(final CallContext context, final Object value) { return exportStringValue(value); } @Override protected NumberFormat createFormatter(final CallContext context) { throw new UnsupportedOperationException(); } }; }