ingo@1115: /* ingo@1115: * Copyright (c) 2010 by Intevation GmbH ingo@1115: * ingo@1115: * This program is free software under the LGPL (>=v2.1) ingo@1115: * Read the file LGPL.txt coming with the software for details ingo@1115: * or visit http://www.gnu.org/licenses/ if it does not exist. ingo@1115: */ ingo@1115: tim@335: package de.intevation.gnv.state.profile.vertical; tim@335: sascha@779: import de.intevation.artifacts.CallContext; sascha@779: sascha@779: import de.intevation.gnv.chart.Chart; sascha@779: import de.intevation.gnv.chart.ChartLabels; sascha@779: import de.intevation.gnv.chart.VerticalProfileChart; sascha@779: sascha@779: import de.intevation.gnv.exports.DefaultDataCollector; sascha@779: import de.intevation.gnv.exports.DefaultExport; sascha@779: import de.intevation.gnv.exports.DefaultProfile; sascha@779: sascha@779: import de.intevation.gnv.exports.Export.Profile; sascha@779: sascha@779: import de.intevation.gnv.geobackend.base.Result; sascha@779: sascha@779: import de.intevation.gnv.state.exception.StateException; sascha@779: sascha@779: import de.intevation.gnv.state.timeseries.TimeSeriesOutputState; sascha@779: sascha@779: import de.intevation.gnv.statistics.Statistics; sascha@779: import de.intevation.gnv.statistics.VerticalProfileStatistics; sascha@779: ingo@368: import java.io.IOException; ingo@368: import java.io.OutputStream; ingo@368: import java.io.UnsupportedEncodingException; sascha@779: tim@335: import java.util.Collection; ingo@368: import java.util.Iterator; tim@335: import java.util.Locale; tim@335: tim@335: import org.apache.log4j.Logger; ingo@358: sascha@779: import org.jfree.chart.ChartTheme; tim@335: tim@335: /** sascha@780: * @author Tim Englich sascha@778: * tim@335: */ tim@335: public class VerticalProfileOutputState extends TimeSeriesOutputState { ingo@368: ingo@368: public static final String [] VERTICAL_PROFILE_COLUMNS = { ingo@368: "XORDINATE", // not quite sure if this is depth ingo@368: "YORDINATE", tim@762: "GROUP1", tim@762: "FEATUREID", tim@762: "TIMESERIESID" tim@762: }; sascha@778: tim@762: public static final String [] VERTICAL_PROFILE_MESH_COLUMNS = { tim@762: "XORDINATE", // not quite sure if this is depth tim@762: "YORDINATE", tim@762: "GROUP1", tim@762: "FEATUREID", tim@762: "MESHID" tim@762: }; sascha@778: tim@762: public static final String [] VERTICAL_PROFILE_MEASUREMENT_COLUMNS = { tim@762: "XORDINATE", // not quite sure if this is depth tim@762: "YORDINATE", tim@762: "GROUP1", tim@762: "FEATUREID", tim@762: "SERIESID" ingo@368: }; ingo@368: ingo@368: ingo@368: public static final String [] VERTICAL_MESH_CSV_COLUMN_LABEL = { ingo@368: "CentralDepth", ingo@368: "Value", tim@762: "ParameterID", tim@762: "FeatureID", tim@762: "MeshID" ingo@368: }; ingo@368: ingo@368: ingo@368: public static final String [] VERTICAL_TIMESERIES_CSV_COLUMN_LABEL = { ingo@368: "Depth", ingo@368: "Value", tim@762: "ParameterID", tim@762: "FeatureID", tim@762: "TimeseriesID" ingo@368: }; ingo@368: ingo@368: ingo@368: public static final String [] VERTICAL_MEASUREMENT_CSV_COLUMN_LABEL = { ingo@368: "Depth", ingo@368: "Value", tim@762: "ParameterID", tim@762: "FeatureID", tim@762: "SeriesID" ingo@368: }; ingo@368: ingo@368: tim@335: /** tim@335: * The UID of this class tim@335: */ tim@335: private static final long serialVersionUID = 4401516087492028840L; tim@335: tim@335: private static Logger log = Logger tim@335: .getLogger(TimeSeriesOutputState.class); tim@335: tim@335: /** ingo@804: * Creates a new VerticalProfileOutputState object. tim@335: */ tim@335: public VerticalProfileOutputState() { tim@335: super(); ingo@343: super.domainLable = "chart.verticalprofile.title.xaxis"; tim@335: } tim@335: ingo@368: tim@335: @Override tim@335: protected Chart getChart( tim@335: ChartLabels chartLables, ingo@358: ChartTheme theme, tim@335: Collection parameters, tim@335: Collection measurements, tim@335: Collection dates, ingo@429: Object result, tim@335: Locale locale, tim@335: String uuid, tim@335: boolean linesVisible, sascha@439: boolean shapesVisible, sascha@439: CallContext callContext tim@335: ) { tim@335: Chart chart = null; tim@335: tim@335: if (CACHE_CHART) { tim@335: log.info("Try to get verticalprofile chart from cache."); sascha@439: chart = (Chart) getChartFromCache(uuid, callContext); tim@335: } tim@335: tim@335: if (chart != null) tim@335: return chart; tim@335: tim@335: log.info("Chart not in cache yet."); tim@335: chart = new VerticalProfileChart( tim@335: chartLables, ingo@358: theme, tim@335: parameters, tim@335: measurements, tim@335: dates, ingo@429: (Collection)result, tim@335: null, tim@335: locale, tim@335: linesVisible, tim@335: shapesVisible tim@335: ); tim@335: chart.generateChart(); tim@335: tim@335: if (CACHE_CHART) { tim@335: log.info("Put chart into cache."); tim@335: purifyChart(chart, uuid); tim@335: } tim@335: tim@335: return chart; tim@335: } tim@335: tim@335: ingo@804: /** ingo@804: * Creates a csv file of the resulting data and writes it to output stream. ingo@804: * ingo@804: * @param out The output stream. ingo@804: * @param results The data used to create the csv file. ingo@804: * @throws UnsupportedEncodingException if the encoding is not supported. ingo@804: * @throws IOException if an error occured while writing to output stream. ingo@804: * @throws StateException if an error occured while creating the csv file. ingo@804: */ ingo@368: @Override ingo@368: protected void createCSV(OutputStream out, Collection results) ingo@368: throws UnsupportedEncodingException, IOException, StateException ingo@368: { tim@762: Iterator iter = results.iterator(); tim@762: Result res = iter.hasNext() ? iter.next() : null; ingo@368: ingo@368: if (res == null) ingo@368: return; ingo@368: ingo@368: Profile profile = null; ingo@368: int dataid = res.getInteger("DATAID").intValue(); tim@762: DefaultExport export = null; ingo@368: // on meshes ingo@368: if (dataid == 2) { ingo@368: profile = new DefaultProfile( ingo@368: VERTICAL_MESH_CSV_COLUMN_LABEL, ingo@368: ',', ingo@368: '"', ingo@368: '"', ingo@368: "CSV", ingo@368: "ISO-8859-1"); tim@762: export = new DefaultExport( tim@762: new DefaultDataCollector(VERTICAL_PROFILE_MESH_COLUMNS)); ingo@368: } ingo@368: ingo@368: // on timeseries ingo@368: else if (dataid == 1) { ingo@368: profile = new DefaultProfile( ingo@368: VERTICAL_TIMESERIES_CSV_COLUMN_LABEL, ingo@368: ',', ingo@368: '"', ingo@368: '"', ingo@368: "CSV", ingo@368: "ISO-8859-1"); tim@762: export = new DefaultExport( tim@762: new DefaultDataCollector(VERTICAL_PROFILE_COLUMNS)); ingo@368: } ingo@368: ingo@368: // on measurements ingo@368: else { ingo@368: profile = new DefaultProfile( ingo@368: VERTICAL_MEASUREMENT_CSV_COLUMN_LABEL, ingo@368: ',', ingo@368: '"', ingo@368: '"', ingo@368: "CSV", ingo@368: "ISO-8859-1"); tim@762: export = new DefaultExport( tim@762: new DefaultDataCollector(VERTICAL_PROFILE_MEASUREMENT_COLUMNS)); ingo@368: } ingo@368: export.create(profile, out, results); ingo@368: } ingo@368: ingo@368: ingo@804: @Override tim@335: protected String createChartSubtitle(Locale locale, String uuid) { tim@335: return getSelectedFeatureName(uuid); tim@335: } tim@335: tim@335: tim@335: @Override tim@335: protected Statistics getStatisticsGenerator() { tim@335: return new VerticalProfileStatistics(); tim@335: } tim@335: tim@335: } sascha@836: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :