tim@197: /** tim@197: * tim@197: */ tim@197: package de.intevation.gnv.transition.profile.verticalcrosssection; tim@197: tim@197: import java.io.IOException; tim@197: import java.io.OutputStream; tim@197: import java.io.OutputStreamWriter; tim@197: import java.io.UnsupportedEncodingException; tim@197: import java.util.Collection; tim@197: import java.util.Iterator; ingo@300: import java.util.Locale; tim@197: tim@197: import org.apache.log4j.Logger; tim@197: ingo@300: import org.jfree.chart.ChartTheme; ingo@300: tim@197: import au.com.bytecode.opencsv.CSVWriter; tim@197: tim@197: import com.vividsolutions.jts.geom.Point; tim@197: import com.vividsolutions.jts.io.ParseException; tim@197: import com.vividsolutions.jts.io.WKTReader; tim@197: ingo@300: import de.intevation.gnv.chart.Chart; tim@197: import de.intevation.gnv.chart.ChartLabels; tim@197: import de.intevation.gnv.chart.ChartStyle; tim@197: import de.intevation.gnv.chart.VerticalCrossSectionChartFactory; tim@197: import de.intevation.gnv.chart.exception.TechnicalChartException; tim@197: import de.intevation.gnv.geobackend.base.Result; tim@197: import de.intevation.gnv.statistics.Statistics; tim@197: import de.intevation.gnv.statistics.VerticalProfileStatistics; tim@197: import de.intevation.gnv.transition.describedata.KeyValueDescibeData; tim@197: import de.intevation.gnv.transition.exception.TransitionException; tim@197: import de.intevation.gnv.transition.timeseries.TimeSeriesOutputTransition; tim@197: tim@197: /** tim@197: * @author Tim Englich tim@197: * tim@197: */ tim@197: public class VerticalCrossSectionOutputTransition extends TimeSeriesOutputTransition { tim@197: tim@197: private static Logger log = Logger tim@197: .getLogger(VerticalCrossSectionOutputTransition.class); tim@197: tim@197: /** tim@197: * The UID of this Class tim@197: */ tim@197: private static final long serialVersionUID = 3233620652465061860L; tim@197: tim@197: /** tim@197: * Constructor tim@197: */ tim@197: public VerticalCrossSectionOutputTransition() { tim@197: super(); tim@197: super.domainLable = "Depth [m]"; tim@197: } tim@197: ingo@300: ingo@300: protected Chart getChart( ingo@300: ChartLabels chartLables, ingo@300: ChartTheme chartTheme, ingo@300: Collection parameters, ingo@300: Collection measurements, ingo@300: Collection result, ingo@300: Collection dates, ingo@300: Locale locale, ingo@300: String uuid ingo@300: ) { ingo@300: Chart chart = null; ingo@300: ingo@300: if (CACHE_CHART) { ingo@300: log.info("Try to get verticalcrosssection chart from cache."); ingo@300: chart = (Chart) getChartFromCache(uuid); ingo@300: } ingo@300: ingo@300: if (chart != null) ingo@300: return chart; ingo@300: ingo@300: log.info("Chart not in cache yet."); ingo@300: ingo@300: log.warn("This sort of chart is not implemented yet."); ingo@300: /* TODO Implement a special chart for this sort of charts. ingo@300: chart = new VerticalProfileChart( ingo@300: chartLables, ingo@300: chartTheme, ingo@300: parameters, ingo@300: measurements, ingo@300: result, ingo@300: dates, ingo@300: locale ingo@300: ); ingo@300: chart.generateChart(); ingo@300: ingo@300: if (CACHE_CHART) { ingo@300: log.info("Put chart into cache."); ingo@300: purifyChart(chart, uuid); ingo@300: } ingo@300: */ ingo@300: ingo@300: return chart; ingo@300: } ingo@300: tim@197: /** tim@197: * @see de.intevation.gnv.transition.timeseries.TimeSeriesOutputTransition#createChart(java.io.OutputStream, tim@197: * java.util.Collection, java.util.Collection, java.lang.String, tim@197: * de.intevation.gnv.chart.ChartStyle, tim@197: * de.intevation.gnv.chart.ChartLabels) tim@197: */ ingo@300: /* tim@197: @Override tim@197: protected void createChart(OutputStream outputStream, tim@197: Collection parameters, tim@197: Collection measurements, tim@197: Collection dates, tim@197: ChartStyle chartStyle, ChartLabels chartLables, tim@197: String uuid) throws IOException, tim@197: TechnicalChartException { tim@197: new VerticalCrossSectionChartFactory().createProfileChart(chartLables, tim@197: chartStyle, parameters, measurements, dates, outputStream, this tim@197: .getChartResult(uuid)); tim@197: } ingo@300: */ tim@197: tim@197: /** tim@197: * @see de.intevation.gnv.transition.timeseries.TimeSeriesOutputTransition#getStatisticsGenerator() tim@197: */ tim@197: @Override tim@197: protected Statistics getStatisticsGenerator() { tim@197: return new VerticalProfileStatistics(); tim@197: } tim@197: tim@197: /** tim@197: * @see de.intevation.gnv.transition.timeseries.TimeSeriesOutputTransition#createCSV(java.io.OutputStream, java.util.Collection) tim@197: */ tim@197: @Override tim@197: protected void createCSV(OutputStream outputStream, tim@197: Collection chartResult) tim@197: throws UnsupportedEncodingException, tim@197: IOException, tim@197: TransitionException { tim@197: if (chartResult != null) { tim@197: try { tim@197: CSVWriter writer = new CSVWriter(new OutputStreamWriter( tim@197: outputStream, "ISO-8859-1"), ','); tim@197: // USE THIS ENCODING BECAUSE OF tim@197: // PROBLEMS WITH EXCEL AND UTF-8 tim@197: Iterator it = chartResult.iterator(); tim@197: WKTReader wktReader = new WKTReader(); tim@197: while (it.hasNext()) { tim@197: Result result = it.next(); tim@197: int i = 0; tim@197: String[] entries = new String[8]; tim@197: Point p = (Point)wktReader.read(result.getString("SHAPE")); tim@197: entries[i++] = ""+p.getX(); tim@197: entries[i++] = ""+p.getY(); tim@197: entries[i++] = result.getString("YORDINATE"); tim@197: entries[i++] = result.getString("GROUP1"); tim@197: entries[i++] = result.getString("GROUP2"); tim@197: entries[i++] = result.getString("IPOSITION"); tim@197: entries[i++] = result.getString("JPOSITION"); tim@197: entries[i++] = result.getString("KPOSITION"); tim@197: writer.writeNext(entries); tim@197: } tim@197: writer.close(); tim@197: } catch (ParseException e) { tim@197: log.error(e,e); tim@197: throw new TransitionException( tim@197: "Exception occured while parsing an Point from WKT."); tim@197: } tim@197: } else { tim@197: log.error("No Data given for generating an CSV-File."); tim@197: throw new TransitionException( tim@197: "No Data given for generating an CSV-File."); tim@197: } tim@197: } tim@197: tim@197: }