Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/exports/extreme/ExtremeWQCurveGenerator.java @ 4345:8eabbc5198e1
Added new Generator: ExtremeWQCurveGenerator (and its *Info*-counterpart).
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Thu, 01 Nov 2012 12:10:31 +0100 |
parents | |
children | 17251b058bf1 |
comparison
equal
deleted
inserted
replaced
4344:c6db11e3b83a | 4345:8eabbc5198e1 |
---|---|
1 package de.intevation.flys.exports.extreme; | |
2 | |
3 import java.awt.Color; | |
4 | |
5 import org.apache.log4j.Logger; | |
6 import org.jfree.chart.JFreeChart; | |
7 import org.jfree.chart.plot.Marker; | |
8 import org.jfree.chart.plot.ValueMarker; | |
9 import org.jfree.chart.title.TextTitle; | |
10 import org.w3c.dom.Document; | |
11 | |
12 import de.intevation.artifactdatabase.state.ArtifactAndFacet; | |
13 import de.intevation.artifactdatabase.state.Facet; | |
14 import de.intevation.flys.artifacts.access.FixAnalysisAccess; | |
15 import de.intevation.flys.artifacts.model.DateRange; | |
16 import de.intevation.flys.artifacts.model.FacetTypes; | |
17 import de.intevation.flys.artifacts.model.extreme.Curve; | |
18 import de.intevation.flys.artifacts.model.extreme.ExtremeCurveFacet; | |
19 import de.intevation.flys.exports.fixings.FixWQCurveGenerator; | |
20 import de.intevation.flys.artifacts.resources.Resources; | |
21 import de.intevation.flys.exports.ChartGenerator; | |
22 import de.intevation.flys.jfree.JFreeUtil; | |
23 import de.intevation.flys.jfree.StyledXYSeries; | |
24 | |
25 /** | |
26 * Generator for WQ fixing charts. | |
27 * @author <a href="mailto:christian.lins@intevation.de">Christian Lins</a> | |
28 */ | |
29 public class ExtremeWQCurveGenerator | |
30 extends FixWQCurveGenerator | |
31 implements FacetTypes | |
32 { | |
33 /** Private logger. */ | |
34 private static Logger logger = | |
35 Logger.getLogger(ExtremeWQCurveGenerator.class); | |
36 | |
37 public static final String I18N_CHART_TITLE = | |
38 "chart.extreme.wq.title"; | |
39 | |
40 public static final String I18N_CHART_SUBTITLE = | |
41 "chart.extreme.wq.subtitle"; | |
42 | |
43 public static final String I18N_CHART_SUBTITLE1 = | |
44 "chart.extreme.wq.subtitle1"; | |
45 | |
46 public static final String I18N_XAXIS_LABEL = | |
47 "chart.extreme.wq.xaxis.label"; | |
48 | |
49 public static final String I18N_YAXIS_LABEL = | |
50 "chart.extreme.wq.yaxis.label"; | |
51 | |
52 public static final String I18N_CHART_TITLE_DEFAULT = | |
53 "Extremkurvenanalyse"; | |
54 | |
55 public static final String I18N_XAXIS_LABEL_DEFAULT = | |
56 "Q [m\u00B3/s]"; | |
57 | |
58 public static final String I18N_YAXIS_LABEL_DEFAULT = | |
59 "W [NN + m]"; | |
60 | |
61 @Override | |
62 public void doOut(ArtifactAndFacet aaf, Document doc, boolean visible) { | |
63 super.doOut(aaf, doc, visible); | |
64 | |
65 String name = aaf.getFacetName(); | |
66 logger.debug("doOut: " + name); | |
67 | |
68 if (name.equals(EXTREME_WQ_CURVE)) { | |
69 doExtremeCurveOut(aaf, doc, visible); | |
70 } | |
71 else { | |
72 logger.warn("Unknown facet name " + name); | |
73 return; | |
74 } | |
75 } | |
76 | |
77 | |
78 /** Do Extreme Curve out */ | |
79 protected void doExtremeCurveOut(ArtifactAndFacet aaf, Document doc, boolean visible) { | |
80 logger.debug("doExtremeCurveOut"); | |
81 ExtremeCurveFacet facet = (ExtremeCurveFacet) aaf.getFacet(); | |
82 Curve curve = (Curve) facet.getData(aaf.getArtifact(), context); | |
83 if (curve == null) { | |
84 logger.warn("doExtremeCurveOut: Facet does not contain Curve"); | |
85 return; | |
86 } | |
87 | |
88 double maxQ = curve.getSuggestedMaxQ(); | |
89 if (maxQ == Double.MAX_VALUE) { | |
90 maxQ = 8000; | |
91 } | |
92 | |
93 StyledXYSeries series = JFreeUtil.sampleFunction2D( | |
94 curve, | |
95 doc, | |
96 aaf.getFacetDescription(), | |
97 500, // number of samples | |
98 0.0 , // start | |
99 maxQ); // end | |
100 | |
101 // Add marker from where on its extrapolated. | |
102 double[] qs = curve.getQs(); | |
103 double extrapolateFrom = qs[qs.length-1]; | |
104 | |
105 Marker m = new ValueMarker(extrapolateFrom); | |
106 m.setPaint(Color.black); | |
107 addDomainMarker(m); | |
108 | |
109 addAxisSeries(series, 0, visible); | |
110 } | |
111 | |
112 @Override | |
113 protected String getChartTitle() { | |
114 return Resources.format( | |
115 context.getMeta(), | |
116 I18N_CHART_TITLE, | |
117 I18N_CHART_TITLE_DEFAULT, | |
118 context.getContextValue(CURRENT_KM)); | |
119 } | |
120 | |
121 @Override | |
122 protected String getDefaultChartTitle() { | |
123 return msg(I18N_CHART_TITLE, I18N_CHART_TITLE_DEFAULT); | |
124 } | |
125 | |
126 @Override | |
127 protected String getDefaultChartSubtitle() { | |
128 FixAnalysisAccess access = new FixAnalysisAccess(artifact); | |
129 DateRange dateRange = access.getDateRange(); | |
130 DateRange refRange = access.getReferencePeriod(); | |
131 | |
132 if (dateRange != null && refRange != null) { | |
133 return Resources.format( | |
134 context.getMeta(), | |
135 I18N_CHART_SUBTITLE, | |
136 "", | |
137 access.getRiver(), | |
138 dateRange.getFrom(), | |
139 dateRange.getTo(), | |
140 refRange.getFrom(), | |
141 refRange.getTo()); | |
142 } | |
143 | |
144 return null; | |
145 } | |
146 | |
147 @Override | |
148 protected void addSubtitles(JFreeChart chart) { | |
149 String defaultSubtitle = getDefaultChartSubtitle(); | |
150 | |
151 if (defaultSubtitle == null || defaultSubtitle.length() == 0) { | |
152 return; | |
153 } | |
154 | |
155 chart.addSubtitle(new TextTitle(defaultSubtitle)); | |
156 | |
157 StringBuilder buf = new StringBuilder(); | |
158 | |
159 // Add analysis periods as additional subtitle | |
160 FixAnalysisAccess access = new FixAnalysisAccess(artifact); | |
161 DateRange[] aperiods = access.getAnalysisPeriods(); | |
162 buf.append(msg("fix.analysis.periods")); | |
163 buf.append(": "); | |
164 for(int n = 0; n < aperiods.length; n++) { | |
165 buf.append( | |
166 Resources.format( | |
167 context.getMeta(), | |
168 I18N_CHART_SUBTITLE1, | |
169 "", | |
170 aperiods[n].getFrom(), | |
171 aperiods[n].getTo())); | |
172 if(n + 1 < aperiods.length) { | |
173 buf.append("; "); | |
174 } | |
175 } | |
176 | |
177 chart.addSubtitle(new TextTitle(buf.toString())); | |
178 } | |
179 | |
180 @Override | |
181 protected String getDefaultXAxisLabel() { | |
182 return msg(I18N_XAXIS_LABEL, I18N_XAXIS_LABEL_DEFAULT); | |
183 } | |
184 | |
185 @Override | |
186 protected String getDefaultYAxisLabel(int pos) { | |
187 return msg(I18N_YAXIS_LABEL, I18N_YAXIS_LABEL_DEFAULT); | |
188 } | |
189 | |
190 @Override | |
191 protected ChartGenerator.YAxisWalker getYAxisWalker() { | |
192 return new YAxisWalker() { | |
193 @Override | |
194 public int length() { | |
195 return YAXIS.values().length; | |
196 } | |
197 | |
198 @Override | |
199 public String getId(int idx) { | |
200 YAXIS[] yaxes = YAXIS.values(); | |
201 return yaxes[idx].toString(); | |
202 } | |
203 }; | |
204 } | |
205 } | |
206 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |