felix@2218: package de.intevation.flys.exports; felix@2218: felix@2218: import de.intevation.artifactdatabase.state.ArtifactAndFacet; felix@2218: felix@2218: import de.intevation.flys.artifacts.model.FacetTypes; sascha@2245: sascha@2245: import de.intevation.flys.artifacts.model.WW.ApplyFunctionIterator; sascha@2245: felix@2229: import de.intevation.flys.artifacts.model.WW; felix@2218: felix@2218: import de.intevation.flys.jfree.StyledXYSeries; felix@2218: sascha@2245: import java.awt.Font; sascha@2245: sascha@2245: import org.apache.log4j.Logger; sascha@2245: sascha@2245: import org.jfree.chart.axis.NumberAxis; sascha@2245: sascha@2245: import org.jfree.data.xy.XYSeries; sascha@2245: sascha@2245: import org.w3c.dom.Document; 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@2218: W(0); felix@2218: public int idx; felix@2218: private YAXIS(int c) { felix@2218: idx = c; felix@2218: } felix@2218: } felix@2218: felix@2218: private static Logger logger = felix@2218: Logger.getLogger(ReferenceCurveGenerator.class); felix@2218: 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@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@2218: felix@2218: public static final String I18N_CHART_TITLE_DEFAULT = felix@2218: "Bezugslinie"; felix@2218: felix@2218: public static final String I18N_XAXIS_LABEL_DEFAULT = felix@2218: "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@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@2218: if (index == YAXIS.W.idx) { felix@2218: axis.setAutoRangeIncludesZero(false); felix@2218: } felix@2218: axis.setLabelFont(labelFont); felix@2218: return axis; felix@2218: } felix@2218: felix@2218: /** Get default chart title. */ felix@2218: @Override felix@2218: protected String getDefaultChartTitle() { felix@2218: // TODO i18n return msg(I18N_CHART_TITLE, I18N_CHART_TITLE_DEFAULT); felix@2218: return "Bezugslinien"; felix@2218: } felix@2218: felix@2218: /* felix@2218: // TODO i18n felix@2218: @Override felix@2218: protected String getDefaultChartSubtitle() { felix@2218: double[] dist = getRange(); felix@2218: felix@2218: Object[] args = new Object[] { felix@2218: getRiverName(), felix@2218: dist[0] 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: 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@2218: return "W!"; 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@2218: if (index == YAXIS.W.idx) { felix@2218: //label = msg(I18N_YAXIS_LABEL, I18N_YAXIS_LABEL_DEFAULT); felix@2218: //TODO i18n felix@2218: return "W over W over W"; 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@2218: else { felix@2218: logger.warn("Unknown facet name: " + name); felix@2218: return; felix@2218: } felix@2218: } felix@2218: felix@2218: felix@2229: public void doReferenceOut( felix@2229: Object data, felix@2229: Document theme, felix@2229: boolean visible sascha@2245: ) { felix@2251: ApplyFunctionIterator iter = (ApplyFunctionIterator) data; felix@2229: sascha@2253: XYSeries series = new StyledXYSeries( sascha@2253: iter.getWW().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@2229: addAxisSeries(series, YAXIS.W.idx, visible); 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 :