Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/exports/CrossSectionGenerator.java @ 1111:b96ce07ba56c
Added dummy sceleton for Cross Sections.
flys-artifacts/trunk@2617 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Wed, 31 Aug 2011 10:24:49 +0000 |
parents | |
children | 5b38cdf65307 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/CrossSectionGenerator.java Wed Aug 31 10:24:49 2011 +0000 @@ -0,0 +1,215 @@ +package de.intevation.flys.exports; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.log4j.Logger; + +import org.jfree.chart.JFreeChart; +import org.jfree.chart.axis.NumberAxis; +import org.jfree.chart.axis.ValueAxis; +import org.jfree.chart.plot.XYPlot; +import org.jfree.chart.title.TextTitle; +import org.jfree.data.Range; +import org.jfree.data.xy.XYSeries; +import org.jfree.data.xy.XYSeriesCollection; +import org.jfree.ui.TextAnchor; + +import org.w3c.dom.Document; + +import de.intevation.artifacts.Artifact; + +import de.intevation.artifactdatabase.state.Facet; + +import de.intevation.flys.artifacts.FLYSArtifact; + +import de.intevation.flys.artifacts.model.FacetTypes; +import de.intevation.flys.artifacts.model.WQKms; + +import de.intevation.flys.model.Annotation; +import de.intevation.flys.jfree.StickyAxisAnnotation; + + +/** + * An OutGenerator that generates cross section graphs. + */ +public class CrossSectionGenerator +extends XYChartGenerator +implements FacetTypes +{ + /** The logger that is used in this generator. */ + private static Logger logger = + Logger.getLogger(CrossSectionGenerator.class); + + public static final String I18N_CHART_TITLE = + "chart.cross_section.title"; + + public static final String I18N_CHART_SUBTITLE = + "chart.cross_section.subtitle"; + + public static final String I18N_XAXIS_LABEL = + "chart.cross_section.xaxis.label"; + + public static final String I18N_YAXIS_LABEL = + "chart.cross_section.yaxis.label"; + + public static final String I18N_CHART_TITLE_DEFAULT = "Querschnittt"; + public static final String I18N_XAXIS_LABEL_DEFAULT = "m"; + public static final String I18N_YAXIS_LABEL_DEFAULT = "W [NN + m]"; + + + protected boolean inverted; + + + /** Trivial Constructor. */ + public CrossSectionGenerator() { + super(); + } + + + protected String getChartTitle() { + return msg(I18N_CHART_TITLE, I18N_CHART_TITLE_DEFAULT); + } + + public boolean isInverted() { + return inverted; + } + + public void setInverted(boolean inverted) { + this.inverted = inverted; + } + + @Override + protected void addSubtitles(JFreeChart chart) { + double[] dist = getRange(); + + Object[] args = new Object[] { + getRiverName(), + dist[0], + dist[1] + }; + + //String subtitle = msg(I18N_CHART_SUBTITLE, "", args); + String subtitle = "bogus"; + chart.addSubtitle(new TextTitle(subtitle)); + } + + @Override + public JFreeChart generateChart() { + JFreeChart c = super.generateChart(); + XYPlot p = (XYPlot) c.getPlot(); + + return c; + } + + + protected String getXAxisLabel() { + return msg(I18N_XAXIS_LABEL, I18N_XAXIS_LABEL_DEFAULT); + } + + + protected String getYAxisLabel() { + return msg(I18N_YAXIS_LABEL, I18N_YAXIS_LABEL_DEFAULT); + } + + + protected void adjustAxes(XYPlot plot) { + super.adjustAxes(plot); + + NumberAxis qAxis = new NumberAxis( + msg(I18N_YAXIS_LABEL, I18N_YAXIS_LABEL_DEFAULT)); + + plot.setRangeAxis(1, qAxis); + + invertXAxis(plot.getDomainAxis()); + } + + + /** + * This method overrides the XYChartGenerators zoomY method to include the 0 + * value on the Q axis. + */ + @Override + protected boolean zoomY(XYPlot plot, ValueAxis axis, Range range, Range x) { + if (plot.getRangeAxisIndex(axis) == 1) { + // we want the Q axis to start at 0 if no zooming has been done + range = new Range(0d, range.getUpperBound()); + } + + return super.zoomY(plot, axis, range, x); + } + + + /** + * This method inverts the x-axis based on the kilometer information of the + * selected river. If the head of the river is at kilometer 0, the axis is + * not inverted, otherwise it is. + * + * @param xaxis The domain axis. + */ + protected void invertXAxis(ValueAxis xaxis) { + + if (inverted) { + logger.debug("Invert X-Axis."); + xaxis.setInverted(true); + } + } + + + public void doOut(Artifact artifact, Facet facet, Document attr) { + String name = facet.getName(); + + logger.debug("CrossSectionGenerator.doOut: " + name); + + if (name == null) { + logger.error("No facet name for doOut(). No output generated!"); + return; + } + + FLYSArtifact flys = (FLYSArtifact) artifact; + Facet f = flys.getNativeFacet(facet); + + if (f == null) { + return; + } + + if (name.equals(CROSS_SECTION)) { + doCrossSectionOut(f.getData(artifact, context), attr); + } + else { + logger.warn("CrossSection.doOut: Unknown facet name: " + name); + return; + } + } + + + /** + * Register annotations available for the diagram. + * + * @param o list of annotations (data of facet). + * @param theme yet ignored. + */ + protected void doCrossSectionOut(Object o, Document theme) { + logger.debug("LongitudinalSectionGenerator.doCrossSectionOut"); + + /*Object[] args = new Object[] {getRiverName()}; + String label = msg(I18N_ANNOTATIONS_LABEL, "", args); + pseudoAnnotationData.addSeries(new StyledXYSeries(label, theme));*/ + } + + + /** + * Get name of series (displayed in legend). + * @return name of the series. + */ + protected String getSeriesName(WQKms wqkms, String mode) { + String name = wqkms.getName(); + String prefix = name != null && name.indexOf(mode) >= 0 ? null : mode; + + return prefix != null && prefix.length() > 0 + ? prefix + "(" + name +")" + : name; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : +