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