felix@1151: package de.intevation.flys.exports; felix@1151: felix@1151: import java.util.ArrayList; felix@1151: import java.util.List; felix@1151: felix@1151: import org.apache.log4j.Logger; felix@1151: felix@1151: import org.jfree.chart.JFreeChart; felix@1151: import org.jfree.chart.axis.NumberAxis; felix@1151: import org.jfree.chart.axis.ValueAxis; felix@1151: import org.jfree.chart.plot.XYPlot; felix@1151: import org.jfree.chart.title.TextTitle; felix@1151: import org.jfree.data.Range; felix@1151: import org.jfree.data.xy.XYSeries; felix@1151: import org.jfree.data.xy.XYSeriesCollection; felix@1151: import org.jfree.ui.TextAnchor; felix@1151: felix@1151: import org.w3c.dom.Document; felix@1151: felix@1151: import de.intevation.artifacts.Artifact; felix@1151: felix@1151: import de.intevation.artifactdatabase.state.Facet; felix@1151: felix@1151: import de.intevation.flys.artifacts.FLYSArtifact; felix@1151: felix@1151: import de.intevation.flys.artifacts.model.FacetTypes; felix@1151: import de.intevation.flys.artifacts.model.WKms; felix@1151: import de.intevation.flys.artifacts.model.WQKms; felix@1151: felix@1151: import de.intevation.flys.model.Annotation; felix@1151: import de.intevation.flys.jfree.StickyAxisAnnotation; felix@1151: felix@1151: felix@1151: /** felix@1151: * An OutGenerator that generates w differences curves. felix@1151: */ felix@1151: public class WDifferencesCurveGenerator felix@1151: extends LongitudinalSectionGenerator felix@1151: implements FacetTypes felix@1151: { felix@1151: /** The logger that is used in this generator. */ felix@1151: private static Logger logger = felix@1151: Logger.getLogger(WDifferencesCurveGenerator.class); felix@1151: felix@1151: public static final String I18N_CHART_TITLE = felix@1151: "chart.w_differences.title"; felix@1151: felix@1151: public static final String I18N_CHART_SUBTITLE = felix@1151: "chart.w_differences.subtitle"; felix@1151: felix@1151: public static final String I18N_2YAXIS_LABEL = felix@1151: "chart.w_differences.yaxis.second.label"; felix@1151: felix@1151: // TODO proper i18n. felix@1151: public static final String I18N_CHART_TITLE_DEFAULT = "W-Differenzen"; felix@1151: public static final String I18N_XAXIS_LABEL_DEFAULT = "km"; felix@1151: public static final String I18N_YAXIS_LABEL_DEFAULT = "W [NN + m]"; felix@1151: felix@1151: felix@1151: /** felix@1151: * Add a subtitle to Chart. felix@1151: * @param chart Chart to add subtitle to. felix@1151: */ felix@1151: @Override felix@1151: protected void addSubtitles(JFreeChart chart) { felix@1151: String subtitle = msg(I18N_CHART_SUBTITLE, ""); felix@1151: chart.addSubtitle(new TextTitle(subtitle)); felix@1151: } felix@1151: felix@1151: felix@1151: /** felix@1151: * Add (themed) data for chart generation. felix@1151: */ felix@1151: public void doOut(Artifact artifact, Facet facet, Document attr) { felix@1151: String name = facet.getName(); felix@1151: felix@1151: logger.debug("WDifferencesCurveGenerator.doOut: " + name); felix@1151: felix@1151: if (name == null) { felix@1151: logger.error("No facet name for doOut(). No output generated!"); felix@1151: return; felix@1151: } felix@1151: felix@1151: FLYSArtifact flys = (FLYSArtifact) artifact; felix@1151: Facet f = flys.getNativeFacet(facet); felix@1151: felix@1151: if (f == null) { felix@1151: return; felix@1151: } felix@1151: felix@1151: if (name.equals(W_DIFFERENCES)) { felix@1151: doWDifferencesOut((WKms) f.getData(artifact, context), attr); felix@1151: } felix@1151: else { felix@1151: logger.warn("Unknown facet name: " + name); felix@1151: return; felix@1151: } felix@1151: } felix@1151: felix@1151: felix@1151: /** felix@1151: * Add items to dataseries which describes the differences. felix@1151: */ felix@1151: protected void doWDifferencesOut(WKms wkms, Document theme) { felix@1151: logger.debug("WDifferencesCurveGenerator.doWDifferencesOut"); felix@1151: if (wkms == null) { felix@1151: logger.warn("No data to add to WDifferencesChart."); felix@1151: return; felix@1151: } felix@1151: felix@1151: int size = wkms.size(); felix@1151: // TODO get series name felix@1151: XYSeries series = new StyledXYSeries(getSeriesName(wkms, "delta"), theme); felix@1151: felix@1151: if (logger.isDebugEnabled()) { felix@1151: if (wkms.size() > 0) { felix@1151: logger.debug("Generate series: " + series.getKey()); felix@1151: logger.debug("Start km: " + wkms.getKm(0)); felix@1151: logger.debug("End km: " + wkms.getKm(size-1)); felix@1151: logger.debug("Values : " + size); felix@1151: } felix@1151: } felix@1151: felix@1151: for (int i = 0; i < size; i++) { felix@1151: series.add(wkms.getKm(i), wkms.getW(i)); felix@1151: } felix@1151: felix@1151: addFirstAxisSeries(series); felix@1151: } felix@1151: felix@1151: felix@1151: /** felix@1151: * Get name of series (displayed in legend). felix@1151: * @return name of the series. felix@1151: */ felix@1151: protected String getSeriesName(WKms wqkms, String mode) { felix@1151: String name = wqkms.getName(); felix@1151: String prefix = (name != null && name.indexOf(mode) >= 0) felix@1151: ? null felix@1151: : mode; felix@1151: felix@1151: return (prefix != null && prefix.length() > 0) felix@1151: ? prefix + "(" + name +")" felix@1151: : name; felix@1151: } felix@1151: } felix@1151: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :