tim@64: /** tim@64: * tim@64: */ tim@64: package de.intevation.gnv.transition.timeseries; tim@64: tim@68: import java.awt.Color; tim@68: import java.awt.Dimension; tim@68: import java.io.IOException; tim@73: import java.io.OutputStream; tim@68: import java.util.Collection; tim@68: import java.util.Iterator; tim@68: tim@68: import org.apache.log4j.Logger; tim@68: tim@68: import de.intevation.gnv.chart.ChartFactory; tim@68: import de.intevation.gnv.chart.ChartLabels; tim@68: import de.intevation.gnv.chart.ChartStyle; tim@68: import de.intevation.gnv.chart.exception.TechnicalChartException; tim@68: import de.intevation.gnv.geobackend.base.Result; tim@64: import de.intevation.gnv.transition.OutputTransitionBase; tim@68: import de.intevation.gnv.transition.describedata.KeyValueDescibeData; tim@81: import de.intevation.gnv.transition.describedata.NamedCollection; tim@68: import de.intevation.gnv.transition.exception.TransitionException; tim@64: tim@64: /** tim@64: * @author Tim Englich tim@64: * tim@64: */ tim@64: public class TimeSeriesOutputTransition extends OutputTransitionBase{ tim@86: tim@86: /** tim@86: * The UID of this Class tim@86: */ tim@86: private static final long serialVersionUID = 4178407570503098858L; tim@68: tim@68: /** tim@68: * the logger, used to log exceptions and additonaly information tim@68: */ tim@68: private static Logger log = Logger.getLogger(TimeSeriesOutputTransition.class); tim@86: tim@86: protected String domainLable = "Zeit [UTC]"; tim@86: tim@64: /** tim@64: * Constructor tim@64: */ tim@64: public TimeSeriesOutputTransition() { tim@64: super(); tim@64: } tim@64: tim@64: /** tim@64: * @see de.intevation.gnv.transition.Transition#validate() tim@64: */ tim@64: public boolean validate() { tim@64: return true; tim@64: } tim@64: tim@73: /** tim@73: * @see de.intevation.gnv.transition.OutputTransition#out(java.lang.String, java.io.OutputStream) tim@73: */ tim@73: public void out(String outputMode, OutputStream outputStream) throws TransitionException { tim@68: log.debug("TimeSeriesOutputTransition"); tim@68: try { tim@86: this.advance(); tim@68: Collection parameters = this.getParameters(); tim@68: Collection measurements = this.getMeasurements(); tim@68: ChartStyle chartStyle = this.creatStyle(600,400); tim@86: ChartLabels chartLables = new ChartLabels(this.getSelectedFeatureName(),this.domainLable); tim@86: this.createChart(outputStream, parameters, measurements, tim@82: chartStyle, chartLables); tim@68: } catch (IOException e) { tim@68: log.error(e,e); tim@68: throw new TransitionException(e); tim@68: } catch (TechnicalChartException e) { tim@68: log.error(e,e); tim@68: throw new TransitionException(e); tim@68: } tim@68: } tim@68: tim@86: tim@86: protected String getSelectedFeatureName(){ tim@86: String collectionName = "featureid"; // TODO: Konfigurierbar machen tim@86: Collection values = this.getCollection(collectionName); tim@86: if (values != null){ tim@86: Iterator it = values.iterator(); tim@86: while(it.hasNext()){ tim@86: KeyValueDescibeData data = it.next(); tim@86: if (data.isSelected()){ tim@86: return data.getValue(); tim@86: } tim@86: } tim@86: } tim@86: return null; tim@86: } tim@86: /** tim@86: * @param outputStream tim@86: * @param parameters tim@86: * @param measurements tim@86: * @param timeSeriesName tim@86: * @param chartStyle tim@86: * @param chartLables tim@86: * @throws IOException tim@86: * @throws TechnicalChartException tim@86: */ tim@86: protected void createChart(OutputStream outputStream, tim@86: Collection parameters, tim@86: Collection measurements, tim@86: ChartStyle chartStyle, ChartLabels chartLables) throws IOException, tim@86: TechnicalChartException { tim@86: ChartFactory chartFactory = new ChartFactory(); tim@86: chartFactory.createSimpleTimeSeriesChart(chartLables, chartStyle, tim@86: parameters, measurements, tim@86: outputStream, this.chartResult); tim@86: } tim@82: tim@68: /** tim@68: * @see de.intevation.gnv.transition.TransitionBase#purifyResult(java.util.Collection) tim@68: */ tim@68: @Override tim@68: protected void purifyResult(Collection result) { tim@68: this.chartResult = result; tim@68: } tim@68: tim@68: protected ChartStyle creatStyle(int witdh, int height){ tim@68: // TODO Konfigurierbar machen tim@68: de.intevation.gnv.chart.Insets lInsets = new de.intevation.gnv.chart.Insets(5d, 5d, 5d, 5d); tim@68: Dimension lChartSize = new Dimension(witdh, height); tim@68: return new ChartStyle(Color.white, new Color(230, 230, 230), Color.white, Color.white, true, true, lInsets, lChartSize); tim@68: } tim@68: tim@68: protected Collection getParameters(){ tim@86: String collectionName = "parameterid"; // TODO: Konfigurierbar machen tim@82: return this.getCollection(collectionName); tim@64: } tim@68: tim@68: protected Collection getMeasurements(){ tim@86: String collectionName = "measurementid"; // TODO: Konfigurierbar machen tim@82: return this.getCollection(collectionName); tim@82: } tim@82: tim@82: /** tim@82: * @param collectionName tim@82: * @return tim@82: */ tim@82: protected Collection getCollection( tim@82: String collectionName) { tim@68: Iterator it = this.descibeData.iterator(); tim@68: while (it.hasNext()){ tim@68: tim@68: Object o = it.next(); tim@82: tim@81: if (o instanceof NamedCollection){ tim@81: NamedCollection nc = (NamedCollection)o; tim@86: if (nc.getName().equals(collectionName)){ tim@81: return nc; tim@81: } tim@68: } tim@68: } tim@68: return null; tim@68: } tim@64: }