Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/HistoricalDischargeComputeState.java @ 4232:b3aa91e45010
Implemented the Q evaluation mode for historical discharge calculations.
Added the calculation itself, created new facets, added themes and improved the chart generator
to support the new facets.
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Wed, 24 Oct 2012 07:25:35 +0200 |
parents | d7db9baa4e62 |
children | 49cb65d5932d |
comparison
equal
deleted
inserted
replaced
4231:adcb8aee1910 | 4232:b3aa91e45010 |
---|---|
1 package de.intevation.flys.artifacts.states; | 1 package de.intevation.flys.artifacts.states; |
2 | 2 |
3 import java.util.List; | 3 import java.util.List; |
4 | 4 |
5 import org.apache.log4j.Logger; | |
5 import org.w3c.dom.Element; | 6 import org.w3c.dom.Element; |
6 | 7 |
7 import org.apache.log4j.Logger; | 8 import de.intevation.artifactdatabase.state.Facet; |
8 | |
9 import de.intevation.artifacts.Artifact; | 9 import de.intevation.artifacts.Artifact; |
10 import de.intevation.artifacts.CallContext; | 10 import de.intevation.artifacts.CallContext; |
11 | |
12 import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator; | 11 import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator; |
13 | |
14 import de.intevation.artifactdatabase.state.Facet; | |
15 | |
16 import de.intevation.flys.artifacts.FLYSArtifact; | 12 import de.intevation.flys.artifacts.FLYSArtifact; |
17 import de.intevation.flys.artifacts.WINFOArtifact; | 13 import de.intevation.flys.artifacts.WINFOArtifact; |
14 import de.intevation.flys.artifacts.access.HistoricalDischargeAccess; | |
15 import de.intevation.flys.artifacts.access.HistoricalDischargeAccess.EvaluationMode; | |
18 import de.intevation.flys.artifacts.model.CalculationResult; | 16 import de.intevation.flys.artifacts.model.CalculationResult; |
19 import de.intevation.flys.artifacts.model.DataFacet; | 17 import de.intevation.flys.artifacts.model.DataFacet; |
20 import de.intevation.flys.artifacts.model.FacetTypes; | 18 import de.intevation.flys.artifacts.model.FacetTypes; |
19 import de.intevation.flys.artifacts.model.HistoricalDischargeDifferenceFacet; | |
21 import de.intevation.flys.artifacts.model.HistoricalDischargeFacet; | 20 import de.intevation.flys.artifacts.model.HistoricalDischargeFacet; |
22 import de.intevation.flys.artifacts.model.HistoricalDischargeDifferenceFacet; | |
23 import de.intevation.flys.artifacts.model.HistoricalWQTimerange; | 21 import de.intevation.flys.artifacts.model.HistoricalWQTimerange; |
24 import de.intevation.flys.artifacts.model.ReportFacet; | 22 import de.intevation.flys.artifacts.model.ReportFacet; |
25 import de.intevation.flys.artifacts.model.WQTimerange; | 23 import de.intevation.flys.artifacts.model.WQTimerange; |
26 | 24 |
27 | 25 |
28 /** | 26 /** |
29 * State to calculate historical discharge curves. | 27 * State to calculate historical discharge curves. |
28 * | |
30 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> | 29 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> |
31 */ | 30 */ |
32 public class HistoricalDischargeComputeState | 31 public class HistoricalDischargeComputeState extends DefaultState implements |
33 extends DefaultState | 32 FacetTypes { |
34 implements FacetTypes | |
35 { | |
36 | 33 |
37 private static final Logger logger = | 34 private static final Logger logger = Logger |
38 Logger.getLogger(HistoricalDischargeComputeState.class); | 35 .getLogger(HistoricalDischargeComputeState.class); |
39 | 36 |
40 public static final String DEFAULT_UNIT = "cm"; | 37 public static final String DEFAULT_UNIT = "cm"; |
41 | 38 |
42 | |
43 @Override | 39 @Override |
44 protected void appendItems( | 40 protected void appendItems(Artifact artifact, ElementCreator creator, |
45 Artifact artifact, | 41 String name, CallContext context, Element select) { |
46 ElementCreator creator, | |
47 String name, | |
48 CallContext context, | |
49 Element select | |
50 ) { | |
51 // TODO IMPLEMENT ME | 42 // TODO IMPLEMENT ME |
52 } | 43 } |
53 | 44 |
54 | |
55 @Override | 45 @Override |
56 public Object computeAdvance( | 46 public Object computeAdvance(FLYSArtifact artifact, String hash, |
57 FLYSArtifact artifact, | 47 CallContext context, List<Facet> facets, Object old) { |
58 String hash, | |
59 CallContext context, | |
60 List<Facet> facets, | |
61 Object old | |
62 ) { | |
63 logger.debug("HistoricalDischargeComputeState.computeAdvance"); | 48 logger.debug("HistoricalDischargeComputeState.computeAdvance"); |
64 | 49 |
65 WINFOArtifact winfo = (WINFOArtifact) artifact; | 50 WINFOArtifact winfo = (WINFOArtifact) artifact; |
66 | 51 |
67 CalculationResult res = old instanceof CalculationResult | 52 CalculationResult res = old instanceof CalculationResult ? (CalculationResult) old |
68 ? (CalculationResult) old | |
69 : winfo.getHistoricalDischargeData(); | 53 : winfo.getHistoricalDischargeData(); |
70 | 54 |
71 if (facets == null) { | 55 if (facets == null) { |
72 return res; | 56 return res; |
73 } | 57 } |
80 if (data == null || data.length == 0) { | 64 if (data == null || data.length == 0) { |
81 logger.warn("Historical Discharge calculation has no results!"); | 65 logger.warn("Historical Discharge calculation has no results!"); |
82 return res; | 66 return res; |
83 } | 67 } |
84 | 68 |
85 facets.add( | 69 facets |
86 new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id)); | 70 .add(new DataFacet(CSV, "CSV data", ComputeType.ADVANCE, hash, id)); |
87 | 71 |
88 facets.add( | 72 facets |
89 new DataFacet(PDF, "PDF data", ComputeType.ADVANCE, hash, id)); | 73 .add(new DataFacet(PDF, "PDF data", ComputeType.ADVANCE, hash, id)); |
90 | 74 |
91 prepareFacets(facets, data); | 75 prepareFacets(facets, data, new HistoricalDischargeAccess(artifact)); |
92 | 76 |
93 return res; | 77 return res; |
94 } | 78 } |
95 | 79 |
96 | 80 protected void prepareFacets(List<Facet> facets, WQTimerange[] wqts, |
97 protected void prepareFacets(List<Facet> facets, WQTimerange[] wqts) { | 81 HistoricalDischargeAccess access) { |
98 int i = 0; | 82 int i = 0; |
99 | 83 |
100 for (WQTimerange wqt: wqts) { | 84 for (WQTimerange wqt : wqts) { |
101 logger.debug("Prepare facet for: " + wqt.getName()); | 85 logger.debug("Prepare facet for: " + wqt.getName()); |
102 | 86 |
103 // TODO CREATE BETTER TITLE FOR FACETS | 87 EvaluationMode evalMode = access.getEvaluationMode(); |
88 if (evalMode == EvaluationMode.W) { | |
89 facets.add(new HistoricalDischargeFacet(i, | |
90 HISTORICAL_DISCHARGE_Q, createFacetTitle(wqt))); | |
104 | 91 |
105 facets.add(new HistoricalDischargeFacet( | 92 if (wqt instanceof HistoricalWQTimerange) { |
106 i, | 93 logger |
107 HISTORICAL_DISCHARGE_Q, | 94 .debug("Create another facet for historical differences."); |
108 createFacetTitle(wqt))); | |
109 | 95 |
110 if (wqt instanceof HistoricalWQTimerange) { | 96 // TODO CREATE BETTER TITLE FOR FACETS |
111 logger.debug("Create another facet for historical differences."); | 97 facets.add(new HistoricalDischargeDifferenceFacet(i, |
98 HISTORICAL_DISCHARGE_Q_DIFF, "DIFF: " + wqt.getName())); | |
99 } | |
100 } | |
101 else { | |
102 facets.add(new HistoricalDischargeFacet(i, | |
103 HISTORICAL_DISCHARGE_W, createFacetTitle(wqt))); | |
112 | 104 |
113 facets.add(new HistoricalDischargeDifferenceFacet( | 105 if (wqt instanceof HistoricalWQTimerange) { |
114 i, | 106 logger |
115 HISTORICAL_DISCHARGE_Q_DIFF, | 107 .debug("Create another facet for historical differences."); |
116 "DIFF: " + wqt.getName())); | 108 |
109 // TODO CREATE BETTER TITLE FOR FACETS | |
110 facets.add(new HistoricalDischargeDifferenceFacet(i, | |
111 HISTORICAL_DISCHARGE_W_DIFF, "DIFF: " + wqt.getName())); | |
112 } | |
117 } | 113 } |
118 | 114 |
119 i++; | 115 i++; |
120 } | 116 } |
121 } | 117 } |
122 | 118 |
123 | |
124 protected String createFacetTitle(WQTimerange wqt) { | 119 protected String createFacetTitle(WQTimerange wqt) { |
125 String name = wqt.getName(); | 120 String name = wqt.getName(); |
126 | 121 |
127 return name != null && name.indexOf("W") >= 0 | 122 return name != null && name.indexOf("W") >= 0 ? createFacetTitleW(wqt) |
128 ? createFacetTitleW(wqt) | |
129 : createFacetTitleQ(wqt); | 123 : createFacetTitleQ(wqt); |
130 } | 124 } |
131 | |
132 | 125 |
133 protected String createFacetTitleW(WQTimerange wqt) { | 126 protected String createFacetTitleW(WQTimerange wqt) { |
134 String name = wqt.getName(); | 127 String name = wqt.getName(); |
135 return name + " " + DEFAULT_UNIT; | 128 return name + " " + DEFAULT_UNIT; |
136 } | 129 } |
137 | 130 |
138 | |
139 protected String createFacetTitleQ(WQTimerange wqt) { | 131 protected String createFacetTitleQ(WQTimerange wqt) { |
140 return wqt.getName(); | 132 return wqt.getName(); |
141 } | 133 } |
142 } | 134 } |
143 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : | 135 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : |