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 :

http://dive4elements.wald.intevation.org