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 }

http://dive4elements.wald.intevation.org