diff artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/SInfoResultType.java @ 9000:50cc99579a46

Work on uinfo
author gernotbelger
date Thu, 12 Apr 2018 19:16:10 +0200
parents 7c1611b5a59e
children 7134a4c7d1b6
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/SInfoResultType.java	Thu Apr 12 19:15:42 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/common/SInfoResultType.java	Thu Apr 12 19:16:10 2018 +0200
@@ -10,15 +10,12 @@
 package org.dive4elements.river.artifacts.sinfo.common;
 
 import java.text.NumberFormat;
-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.common.AbstractResultType;
+import org.dive4elements.river.artifacts.common.I18NStrings;
 import org.dive4elements.river.artifacts.resources.Resources;
-import org.dive4elements.river.artifacts.sinfo.SInfoI18NStrings;
 import org.dive4elements.river.artifacts.sinfo.tkhcalculation.SoilKind;
 import org.dive4elements.river.utils.Formatter;
 import org.dive4elements.river.utils.RiverUtils;
@@ -28,22 +25,18 @@
  *
  * @author Gernot Belger
  */
-public enum SInfoResultType {
+public abstract class SInfoResultType extends AbstractResultType {
 
-    station(SInfoI18NStrings.UNIT_KM, SInfoI18NStrings.CSV_KM_HEADER) {
-        @Override
-        public String exportValue(final CallContext context, final Object value) {
-            final double doubleValue = asDouble(value);
-            return exportDoubleValue(context, doubleValue);
-        }
+    private SInfoResultType(final String unit, final String csvHeader) {
+        super(unit, csvHeader, csvHeader);
+    }
 
-        @Override
-        protected NumberFormat createFormatter(final CallContext context) {
-            return Formatter.getWaterlevelKM(context);
-        }
-    },
+    private SInfoResultType(final String unit, final String csvHeader, final String pdfHeader) {
+        super(unit, csvHeader, pdfHeader);
+    }
 
-    waterlevel(null, SInfoI18NStrings.CSV_WATERLEVEL_HEADER,"sinfo.export.flow_depth.pdf.header.waterlevel") {
+    public static final SInfoResultType waterlevel = new SInfoResultType(null, SInfoI18NStrings.CSV_WATERLEVEL_HEADER,
+            "sinfo.export.flow_depth.pdf.header.waterlevel") {
         @Override
         public String exportValue(final CallContext context, final Object value) {
             final double doubleValue = asDouble(value);
@@ -56,9 +49,9 @@
             // digits.
             return Formatter.getFlowDepth(context);
         }
-    },
+    };
 
-    waterlevelLabel(SInfoI18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_LABEL_HEADER) {
+    public static final SInfoResultType waterlevelLabel = new SInfoResultType(I18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_LABEL_HEADER) {
         @Override
         public String exportValue(final CallContext context, final Object value) {
             return exportStringValue(value);
@@ -68,9 +61,9 @@
         protected NumberFormat createFormatter(final CallContext context) {
             throw new UnsupportedOperationException();
         }
-    },
+    };
 
-    discharge(SInfoI18NStrings.UNIT_CUBIC_M, SInfoI18NStrings.CSV_DISCHARGE_HEADER) {
+    public static final SInfoResultType discharge = new SInfoResultType(I18NStrings.UNIT_CUBIC_M, SInfoI18NStrings.CSV_DISCHARGE_HEADER) {
         @Override
         public String exportValue(final CallContext context, final Object value) {
             final double doubleValue = asDouble(value);
@@ -82,9 +75,10 @@
         protected NumberFormat createFormatter(final CallContext context) {
             return Formatter.getWaterlevelQ(context);
         }
-    },
+    };
 
-    meanBedHeight(null, SInfoI18NStrings.CSV_MEAN_BED_HEIGHT_HEADER, SInfoI18NStrings.CSV_MEAN_BED_HEIGHT_HEADER_SHORT) {
+    public static final SInfoResultType meanBedHeight = new SInfoResultType(null, SInfoI18NStrings.CSV_MEAN_BED_HEIGHT_HEADER,
+            SInfoI18NStrings.CSV_MEAN_BED_HEIGHT_HEADER_SHORT) {
         @Override
         public String exportValue(final CallContext context, final Object value) {
             final double doubleValue = asDouble(value);
@@ -95,9 +89,9 @@
         protected NumberFormat createFormatter(final CallContext context) {
             return Formatter.getMeanBedHeight(context);
         }
-    },
+    };
 
-    soundingLabel(SInfoI18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_SOUNDING_HEADER) {
+    public static final SInfoResultType soundingLabel = new SInfoResultType(I18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_SOUNDING_HEADER) {
         @Override
         public String exportValue(final CallContext context, final Object value) {
             return exportStringValue(value);
@@ -107,9 +101,22 @@
         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) {
+        @Override
+        public String exportValue(final CallContext context, final Object value) {
+            final double doubleValue = asDouble(value);
+            return exportDoubleValue(context, doubleValue);
+        }
 
-    flowdepthmin(SInfoI18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_MIN_HEADER) {
+        @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) {
         @Override
         public String exportValue(final CallContext context, final Object value) {
             final double doubleValue = asDouble(value);
@@ -120,9 +127,9 @@
         protected NumberFormat createFormatter(final CallContext context) {
             return Formatter.getFlowDepth(context);
         }
-    },
+    };
 
-    flowdepthmax(SInfoI18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_MAX_HEADER) {
+    public static final SInfoResultType flowdepthmax = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_MAX_HEADER) {
         @Override
         public String exportValue(final CallContext context, final Object value) {
             final double doubleValue = asDouble(value);
@@ -133,9 +140,9 @@
         protected NumberFormat createFormatter(final CallContext context) {
             return Formatter.getFlowDepth(context);
         }
-    },
+    };
 
-    gaugeLabel(SInfoI18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_GAUGE_HEADER) {
+    public static final SInfoResultType gaugeLabel = new SInfoResultType(I18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_GAUGE_HEADER) {
         @Override
         public String exportValue(final CallContext context, final Object value) {
             return exportStringValue(value);
@@ -145,9 +152,9 @@
         protected NumberFormat createFormatter(final CallContext context) {
             throw new UnsupportedOperationException();
         }
-    },
+    };
 
-    location(SInfoI18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_LOCATION_HEADER) {
+    public static final SInfoResultType location = new SInfoResultType(I18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_LOCATION_HEADER) {
         @Override
         public String exportValue(final CallContext context, final Object value) {
             return exportStringValue(value);
@@ -157,9 +164,10 @@
         protected NumberFormat createFormatter(final CallContext context) {
             throw new UnsupportedOperationException();
         }
-    },
+    };
 
-    soilkind(SInfoI18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_TKHKIND_HEADER, "sinfo.export.tkh.pdf.header.tkhkind") {
+    public static final SInfoResultType soilkind = new SInfoResultType(I18NStrings.UNIT_NONE, SInfoI18NStrings.CSV_TKHKIND_HEADER,
+            "sinfo.export.tkh.pdf.header.tkhkind") {
         @Override
         public String exportValue(final CallContext context, final Object value) {
 
@@ -176,173 +184,9 @@
         protected NumberFormat createFormatter(final CallContext context) {
             throw new UnsupportedOperationException();
         }
-    },
-
-    flowdepth(SInfoI18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_HEADER) {
-        @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);
-        }
-    },
-
-    d50(null, null) {
-        @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();
-        }
-    },
-
-    velocity(null, null) {
-        @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();
-        }
-    },
-
-    tau(null, null) {
-        @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();
-        }
-    },
-
-    tkh(SInfoI18NStrings.UNIT_CM, SInfoI18NStrings.CSV_TKH_HEADER, SInfoI18NStrings.CSV_TKH_HEADER_SHORT) {
-        @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);
-        }
-    },
-
-    tkhup(SInfoI18NStrings.UNIT_CM, null) {
-        @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();
-        }
-    },
+    };
 
-    tkhdown(SInfoI18NStrings.UNIT_CM, null) {
-        @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();
-        }
-    },
-
-    flowdepthtkh(SInfoI18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTHTKH_HEADER) {
-        @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);
-        }
-    },
-
-    flowdepthDevelopment(SInfoI18NStrings.UNIT_CM, SInfoI18NStrings.CSV_FLOWDEPTH_DEVELOPMENT_HEADER, SInfoI18NStrings.PDF_FLOWDEPTH_DEVELOPMENT_HEADER) {
-        @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);
-        }
-    },
-    flowdepthDevelopmentPerYear(SInfoI18NStrings.UNIT_CM_A, SInfoI18NStrings.CSV_FLOWDEPTH_DEVELOPMENT_PER_YEAR_HEADER) {
-        @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);
-        }
-    },
-    waterlevelDifference(SInfoI18NStrings.UNIT_CM, SInfoI18NStrings.CSV_WATERLEVEL_DIFFERENCE_HEADER, "sinfo.export.pdf.header.waterlevel.difference") {
-        @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);
-        }
-    },
-    bedHeightDifference(SInfoI18NStrings.UNIT_CM, SInfoI18NStrings.CSV_MEAN_BED_HEIGHT_DIFFERENCE_HEADER, "sinfo.export.pdf.header.mean_bed_height.difference") {
-        @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);
-        }
-    },
-    flowdepthCurrent(SInfoI18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_CURRENT_HEADER) {
-        @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);
-        }
-    },
-    flowdepthHistorical(SInfoI18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_HISTORICAL_HEADER) {
+    public static final SInfoResultType flowdepth = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_HEADER) {
         @Override
         public String exportValue(final CallContext context, final Object value) {
             final double doubleValue = asDouble(value);
@@ -355,82 +199,173 @@
         }
     };
 
