Mercurial > dive4elements > gnv-client
comparison gnv-artifacts/src/main/java/de/intevation/gnv/chart/ChartFactory.java @ 68:d117fd4b82e5
Chartrendering integrated in Timeseries Transition
gnv-artifacts/trunk@53 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Tim Englich <tim.englich@intevation.de> |
---|---|
date | Wed, 09 Sep 2009 15:28:18 +0000 |
parents | 0e9762ebd18d |
children | 5eb62df21f9a |
comparison
equal
deleted
inserted
replaced
67:0e9762ebd18d | 68:d117fd4b82e5 |
---|---|
16 package de.intevation.gnv.chart; | 16 package de.intevation.gnv.chart; |
17 | 17 |
18 import java.awt.Color; | 18 import java.awt.Color; |
19 import java.awt.Font; | 19 import java.awt.Font; |
20 import java.awt.image.BufferedImage; | 20 import java.awt.image.BufferedImage; |
21 import java.io.BufferedOutputStream; | |
22 import java.io.FileOutputStream; | |
23 import java.io.FileReader; | |
24 import java.io.IOException; | 21 import java.io.IOException; |
25 import java.io.OutputStream; | 22 import java.io.OutputStream; |
26 import java.util.Collection; | 23 import java.util.Collection; |
27 import java.util.Date; | 24 import java.util.Date; |
28 import java.util.Iterator; | 25 import java.util.Iterator; |
67 */ | 64 */ |
68 private static Logger sLogger = Logger.getLogger(ChartFactory.class); | 65 private static Logger sLogger = Logger.getLogger(ChartFactory.class); |
69 private static boolean sDebug = sLogger.isDebugEnabled(); | 66 private static boolean sDebug = sLogger.isDebugEnabled(); |
70 | 67 |
71 | 68 |
72 public synchronized void createSimpleTimeSeriesChart(ChartLabels pLabels, ChartStyle pStyle, String pTimeSeriesName, KeyValueDescibeData[] pParameterId,KeyValueDescibeData[] pMeasurementId, KeyValueDescibeData[] pFeatureId , OutputStream outputStream, Collection<Result> resultSet) throws IOException, TechnicalChartException { | 69 public synchronized void createSimpleTimeSeriesChart(ChartLabels pLabels, ChartStyle pStyle, String pTimeSeriesName, Collection<KeyValueDescibeData> parameters, Collection<KeyValueDescibeData> measurements, OutputStream outputStream, Collection<Result> resultSet) throws IOException, TechnicalChartException { |
73 if (sDebug) | 70 if (sDebug) |
74 sLogger.debug("createSimpleTimeSeriesChart()"); | 71 sLogger.debug("createSimpleTimeSeriesChart()"); |
75 int lLowerLevel = Integer.MIN_VALUE; | 72 int lLowerLevel = Integer.MIN_VALUE; |
76 int lUpperLevel = Integer.MAX_VALUE; | 73 int lUpperLevel = Integer.MAX_VALUE; |
77 if (pStyle.isUseUpperDataLevel() | 74 if (pStyle.isUseUpperDataLevel() |
83 lLowerLevel = pStyle.getLowerLevel(); | 80 lLowerLevel = pStyle.getLowerLevel(); |
84 } | 81 } |
85 if (sDebug) | 82 if (sDebug) |
86 sLogger.debug(" vor createDataset()"); | 83 sLogger.debug(" vor createDataset()"); |
87 XYDataset lSet = createDataset(pTimeSeriesName, resultSet, lUpperLevel, | 84 XYDataset lSet = createDataset(pTimeSeriesName, resultSet, lUpperLevel, |
88 lLowerLevel,pParameterId,pMeasurementId,pFeatureId); | 85 lLowerLevel,parameters,measurements); |
89 if (sDebug) | 86 if (sDebug) |
90 sLogger.debug(" nach createDataset()"); | 87 sLogger.debug(" nach createDataset()"); |
91 final Color[] color = {Color.black, Color.red, Color.green, Color.blue}; | 88 final Color[] color = {Color.black, Color.red, Color.green, Color.blue}; |
92 DateAxis domain = new DateAxis("Zeit [UTC]"); | 89 DateAxis domain = new DateAxis("Zeit [UTC]"); |
93 NumberAxis axis; | 90 NumberAxis axis; |
101 plot.setRangeGridlinePaint(Color.white); | 98 plot.setRangeGridlinePaint(Color.white); |
102 plot.setAxisOffset(new RectangleInsets(5.0,5.0,5.0,5.0)); | 99 plot.setAxisOffset(new RectangleInsets(5.0,5.0,5.0,5.0)); |
103 //plot.getRangeAxis().setFixedDimension(10.0); | 100 //plot.getRangeAxis().setFixedDimension(10.0); |
104 plot.setDomainAxis(domain); | 101 plot.setDomainAxis(domain); |
105 plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_LEFT); | 102 plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_LEFT); |
106 if (pParameterId.length == 1) { | 103 if (parameters.size() == 1) { |
107 axis = new NumberAxis(pParameterId[0].getValue()); | 104 KeyValueDescibeData parameter = parameters.iterator().next(); |
108 if(pParameterId[0].getValue().contains("richtung")){ | 105 axis = new NumberAxis(parameter.getValue()); |
106 if(parameter.getValue().contains("richtung")){ | |
109 NumberAxis axis1 = new NumberAxis( | 107 NumberAxis axis1 = new NumberAxis( |
110 ((String) pParameterId[0].getValue()));//,new Range(0.0,360.0)); | 108 ((String) parameter.getValue()));//,new Range(0.0,360.0)); |
111 axis1.setTickUnit(new NumberTickUnit(30.0)); | 109 axis1.setTickUnit(new NumberTickUnit(30.0)); |
112 axis1.setUpperBound(360.0); | 110 axis1.setUpperBound(360.0); |
113 axis1.setLowerBound(0.0); | 111 axis1.setLowerBound(0.0); |
114 //axis1.setDisplayRange(0.0,360.0); | 112 //axis1.setDisplayRange(0.0,360.0); |
115 plot.setRangeAxis( axis1); | 113 plot.setRangeAxis( axis1); |
244 maxGap = (dEnd.getTime() - dStart.getTime())/(pEnd-pStart) + 1000; | 242 maxGap = (dEnd.getTime() - dStart.getTime())/(pEnd-pStart) + 1000; |
245 | 243 |
246 if (sDebug) | 244 if (sDebug) |
247 sLogger.debug("MaxGap : "+maxGap/1000+" Länge : "+(dEnd.getTime() - dStart.getTime())/1000+ | 245 sLogger.debug("MaxGap : "+maxGap/1000+" Länge : "+(dEnd.getTime() - dStart.getTime())/1000+ |
248 "Intervall "+(dEnd.getTime() - dStart.getTime())/(pEnd-pStart)/1000); | 246 "Intervall "+(dEnd.getTime() - dStart.getTime())/(pEnd-pStart)/1000); |
249 lDate = lRow0.getDate("PARAMETERID"); | 247 lDate = lRow0.getDate("TIMEVALUE"); |
250 lDate0 = lDate; | 248 lDate0 = lDate; |
251 lValue = lRow0.getDouble("DATAVALUE"); | 249 lValue = lRow0.getDouble("DATAVALUE"); |
252 if (lValue > lLowerCut && lValue < lUpperCut){ | 250 if (lValue > lLowerCut && lValue < lUpperCut){ |
253 //lTimeseries.addOrUpdate(new Minute(lDate), lValue); | 251 //lTimeseries.addOrUpdate(new Minute(lDate), lValue); |
254 lTimeseries.add(new Minute(lDate), lValue); | 252 lTimeseries.add(new Minute(lDate), lValue); |
255 } | 253 } |
256 } | 254 } |
257 //for (int i = pStart+1; i <= pEnd; i++) { | 255 //for (int i = pStart+1; i <= pEnd; i++) { |
258 lRow1 =lRow; | 256 lRow1 =lRow; |
259 lDate = lRow1.getDate("PARAMETERID"); | 257 lDate = lRow1.getDate("TIMEVALUE"); |
260 lValue = lRow1.getDouble("DATAVALUE"); | 258 lValue = lRow1.getDouble("DATAVALUE"); |
261 lDateDiff = lDate.getTime() - lDate0.getTime(); | 259 lDateDiff = lDate.getTime() - lDate0.getTime(); |
262 if (lDateDiff > maxGap) { | 260 if (lDateDiff > maxGap) { |
263 // add 1 minute in millisecs to left hand side Date | 261 // add 1 minute in millisecs to left hand side Date |
264 // and insert Dummy to break line | 262 // and insert Dummy to break line |
293 | 291 |
294 return lTimeseries; | 292 return lTimeseries; |
295 } | 293 } |
296 | 294 |
297 private XYDataset createDataset(String pTimeseriesName, Collection<Result> resultSet, | 295 private XYDataset createDataset(String pTimeseriesName, Collection<Result> resultSet, |
298 int lUpperCut, int lLowerCut,KeyValueDescibeData[] pParameterId, | 296 int lUpperCut, int lLowerCut,Collection<KeyValueDescibeData> parameters, Collection<KeyValueDescibeData> measurements) throws TechnicalChartException { |
299 KeyValueDescibeData[] pMeasurementId, KeyValueDescibeData[] pFeatureID) throws TechnicalChartException { | |
300 | 297 |
301 TimeSeriesCollection lTimeSeriesCollection = new TimeSeriesCollection(); | 298 TimeSeriesCollection lTimeSeriesCollection = new TimeSeriesCollection(); |
302 try{ | 299 try{ |
303 Date dStart = null, dEnd= null; | 300 Date dStart = null, dEnd= null; |
304 int break1, break2, break3; | 301 int break1, break2, break3; |
319 while (resultIterator.hasNext()) { | 316 while (resultIterator.hasNext()) { |
320 row = resultIterator.next(); | 317 row = resultIterator.next(); |
321 if (break1 != row.getInteger("PARAMETERID").intValue() | 318 if (break1 != row.getInteger("PARAMETERID").intValue() |
322 || break2 != row.getInteger("MEASUREMENTID").intValue() | 319 || break2 != row.getInteger("MEASUREMENTID").intValue() |
323 || break3 != row.getInteger("TIMESERIESID").intValue()){ | 320 || break3 != row.getInteger("TIMESERIESID").intValue()){ |
324 String mTimeSeriesName = findValueTitle(pParameterId,break1)+" "+ | 321 String mTimeSeriesName = findValueTitle(parameters,break1)+" "+ |
325 findValueTitle(pMeasurementId,break2)+"m"; | 322 findValueTitle(measurements,break2)+"m"; |
326 | 323 |
327 lTimeSeriesCollection.addSeries(createTimeSeries(mTimeSeriesName, | 324 lTimeSeriesCollection.addSeries(createTimeSeries(mTimeSeriesName, |
328 resultSet, lUpperCut, lLowerCut, mStart, mEnd, dStart, dEnd)); | 325 resultSet, lUpperCut, lLowerCut, mStart, mEnd, dStart, dEnd)); |
329 mStart = i; | 326 mStart = i; |
330 dStart = row.getDate("TIMEVALUE"); | 327 dStart = row.getDate("TIMEVALUE"); |
337 //mEnd ++; | 334 //mEnd ++; |
338 dEnd = row.getDate("TIMEVALUE"); | 335 dEnd = row.getDate("TIMEVALUE"); |
339 i = i + 1; | 336 i = i + 1; |
340 } | 337 } |
341 | 338 |
342 String mTimeSeriesName = findValueTitle(pParameterId,break1)+" "+ | 339 String mTimeSeriesName = findValueTitle(parameters,break1)+" "+ |
343 findValueTitle(pMeasurementId,break2)+"m"; | 340 findValueTitle(measurements,break2)+"m"; |
344 lTimeSeriesCollection.addSeries(createTimeSeries(mTimeSeriesName, | 341 lTimeSeriesCollection.addSeries(createTimeSeries(mTimeSeriesName, |
345 resultSet, lUpperCut, lLowerCut, mStart, mEnd, dStart, dEnd)); | 342 resultSet, lUpperCut, lLowerCut, mStart, mEnd, dStart, dEnd)); |
346 } | 343 } |
347 } | 344 } |
348 catch (Exception e){ | 345 catch (Exception e){ |
363 lEncoder.setEncodingAlpha(true); | 360 lEncoder.setEncodingAlpha(true); |
364 | 361 |
365 int lWidth = (int) pStyle.getChartSize().getWidth(); | 362 int lWidth = (int) pStyle.getChartSize().getWidth(); |
366 int lHeight = (int) pStyle.getChartSize().getHeight(); | 363 int lHeight = (int) pStyle.getChartSize().getHeight(); |
367 | 364 |
368 FileOutputStream lFileOutputStream = null; | |
369 BufferedOutputStream lBufferedOutputStream = null; | |
370 | |
371 | |
372 BufferedImage lImage = pChart.createBufferedImage(lWidth, lHeight, | 365 BufferedImage lImage = pChart.createBufferedImage(lWidth, lHeight, |
373 BufferedImage.BITMASK, null); | 366 BufferedImage.BITMASK, null); |
374 | 367 |
375 lEncoder.encode(lImage, outputStream); | 368 lEncoder.encode(lImage, outputStream); |
376 | 369 |
377 } | 370 } |
378 | 371 |
379 private String findValueTitle(KeyValueDescibeData[] pValueId,int pMmtId){ | 372 private String findValueTitle(Collection<KeyValueDescibeData> values,int pMmtId){ |
380 for (int i=0;i<pValueId.length;i++){ | 373 Iterator<KeyValueDescibeData> it = values.iterator(); |
381 if ((long) pMmtId ==pValueId[i].getKey())return pValueId[i].getValue(); | 374 while(it.hasNext()){ |
375 KeyValueDescibeData data = it.next(); | |
376 if ((long) pMmtId ==data.getKey()){ | |
377 return data.getValue(); | |
378 } | |
382 } | 379 } |
383 return ""; | 380 return ""; |
384 } | 381 } |
385 } | 382 } |