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 :

http://dive4elements.wald.intevation.org