annotate artifacts/src/main/java/org/dive4elements/river/exports/injector/KmFromRequestInjector.java @ 8349:7341bebc79d0

Let injectors be strictly distinct from each other and give more meaningful names (they know what they do, not where they will be used. The latter is configuration).
author Tom Gottfried <tom@intevation.de>
date Wed, 01 Oct 2014 12:23:39 +0200
parents artifacts/src/main/java/org/dive4elements/river/exports/injector/FixWQInjector.java@10917ec29625
children 16dc2da05aef
rev   line source
8251
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
1 package org.dive4elements.river.exports.injector;
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
2
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
3 import org.apache.log4j.Logger;
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
4 import org.dive4elements.artifacts.Artifact;
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
5 import org.dive4elements.artifacts.ArtifactNamespaceContext;
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
6 import org.dive4elements.artifacts.CallContext;
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
7 import org.dive4elements.artifacts.ContextInjector;
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
8 import org.dive4elements.artifacts.common.utils.XMLUtils;
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
9 import org.dive4elements.river.artifacts.D4EArtifact;
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
10 import org.dive4elements.river.artifacts.access.RangeAccess;
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
11 import org.w3c.dom.Document;
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
12 import org.w3c.dom.Element;
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
13
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
14 import static org.dive4elements.river.exports.injector.InjectorConstants.CURRENT_KM;
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
15
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
16
8349
7341bebc79d0 Let injectors be strictly distinct from each other and give more meaningful names (they know what they do, not where they will be used. The latter is configuration).
Tom Gottfried <tom@intevation.de>
parents: 8326
diff changeset
17 public class KmFromRequestInjector
8251
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
18 implements ContextInjector
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
19 {
8349
7341bebc79d0 Let injectors be strictly distinct from each other and give more meaningful names (they know what they do, not where they will be used. The latter is configuration).
Tom Gottfried <tom@intevation.de>
parents: 8326
diff changeset
20 private static final Logger log = Logger.getLogger(KmFromRequestInjector.class);
8251
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
21
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
22 public static final Double INVALID_KM = Double.valueOf(-1d);
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
23 public static final String XPATH_CHART_CURRENTKM =
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
24 "/art:action/art:attributes/art:currentKm/@art:km";
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
25 @Override
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
26 public void setup(Element cfg) {
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
27
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
28 }
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
29
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
30 @Override
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
31 public void injectContext(
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
32 CallContext ctx,
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
33 Artifact artifact,
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
34 Document request) {
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
35 Double km = getCurrentKmFromRequest(request);
8326
10917ec29625 Inject current km and pnp into the context used to calculate W in cm at gauge.
Raimund Renkert <rrenkert@intevation.de>
parents: 8251
diff changeset
36 if (Double.isNaN(km)) {
8251
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
37 RangeAccess access = new RangeAccess((D4EArtifact)artifact);
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
38 km = access.getFrom();
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
39 }
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
40 ctx.putContextValue(CURRENT_KM, km);
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
41 }
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
42
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
43 private Double getCurrentKmFromRequest(Document request) {
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
44
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
45 String km = XMLUtils.xpathString(
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
46 request,
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
47 XPATH_CHART_CURRENTKM,
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
48 ArtifactNamespaceContext.INSTANCE);
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
49
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
50 if (km == null) {
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
51 return Double.NaN;
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
52 }
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
53
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
54 try {
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
55 return Double.valueOf(km);
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
56 }
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
57 catch (NumberFormatException nfe) {
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
58 return Double.NaN;
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
59 }
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
60 }
c7ca9c228314 Added context injectors for discharge curves.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
61 }

http://dive4elements.wald.intevation.org