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 :

http://dive4elements.wald.intevation.org