Mercurial > dive4elements > river
view artifacts/src/main/java/org/dive4elements/river/artifacts/common/AbstractResultType.java @ 9312:740d65e4aa14
Q [m³/s] one message
author | gernotbelger |
---|---|
date | Thu, 26 Jul 2018 15:54:20 +0200 |
parents | 1614cb14308f |
children | d32b11d585cd |
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.common; import java.text.DateFormat; import java.text.NumberFormat; import java.util.Date; import java.util.HashMap; import java.util.Locale; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.dive4elements.artifacts.CallContext; import org.dive4elements.artifacts.CallMeta; import org.dive4elements.river.artifacts.resources.Resources; /** * @author Domenico Nardi Tironi */ public abstract class AbstractResultType implements IResultType { /* Cache for formatters because Formatter will always create new formats (which is very expensive) */ private final Map<Locale, NumberFormat> formatters = new HashMap<>(); private final String unit; private final String csvHeader; private final String pdfHeader; protected AbstractResultType(final String unit, final String csvHeader, final String pdfHeader) { this.unit = unit; this.csvHeader = csvHeader; this.pdfHeader = pdfHeader; } @Override public abstract String exportValue(final CallContext context, final Object value); protected final String exportStringValue(final Object value) { if (value == null) return StringUtils.EMPTY; if (!(value instanceof String)) throw new IllegalStateException(); return (String) value; } @Override public final double asDouble(final Object value) { if (value == null) return Double.NaN; if (!(value instanceof Number)) throw new IllegalStateException(); final Number number = (Number) value; return number.doubleValue(); } protected final String exportDoubleValue(final CallContext context, final double value) { if (Double.isNaN(value)) return StringUtils.EMPTY; final NumberFormat formatter = getFormatter(context); return formatter.format(value); } private NumberFormat getFormatter(final CallContext context) { final CallMeta meta = context.getMeta(); final Locale locale = Resources.getLocale(meta); if (!this.formatters.containsKey(locale)) this.formatters.put(locale, createFormatter(context)); return this.formatters.get(locale); } protected abstract NumberFormat createFormatter(CallContext context); protected final String exportDateValue(final CallContext context, final Date value) { final Locale locale = Resources.getLocale(context.getMeta()); final DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM, locale); return df.format(value); } @Override public final String getCsvHeader() { return this.csvHeader; } public final String getCsvHeader(final CallMeta meta) { return Resources.getMsg(meta, this.csvHeader, this.csvHeader); } @Override public final String getPdfHeader(final CallMeta meta) { return Resources.getMsg(meta, this.pdfHeader, this.pdfHeader); } @Override public final String getUnit() { return this.unit; } }