Mercurial > dive4elements > river
comparison artifacts/src/main/java/org/dive4elements/river/exports/ChartGenerator2.java @ 7079:48e30e2c5db9 generator-refactoring
ChartGenerator2 can be used as ChartInfoGenerator, too.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Fri, 20 Sep 2013 17:00:59 +0200 |
parents | 0a337f0005c2 |
children | f0731aa7b735 |
comparison
equal
deleted
inserted
replaced
7078:b780cf1148c3 | 7079:48e30e2c5db9 |
---|---|
6 * documentation coming with Dive4Elements River for details. | 6 * documentation coming with Dive4Elements River for details. |
7 */ | 7 */ |
8 | 8 |
9 package org.dive4elements.river.exports; | 9 package org.dive4elements.river.exports; |
10 | 10 |
11 import java.awt.BasicStroke; | |
12 import java.awt.Color; | |
13 import java.awt.Font; | |
14 import java.awt.Graphics2D; | |
15 import java.awt.Paint; | |
16 import java.awt.Stroke; | |
17 import java.awt.TexturePaint; | |
18 import java.awt.Transparency; | |
19 | |
20 import java.awt.geom.Rectangle2D; | |
21 | |
22 import java.awt.image.BufferedImage; | |
23 | |
24 import java.io.IOException; | |
25 import java.io.OutputStream; | |
26 | |
27 import java.util.ArrayList; | |
28 import java.util.List; | |
29 import java.util.Locale; | |
30 import java.util.Map; | |
31 import java.util.SortedMap; | |
32 import java.util.TreeMap; | |
33 | |
34 import javax.xml.xpath.XPathConstants; | |
35 | |
36 import org.apache.log4j.Logger; | |
37 | |
11 import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; | 38 import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; |
12 import org.dive4elements.artifactdatabase.state.Settings; | 39 import org.dive4elements.artifactdatabase.state.Settings; |
40 | |
13 import org.dive4elements.artifacts.Artifact; | 41 import org.dive4elements.artifacts.Artifact; |
14 import org.dive4elements.artifacts.ArtifactNamespaceContext; | 42 import org.dive4elements.artifacts.ArtifactNamespaceContext; |
15 import org.dive4elements.artifacts.CallContext; | 43 import org.dive4elements.artifacts.CallContext; |
16 import org.dive4elements.artifacts.CallMeta; | 44 import org.dive4elements.artifacts.CallMeta; |
17 import org.dive4elements.artifacts.PreferredLocale; | 45 import org.dive4elements.artifacts.PreferredLocale; |
46 | |
18 import org.dive4elements.artifacts.common.utils.XMLUtils; | 47 import org.dive4elements.artifacts.common.utils.XMLUtils; |
48 | |
49 import org.dive4elements.river.artifacts.D4EArtifact; | |
50 | |
19 import org.dive4elements.river.artifacts.access.RangeAccess; | 51 import org.dive4elements.river.artifacts.access.RangeAccess; |
20 import org.dive4elements.river.artifacts.D4EArtifact; | 52 |
21 import org.dive4elements.river.artifacts.resources.Resources; | 53 import org.dive4elements.river.artifacts.resources.Resources; |
54 | |
22 import org.dive4elements.river.collections.D4EArtifactCollection; | 55 import org.dive4elements.river.collections.D4EArtifactCollection; |
56 | |
57 import org.dive4elements.river.java2d.NOPGraphics2D; | |
58 | |
59 import org.dive4elements.river.jfree.AxisDataset; | |
23 import org.dive4elements.river.jfree.Bounds; | 60 import org.dive4elements.river.jfree.Bounds; |
24 import org.dive4elements.river.jfree.DoubleBounds; | 61 import org.dive4elements.river.jfree.DoubleBounds; |
25 import org.dive4elements.river.jfree.EnhancedLineAndShapeRenderer; | 62 import org.dive4elements.river.jfree.EnhancedLineAndShapeRenderer; |
26 import org.dive4elements.river.jfree.RiverAnnotation; | 63 import org.dive4elements.river.jfree.RiverAnnotation; |
27 import org.dive4elements.river.jfree.StableXYDifferenceRenderer; | 64 import org.dive4elements.river.jfree.StableXYDifferenceRenderer; |
28 import org.dive4elements.river.jfree.Style; | 65 import org.dive4elements.river.jfree.Style; |
29 import org.dive4elements.river.jfree.StyledAreaSeriesCollection; | 66 import org.dive4elements.river.jfree.StyledAreaSeriesCollection; |
30 import org.dive4elements.river.jfree.StyledSeries; | 67 import org.dive4elements.river.jfree.StyledSeries; |
31 import org.dive4elements.river.jfree.AxisDataset; | 68 |
32 import org.dive4elements.river.model.River; | 69 import org.dive4elements.river.model.River; |
70 | |
33 import org.dive4elements.river.themes.LineStyle; | 71 import org.dive4elements.river.themes.LineStyle; |
34 import org.dive4elements.river.themes.TextStyle; | 72 import org.dive4elements.river.themes.TextStyle; |
35 import org.dive4elements.river.themes.ThemeDocument; | 73 import org.dive4elements.river.themes.ThemeDocument; |
74 | |
75 import org.dive4elements.river.utils.Formatter; | |
36 import org.dive4elements.river.utils.RiverUtils; | 76 import org.dive4elements.river.utils.RiverUtils; |
37 | 77 |
38 import java.awt.BasicStroke; | 78 import org.jfree.chart.ChartRenderingInfo; |
39 import java.awt.Color; | |
40 import java.awt.Font; | |
41 import java.awt.Paint; | |
42 import java.awt.Stroke; | |
43 import java.awt.TexturePaint; | |
44 import java.awt.geom.Rectangle2D; | |
45 import java.awt.image.BufferedImage; | |
46 import java.io.IOException; | |
47 import java.io.OutputStream; | |
48 import java.util.ArrayList; | |
49 import java.util.List; | |
50 import java.util.Locale; | |
51 import java.util.Map; | |
52 import java.util.SortedMap; | |
53 import java.util.TreeMap; | |
54 | |
55 import javax.xml.xpath.XPathConstants; | |
56 | |
57 import org.apache.log4j.Logger; | |
58 import org.jfree.chart.JFreeChart; | 79 import org.jfree.chart.JFreeChart; |
59 import org.jfree.chart.LegendItem; | 80 import org.jfree.chart.LegendItem; |
60 import org.jfree.chart.LegendItemCollection; | 81 import org.jfree.chart.LegendItemCollection; |
82 | |
61 import org.jfree.chart.axis.NumberAxis; | 83 import org.jfree.chart.axis.NumberAxis; |
84 | |
62 import org.jfree.chart.plot.XYPlot; | 85 import org.jfree.chart.plot.XYPlot; |
86 | |
63 import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; | 87 import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; |
88 | |
64 import org.jfree.chart.title.TextTitle; | 89 import org.jfree.chart.title.TextTitle; |
90 | |
65 import org.jfree.data.Range; | 91 import org.jfree.data.Range; |
92 | |
66 import org.jfree.data.general.Series; | 93 import org.jfree.data.general.Series; |
94 | |
67 import org.jfree.data.xy.XYDataset; | 95 import org.jfree.data.xy.XYDataset; |
96 | |
68 import org.jfree.ui.RectangleInsets; | 97 import org.jfree.ui.RectangleInsets; |
69 import org.jfree.ui.TextAnchor; | 98 import org.jfree.ui.TextAnchor; |
99 | |
70 import org.w3c.dom.Document; | 100 import org.w3c.dom.Document; |
71 import org.w3c.dom.Element; | 101 import org.w3c.dom.Element; |
72 | |
73 import org.dive4elements.river.utils.Formatter; | |
74 | 102 |
75 /** | 103 /** |
76 * Implementation of the OutGenerator interface for charts. | 104 * Implementation of the OutGenerator interface for charts. |
77 * It should provide some basic things that equal in all chart types. | 105 * It should provide some basic things that equal in all chart types. |
78 * | 106 * |
79 */ | 107 */ |
80 public abstract class ChartGenerator2 implements OutGenerator { | 108 public abstract class ChartGenerator2 implements OutGenerator { |
81 | 109 |
82 private static Logger logger = Logger.getLogger(ChartGenerator2.class); | 110 private static Logger logger = Logger.getLogger(ChartGenerator2.class); |
111 | |
112 public static final boolean USE_NOP_GRAPHICS = | |
113 Boolean.getBoolean("info.rendering.nop.graphics"); | |
114 | |
83 | 115 |
84 public static final int DEFAULT_CHART_WIDTH = 600; | 116 public static final int DEFAULT_CHART_WIDTH = 600; |
85 public static final int DEFAULT_CHART_HEIGHT = 400; | 117 public static final int DEFAULT_CHART_HEIGHT = 400; |
86 public static final String DEFAULT_CHART_FORMAT = "png"; | 118 public static final String DEFAULT_CHART_FORMAT = "png"; |
87 public static final Color DEFAULT_GRID_COLOR = Color.GRAY; | 119 public static final Color DEFAULT_GRID_COLOR = Color.GRAY; |
254 | 286 |
255 /** | 287 /** |
256 * Generate chart. | 288 * Generate chart. |
257 */ | 289 */ |
258 @Override | 290 @Override |
259 public void generate() | 291 public void generate() throws IOException { |
260 throws IOException | 292 |
261 { | |
262 logger.debug("ChartGenerator2.generate"); | 293 logger.debug("ChartGenerator2.generate"); |
294 | |
295 if (outName.indexOf("chartinfo") > 0) { | |
296 generateInfo(); | |
297 } | |
298 else { | |
299 generateImage(); | |
300 } | |
301 } | |
302 | |
303 | |
304 /** Generate only meta infos */ | |
305 private void generateInfo() throws IOException { | |
306 | |
307 logger.debug("ChartInfoGenerator2.generateInfo"); | |
308 | |
309 JFreeChart chart = generateChart(); | |
310 | |
311 int[] size = getSize(); | |
312 if (size == null) { | |
313 size = getDefaultSize(); | |
314 } | |
315 | |
316 ChartRenderingInfo info = new ChartRenderingInfo(); | |
317 | |
318 long startTime = System.currentTimeMillis(); | |
319 | |
320 if (USE_NOP_GRAPHICS) { | |
321 BufferedImage image = | |
322 new BufferedImage(size[0], size[1], Transparency.BITMASK); | |
323 | |
324 Graphics2D g2d = image.createGraphics(); | |
325 Graphics2D nop = new NOPGraphics2D(g2d); | |
326 | |
327 chart.draw( | |
328 nop, | |
329 new Rectangle2D.Double(0, 0, size[0], size[1]), | |
330 null, | |
331 info); | |
332 | |
333 nop.dispose(); | |
334 } | |
335 else { | |
336 chart.createBufferedImage( | |
337 size[0], size[1], Transparency.BITMASK, info); | |
338 } | |
339 | |
340 long stopTime = System.currentTimeMillis(); | |
341 | |
342 if (logger.isDebugEnabled()) { | |
343 logger.debug("Rendering info took: " + | |
344 (stopTime-startTime) + "ms"); | |
345 } | |
346 | |
347 | |
348 InfoGeneratorHelper helper = new InfoGeneratorHelper(this); | |
349 Document doc = helper.createInfoDocument(chart, info); | |
350 | |
351 XMLUtils.toStream(doc, out); | |
352 } | |
353 | |
354 /** Generate the diagram as an image. */ | |
355 private void generateImage() throws IOException { | |
356 logger.debug("ChartGenerator2.generateImage"); | |
263 | 357 |
264 JFreeChart chart = generateChart(); | 358 JFreeChart chart = generateChart(); |
265 | 359 |
266 String format = getFormat(); | 360 String format = getFormat(); |
267 int[] size = getSize(); | 361 int[] size = getSize(); |