Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/exports/InfoGeneratorHelper.java @ 2273:7b8d59436be3
Set proper bounds for date axes in the chart info document; tell the transformation matrix which type it is (date/number).
flys-artifacts/trunk@3930 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Mon, 06 Feb 2012 14:37:30 +0000 |
parents | 6aeb71517136 |
children | 594885703687 |
comparison
equal
deleted
inserted
replaced
2272:4a8b519b64bd | 2273:7b8d59436be3 |
---|---|
2 | 2 |
3 import java.awt.geom.AffineTransform; | 3 import java.awt.geom.AffineTransform; |
4 import java.awt.geom.NoninvertibleTransformException; | 4 import java.awt.geom.NoninvertibleTransformException; |
5 import java.awt.geom.Rectangle2D; | 5 import java.awt.geom.Rectangle2D; |
6 | 6 |
7 import java.util.Date; | |
8 | |
7 import org.w3c.dom.Document; | 9 import org.w3c.dom.Document; |
8 import org.w3c.dom.Element; | 10 import org.w3c.dom.Element; |
9 | 11 |
10 import org.apache.log4j.Logger; | 12 import org.apache.log4j.Logger; |
11 | 13 |
12 import org.jfree.chart.ChartRenderingInfo; | 14 import org.jfree.chart.ChartRenderingInfo; |
13 import org.jfree.chart.JFreeChart; | 15 import org.jfree.chart.JFreeChart; |
14 import org.jfree.chart.axis.DateAxis; | 16 import org.jfree.chart.axis.DateAxis; |
17 import org.jfree.chart.axis.NumberAxis; | |
15 import org.jfree.chart.axis.ValueAxis; | 18 import org.jfree.chart.axis.ValueAxis; |
16 import org.jfree.chart.plot.XYPlot; | 19 import org.jfree.chart.plot.XYPlot; |
17 import org.jfree.data.Range; | 20 import org.jfree.data.Range; |
18 import org.jfree.data.xy.XYDataset; | 21 import org.jfree.data.xy.XYDataset; |
19 | 22 |
139 XYDataset dataset, | 142 XYDataset dataset, |
140 String type, | 143 String type, |
141 int pos) | 144 int pos) |
142 { | 145 { |
143 logger.debug("createAxisElement " + pos); | 146 logger.debug("createAxisElement " + pos); |
144 Range range = axis.getRange(); | 147 logger.debug("Axis is from type: " + axis.getClass()); |
145 | 148 |
146 Element e = cr.create(type); | 149 Element e = cr.create(type); |
147 cr.addAttr(e, "pos", String.valueOf(pos), true); | 150 cr.addAttr(e, "pos", String.valueOf(pos), true); |
151 | |
152 if (axis instanceof DateAxis) { | |
153 prepareDateAxisElement( | |
154 e, cr, (DateAxis) axis, dataset, type, pos); | |
155 } | |
156 else { | |
157 prepareNumberAxisElement( | |
158 e, cr, (NumberAxis) axis, dataset, type, pos); | |
159 } | |
160 | |
161 return e; | |
162 } | |
163 | |
164 | |
165 protected Element prepareNumberAxisElement( | |
166 Element e, | |
167 ElementCreator cr, | |
168 NumberAxis axis, | |
169 XYDataset dataset, | |
170 String type, | |
171 int pos | |
172 ) { | |
173 Range range = axis.getRange(); | |
174 | |
148 cr.addAttr(e, "from", String.valueOf(range.getLowerBound()), true); | 175 cr.addAttr(e, "from", String.valueOf(range.getLowerBound()), true); |
149 cr.addAttr(e, "to", String.valueOf(range.getUpperBound()), true); | 176 cr.addAttr(e, "to", String.valueOf(range.getUpperBound()), true); |
150 | 177 cr.addAttr(e, "axistype", "number", true); |
151 logger.debug("Axis is from type: " + axis.getClass()); | 178 |
152 | |
153 if (axis instanceof DateAxis) { | |
154 logger.debug("Add axis type: date"); | |
155 cr.addAttr(e, "axistype", "date", true); | |
156 } | |
157 else { | |
158 logger.debug("Add axis type: number"); | |
159 cr.addAttr(e, "axistype", "number", true); | |
160 } | |
161 | |
162 //Range[] rs = generator.getRangesForDataset(dataset); | |
163 Range[] rs = generator.getRangesForAxis(pos); | 179 Range[] rs = generator.getRangesForAxis(pos); |
164 Range r = null; | 180 Range r = null; |
165 | 181 |
166 if (type.equals("range")) { | 182 if (type.equals("range")) { |
167 r = rs[1]; | 183 r = rs[1]; |
170 r = rs[0]; | 186 r = rs[0]; |
171 } | 187 } |
172 | 188 |
173 cr.addAttr(e, "min", String.valueOf(r.getLowerBound()), true); | 189 cr.addAttr(e, "min", String.valueOf(r.getLowerBound()), true); |
174 cr.addAttr(e, "max", String.valueOf(r.getUpperBound()), true); | 190 cr.addAttr(e, "max", String.valueOf(r.getUpperBound()), true); |
191 | |
192 return e; | |
193 } | |
194 | |
195 | |
196 protected Element prepareDateAxisElement( | |
197 Element e, | |
198 ElementCreator cr, | |
199 DateAxis axis, | |
200 XYDataset dataset, | |
201 String type, | |
202 int pos | |
203 ) { | |
204 Date from = axis.getMinimumDate(); | |
205 Date to = axis.getMaximumDate(); | |
206 | |
207 cr.addAttr(e, "axistype", "date", true); | |
208 cr.addAttr(e, "from", String.valueOf(from.getTime()), true); | |
209 cr.addAttr(e, "to", String.valueOf(to.getTime()), true); | |
210 | |
211 // TODO Get correct min/max | |
212 cr.addAttr(e, "min", String.valueOf(from.getTime()), true); | |
213 cr.addAttr(e, "max", String.valueOf(to.getTime()), true); | |
175 | 214 |
176 return e; | 215 return e; |
177 } | 216 } |
178 | 217 |
179 | 218 |
251 cr.addAttr(matrix, "sx", String.valueOf(tm[0]), true); | 290 cr.addAttr(matrix, "sx", String.valueOf(tm[0]), true); |
252 cr.addAttr(matrix, "sy", String.valueOf(tm[1]), true); | 291 cr.addAttr(matrix, "sy", String.valueOf(tm[1]), true); |
253 cr.addAttr(matrix, "tx", String.valueOf(tm[2]), true); | 292 cr.addAttr(matrix, "tx", String.valueOf(tm[2]), true); |
254 cr.addAttr(matrix, "ty", String.valueOf(tm[3]), true); | 293 cr.addAttr(matrix, "ty", String.valueOf(tm[3]), true); |
255 | 294 |
295 if (xAxis instanceof DateAxis) { | |
296 cr.addAttr(matrix, "xtype", "date", true); | |
297 } | |
298 else { | |
299 cr.addAttr(matrix, "xtype", "number", true); | |
300 } | |
301 | |
302 if (yAxis instanceof DateAxis) { | |
303 cr.addAttr(matrix, "ytype", "date", true); | |
304 } | |
305 else { | |
306 cr.addAttr(matrix, "ytype", "number", true); | |
307 } | |
308 | |
256 return matrix; | 309 return matrix; |
257 } | 310 } |
258 | 311 |
259 | 312 |
260 /** | 313 /** |
277 double offsetX = dataArea.getX(); | 330 double offsetX = dataArea.getX(); |
278 double width = dataArea.getWidth(); | 331 double width = dataArea.getWidth(); |
279 double offsetY = dataArea.getY(); | 332 double offsetY = dataArea.getY(); |
280 double height = dataArea.getHeight(); | 333 double height = dataArea.getHeight(); |
281 | 334 |
282 Range xRange = xAxis.getRange(); | 335 Range xRange = getRangeFromAxis(xAxis); |
283 Range yRange = yAxis.getRange(); | 336 Range yRange = getRangeFromAxis(yAxis); |
284 | 337 |
285 double lowerX = xRange.getLowerBound(); | 338 double lowerX = xRange.getLowerBound(); |
286 double upperX = xRange.getUpperBound(); | 339 double upperX = xRange.getUpperBound(); |
287 double lowerY = yRange.getLowerBound(); | 340 double lowerY = yRange.getLowerBound(); |
288 double upperY = yRange.getUpperBound(); | 341 double upperY = yRange.getUpperBound(); |
323 logger.warn("Matrix is not invertible."); | 376 logger.warn("Matrix is not invertible."); |
324 } | 377 } |
325 | 378 |
326 return new double[] { 1d, 1d, 0d, 0d }; | 379 return new double[] { 1d, 1d, 0d, 0d }; |
327 } | 380 } |
381 | |
382 | |
383 protected static Range getRangeFromAxis(ValueAxis axis) { | |
384 if (axis instanceof DateAxis) { | |
385 DateAxis dAxis = (DateAxis) axis; | |
386 Date min = dAxis.getMinimumDate(); | |
387 Date max = dAxis.getMaximumDate(); | |
388 | |
389 return new Range(min.getTime(), max.getTime()); | |
390 } | |
391 else { | |
392 return axis.getRange(); | |
393 } | |
394 } | |
328 } | 395 } |
329 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : | 396 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |