sascha@2277: package de.intevation.flys.exports; sascha@2277: sascha@2277: import org.w3c.dom.Document; sascha@2277: sascha@2277: import java.awt.Font; sascha@2277: sascha@2277: import org.apache.log4j.Logger; sascha@2277: sascha@2277: import org.jfree.chart.JFreeChart; sascha@2277: import org.jfree.chart.axis.NumberAxis; sascha@2277: import org.jfree.chart.title.TextTitle; sascha@2277: sascha@2277: import org.jfree.data.xy.XYSeries; sascha@2277: sascha@2277: import de.intevation.artifactdatabase.state.ArtifactAndFacet; sascha@2277: sascha@2277: import de.intevation.flys.artifacts.model.FacetTypes; sascha@2277: import de.intevation.flys.artifacts.model.WW; sascha@2277: import de.intevation.flys.artifacts.model.WW.ApplyFunctionIterator; sascha@2277: import de.intevation.flys.artifacts.model.WWAxisTypes; sascha@2277: sascha@2277: import de.intevation.flys.jfree.StyledXYSeries; sascha@2277: sascha@2277: sascha@2277: /** sascha@2277: * An OutGenerator that generates reference curves. sascha@2277: */ sascha@2277: public class NormalizedReferenceCurveGenerator sascha@2277: extends XYChartGenerator sascha@2277: implements FacetTypes sascha@2277: { sascha@2277: public static enum YAXIS { sascha@2277: W_M(0), sascha@2277: W_CM(1); sascha@2277: sascha@2277: public int idx; sascha@2277: private YAXIS(int c) { sascha@2277: idx = c; sascha@2277: } sascha@2277: } sascha@2277: sascha@2277: /** House logger. */ sascha@2277: private static Logger logger = sascha@2277: Logger.getLogger(NormalizedReferenceCurveGenerator.class); sascha@2277: sascha@2277: public static final String I18N_CHART_TITLE = sascha@2277: "chart.reference.curve.title"; sascha@2277: sascha@2277: public static final String I18N_CHART_SUBTITLE = sascha@2277: "chart.reference.curve.subtitle"; sascha@2277: sascha@2277: public static final String W_CM_DEFAULT = sascha@2277: "chart.reference.curve.wcm"; sascha@2277: sascha@2277: public static final String W_NNM_DEFAULT = sascha@2277: "chart.reference.curve.wnn"; sascha@2277: sascha@2277: public static final String START_GAUGE = sascha@2277: "chart.reference.curve.start_at_gauge"; sascha@2277: sascha@2277: public static final String START_FREE = sascha@2277: "chart.reference.curve.start_free"; sascha@2277: sascha@2277: /* sascha@2277: sascha@2277: public static final String I18N_XAXIS_LABEL = sascha@2277: "chart.reference.curve.xaxis.label"; sascha@2277: sascha@2277: public static final String I18N_YAXIS_LABEL = sascha@2277: "chart.reference.curve.yaxis.label"; sascha@2277: */ sascha@2277: /* sascha@2277: public static final String I18N_XAXIS_LABEL_DEFAULT = sascha@2277: "W [NN + m]"; sascha@2277: sascha@2277: public static final String I18N_YAXIS_LABEL_DEFAULT = sascha@2277: "W [NN + m]"; sascha@2277: */ sascha@2277: sascha@2277: sascha@2277: public static final String I18N_CHART_TITLE_DEFAULT = sascha@2277: "Bezugslinie"; sascha@2277: sascha@2277: sascha@2277: public NormalizedReferenceCurveGenerator() { sascha@2277: super(); sascha@2277: } sascha@2277: sascha@2277: sascha@2277: /** sascha@2277: * Create Axis for given index. sascha@2277: * @return axis with according internationalized label. sascha@2277: */ sascha@2277: @Override sascha@2277: protected NumberAxis createYAxis(int index) { sascha@2277: Font labelFont = new Font("Tahoma", Font.BOLD, 14); sascha@2277: String label = getYAxisLabel(index); sascha@2277: sascha@2277: NumberAxis axis = createNumberAxis(index, label); sascha@2277: // TODO aspect-ratio settings. sascha@2277: if (index == YAXIS.W_M.idx) { sascha@2277: axis.setAutoRangeIncludesZero(false); sascha@2277: } sascha@2277: axis.setLabelFont(labelFont); sascha@2277: return axis; sascha@2277: } sascha@2277: sascha@2277: sascha@2277: /** Get default chart title. */ sascha@2277: @Override sascha@2277: protected String getDefaultChartTitle() { sascha@2277: return msg(I18N_CHART_TITLE, I18N_CHART_TITLE_DEFAULT); sascha@2277: } sascha@2277: sascha@2277: @Override sascha@2277: protected String getDefaultChartSubtitle() { sascha@2277: Object[] args = new Object[] { sascha@2277: getRiverName(), sascha@2277: }; sascha@2277: sascha@2277: return msg(I18N_CHART_SUBTITLE, "", args); sascha@2277: } sascha@2277: sascha@2277: sascha@2277: @Override sascha@2277: protected void addSubtitles(JFreeChart chart) { sascha@2277: String subtitle = getChartSubtitle(); sascha@2277: sascha@2277: if (subtitle != null && subtitle.length() > 0) { sascha@2277: chart.addSubtitle(new TextTitle(subtitle)); sascha@2277: } sascha@2277: } sascha@2277: sascha@2277: sascha@2277: /** Get Label for X-axis (W). */ sascha@2277: @Override sascha@2277: protected String getDefaultXAxisLabel() { sascha@2277: // TODO i18nreturn msg(I18N_XAXIS_LABEL, I18N_XAXIS_LABEL_DEFAULT); sascha@2277: // at_gauge + w_cm sascha@2277: return "W am Bezugsort- oder Pegel."; sascha@2277: } sascha@2277: sascha@2277: sascha@2277: /** sascha@2277: * Get Label for primary and other Y Axes. sascha@2277: * @param index Axis-Index (0-based). sascha@2277: */ sascha@2277: @Override sascha@2277: protected String getDefaultYAxisLabel(int index) { sascha@2277: String label = "default"; sascha@2277: if (index == YAXIS.W_M.idx) { sascha@2277: //label = msg(I18N_YAXIS_LABEL, I18N_YAXIS_LABEL_DEFAULT); sascha@2277: //TODO i18n sascha@2277: return "W am Zielort"; sascha@2277: } sascha@2277: else if (index == YAXIS.W_CM.idx) { sascha@2277: return "W am Zielpegel"; sascha@2277: } sascha@2277: sascha@2277: return label; sascha@2277: } sascha@2277: sascha@2277: sascha@2277: /** sascha@2277: * Called for each facet/them in the out mapped to this generator. sascha@2277: * @param artifactFacet artifact and facet for this theme. sascha@2277: * @param theme styling info. sascha@2277: * @param visible Whether or not the theme is visible. sascha@2277: */ sascha@2277: @Override sascha@2277: public void doOut( sascha@2277: ArtifactAndFacet artifactFacet, sascha@2277: Document theme, sascha@2277: boolean visible sascha@2277: ) { sascha@2277: String name = artifactFacet.getFacetName(); sascha@2277: sascha@2277: logger.debug("NormalizedReferenceCurveGenerator.doOut: " + name); sascha@2277: sascha@2277: if (name == null || name.length() == 0) { sascha@2277: logger.error("No facet given. Cannot create dataset."); sascha@2277: return; sascha@2277: } sascha@2277: sascha@2277: if (name.equals(REFERENCE_CURVE_NORMALIZED)) { sascha@2277: doReferenceOut(artifactFacet.getData(context), theme, visible); sascha@2277: } sascha@2277: else { sascha@2277: logger.warn("Unknown facet name: " + name); sascha@2277: return; sascha@2277: } sascha@2277: } sascha@2277: sascha@2277: sascha@2277: /** Register DataSeries with (maybe transformed) points. */ sascha@2277: public void doReferenceOut( sascha@2277: Object data, sascha@2277: Document theme, sascha@2277: boolean visible sascha@2277: ) { sascha@2277: WW ww = (WW)data; sascha@2277: sascha@2277: // TODO: Fetch from black board instead! sascha@2277: WWAxisTypes wwat = new WWAxisTypes(ww); sascha@2277: sascha@2277: ApplyFunctionIterator iter = wwat.transform(ww); sascha@2277: sascha@2277: XYSeries series = new StyledXYSeries( sascha@2277: ww.getName(), false, theme); sascha@2277: sascha@2277: double [] values = new double[2]; sascha@2277: sascha@2277: while (iter.hasNext()) { sascha@2277: iter.next(values); sascha@2277: series.add(values[0], values[1], false); sascha@2277: } sascha@2277: sascha@2277: if (ww.endAtGauge()) { sascha@2277: addAxisSeries(series, YAXIS.W_M.idx, visible); sascha@2277: } sascha@2277: else { sascha@2277: addAxisSeries(series, YAXIS.W_CM.idx, visible); sascha@2277: } sascha@2277: } sascha@2277: sascha@2277: sascha@2277: /** Get Walker to iterate over all axes. */ sascha@2277: @Override sascha@2277: protected YAxisWalker getYAxisWalker() { sascha@2277: return new YAxisWalker() { sascha@2277: /** Get number of items. */ sascha@2277: @Override sascha@2277: public int length() { sascha@2277: return YAXIS.values().length; sascha@2277: } sascha@2277: sascha@2277: /** Get identifier for this index. */ sascha@2277: @Override sascha@2277: public String getId(int idx) { sascha@2277: YAXIS[] yaxes = YAXIS.values(); sascha@2277: return yaxes[idx].toString(); sascha@2277: } sascha@2277: }; sascha@2277: } sascha@2277: } sascha@2277: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :