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 :