comparison artifacts/src/main/java/org/dive4elements/river/exports/ComputedDischargeCurveExporter.java @ 8362:839032ac1523

Purge obsolete representation of reference system for discharge tables.
author Tom Gottfried <tom@intevation.de>
date Wed, 01 Oct 2014 15:54:47 +0200
parents e4606eae8ea5
children 3508d625092f
comparison
equal deleted inserted replaced
8361:c494f9a61490 8362:839032ac1523
45 import org.dive4elements.river.model.River; 45 import org.dive4elements.river.model.River;
46 46
47 import org.dive4elements.river.utils.RiverUtils; 47 import org.dive4elements.river.utils.RiverUtils;
48 import org.dive4elements.river.utils.Formatter; 48 import org.dive4elements.river.utils.Formatter;
49 49
50 import static org.dive4elements.river.exports.injector.InjectorConstants.PNP;
50 51
51 /** 52 /**
52 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> 53 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
53 */ 54 */
54 public class ComputedDischargeCurveExporter extends AbstractExporter { 55 public class ComputedDischargeCurveExporter extends AbstractExporter {
74 75
75 protected String wUnit; 76 protected String wUnit;
76 protected String riverUnit; 77 protected String riverUnit;
77 protected String gaugeName; 78 protected String gaugeName;
78 protected double gaugeDatum; 79 protected double gaugeDatum;
79 protected boolean isCalculated;
80 protected Date validSince; 80 protected Date validSince;
81 81
82 public ComputedDischargeCurveExporter() { 82 public ComputedDischargeCurveExporter() {
83 data = new ArrayList<WQKms>(); 83 data = new ArrayList<WQKms>();
84 } 84 }
102 log.warn("Can't add data for export. Unkown data type " + 102 log.warn("Can't add data for export. Unkown data type " +
103 d.getClass().getName()); 103 d.getClass().getName());
104 return; 104 return;
105 } 105 }
106 if (referenceWQ != null) { 106 if (referenceWQ != null) {
107 wUnit = referenceWQ.getWUnit();
108 D4EArtifact arti = (D4EArtifact)master; 107 D4EArtifact arti = (D4EArtifact)master;
109 River river = RiverUtils.getRiver(arti); 108 River river = RiverUtils.getRiver(arti);
110 riverUnit = river.getWstUnit().getName(); 109 riverUnit = river.getWstUnit().getName();
111 RangeAccess rangeAccess = new RangeAccess(arti); 110 RangeAccess rangeAccess = new RangeAccess(arti);
112 111
113 double[] kms = rangeAccess.getKmRange(); 112 double[] kms = rangeAccess.getKmRange();
114 113
115 Gauge gauge = river.determineGaugeByPosition(kms[0]); 114 Gauge gauge = river.determineGaugeByPosition(kms[0]);
116 log.debug("Kms 0: " + kms[0]); 115 if (context.getContextValue(PNP) instanceof Number) {
117 if (Math.abs(kms[0] - gauge.getStation().doubleValue()) < 1e-4) { 116 wUnit = "cm";
118 gaugeName = gauge.getName(); 117 gaugeName = gauge.getName();
119 gaugeDatum = gauge.getDatum().doubleValue(); 118 gaugeDatum = gauge.getDatum().doubleValue();
120
121 // Assumption is that values at a gauge that are in the meter
122 // reference system are calculated.
123 isCalculated = wUnit.equals("m");
124 119
125 // Now convert the data to cm because we are at gauge 120 // Now convert the data to cm because we are at gauge
126 List<WQKms> newData = new ArrayList<WQKms>(); 121 List<WQKms> newData = new ArrayList<WQKms>();
127 for (WQKms d2: data) { 122 for (WQKms d2: data) {
128 newData.add(new WQKms(d2.getKms(), 123 newData.add(new WQKms(d2.getKms(),
129 WQ.getFixedWQforExportAtGauge((WQ)d2, gauge.getDatum()))); 124 WQ.getFixedWQforExportAtGauge((WQ)d2, gauge.getDatum())));
130 } 125 }
131 data = newData; // All hail the garbage collector 126 data = newData; // All hail the garbage collector
132 wUnit = "cm";
133 127
134 validSince = gauge.fetchMasterDischargeTable().getTimeInterval().getStartTime(); 128 validSince = gauge.fetchMasterDischargeTable().getTimeInterval().getStartTime();
135 } else { 129 } else {
136 gaugeName = ""; 130 gaugeName = "";
137 validSince = null; 131 validSince = null;
258 Locale locale = Resources.getLocale(meta); 252 Locale locale = Resources.getLocale(meta);
259 DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale); 253 DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, locale);
260 254
261 source.addMetaData("date", df.format(new Date())); 255 source.addMetaData("date", df.format(new Date()));
262 256
263 source.addMetaData("wUnit", wUnit.equals("m") ? riverUnit : "cm"); 257 source.addMetaData("wUnit", wUnit.equals("cm") ? "cm" : riverUnit);
264 258
265 RangeAccess rangeAccess = new RangeAccess(flys); 259 RangeAccess rangeAccess = new RangeAccess(flys);
266 double[] kms = rangeAccess.getKmRange(); 260 double[] kms = rangeAccess.getKmRange();
267 source.addMetaData("range", 261 source.addMetaData("range",
268 Formatter.getCalculationKm(context.getMeta()).format(kms[0])); 262 Formatter.getCalculationKm(context.getMeta()).format(kms[0]));
269 263
270 // When w is in meter we are not at a gauge so our values 264 if (!(context.getContextValue(PNP) instanceof Number)) {
271 // must be calculated
272 if (isCalculated || wUnit.equals("m")) {
273 source.addMetaData("valid_since", ""); 265 source.addMetaData("valid_since", "");
274 source.addMetaData("calculation", Resources.getMsg( 266 source.addMetaData("calculation", Resources.getMsg(
275 locale, 267 locale,
276 PDF_HEADER_CALC_MODE, 268 PDF_HEADER_CALC_MODE,
277 "Computed Discharge")); 269 "Computed Discharge"));

http://dive4elements.wald.intevation.org