-    /* 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;
-
-    private SInfoResultType(final String unit, final String csvAndPdfHeader) {
-        this(unit, csvAndPdfHeader, csvAndPdfHeader);
-    }
-
-    private SInfoResultType(final String unit, final String csvHeader, final String pdfHeader) {
-        this.unit = unit;
-        this.csvHeader = csvHeader;
-        this.pdfHeader = pdfHeader;
-    }
-
-    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;
-    }
-
-    protected final double asDouble(final Object value) {
-        if (value == null)
-            return Double.NaN;
-
-        if (!(value instanceof Number))
-            throw new IllegalStateException();
+    public static final SInfoResultType d50 = new SInfoResultType(null, null) {
+        @Override
+        public String exportValue(final CallContext context, final Object value) {
+            final double doubleValue = asDouble(value);
+            return exportDoubleValue(context, doubleValue);
+        }
 
-        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));
+        @Override
+        protected NumberFormat createFormatter(final CallContext context) {
+            throw new UnsupportedOperationException();
+        }
+    };
 
-        return this.formatters.get(locale);
-    }
-
-    protected abstract NumberFormat createFormatter(CallContext context);
+    public static final SInfoResultType velocity = new SInfoResultType(null, null) {
+        @Override
+        public String exportValue(final CallContext context, final Object value) {
+            final double doubleValue = asDouble(value);
+            return exportDoubleValue(context, doubleValue);
+        }
 
-    public final String getCsvHeader() {
-        return this.csvHeader;
-    }
-    
-    public final String getCsvHeader(final CallMeta meta) {
-    	 return Resources.getMsg(meta, this.csvHeader, this.csvHeader);
-    }
+        @Override
+        protected NumberFormat createFormatter(final CallContext context) {
+            throw new UnsupportedOperationException();
+        }
+    };
 
-    public final String getPdfHeader(final CallMeta meta) {
-        return Resources.getMsg(meta, this.pdfHeader, this.pdfHeader);
-    }
+    public static final SInfoResultType tau = new SInfoResultType(null, null) {
+        @Override
+        public String exportValue(final CallContext context, final Object value) {
+            final double doubleValue = asDouble(value);
+            return exportDoubleValue(context, doubleValue);
+        }
 
-    public final String getUnit() {
-        return this.unit;
-    }
+        @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) {
+        @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) {
+        @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) {
+        @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) {
+        @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 flowdepthDevelopment = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_FLOWDEPTH_DEVELOPMENT_HEADER,
+            SInfoI18NStrings.PDF_FLOWDEPTH_DEVELOPMENT_HEADER) {
+        @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 depthDevelopmentPerYear = new SInfoResultType(I18NStrings.UNIT_CM_A,
+            SInfoI18NStrings.CSV_FLOWDEPTH_DEVELOPMENT_PER_YEAR_HEADER) {
+        @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 waterlevelDifference = new SInfoResultType(I18NStrings.UNIT_M, SInfoI18NStrings.CSV_WATERLEVEL_DIFFERENCE_HEADER,
+            "sinfo.export.pdf.header.waterlevel.difference") {
+        @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_M, SInfoI18NStrings.CSV_MEAN_BED_HEIGHT_DIFFERENCE_HEADER,
+            "sinfo.export.pdf.header.mean_bed_height.difference") {
+        @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) {
+        @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) {
+        @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);
+        }
+    };
+
 }
\ No newline at end of file

http://dive4elements.wald.intevation.org