christian@3055: package de.intevation.flys.exports.fixings; christian@3055: christian@3055: import de.intevation.artifactdatabase.state.ArtifactAndFacet; sascha@3060: christian@3055: import de.intevation.flys.artifacts.model.FacetTypes; sascha@3060: christian@3062: import de.intevation.flys.artifacts.model.fixings.DateRange; christian@3056: import de.intevation.flys.artifacts.model.fixings.FixFunction; christian@3081: import de.intevation.flys.artifacts.model.fixings.FixWQCurveFacet; christian@3062: import de.intevation.flys.artifacts.model.fixings.QW; christian@3062: import de.intevation.flys.artifacts.model.fixings.QWD; sascha@3060: christian@3055: import de.intevation.flys.exports.ChartGenerator; christian@3055: import de.intevation.flys.exports.XYChartGenerator; sascha@3060: christian@3062: import de.intevation.flys.jfree.Function2DAdapter; christian@3055: import de.intevation.flys.jfree.StyledXYSeries; christian@3055: christian@3055: import org.apache.log4j.Logger; christian@3055: christian@3062: import org.jfree.data.general.DatasetUtilities; sascha@3086: christian@3055: import org.jfree.data.xy.XYSeries; christian@3055: christian@3055: import org.w3c.dom.Document; christian@3055: sascha@3076: public class FixWQCurveGenerator sascha@3076: extends XYChartGenerator christian@3055: implements FacetTypes christian@3055: { christian@3055: private static Logger logger = sascha@3057: Logger.getLogger(FixWQCurveGenerator.class); christian@3055: christian@3055: public static final String I18N_CHART_TITLE = christian@3055: "chart.fixings.wq.title"; christian@3055: christian@3055: public static final String I18N_CHART_SUBTITLE = christian@3055: "chart.fixings.wq.subtitle"; christian@3055: christian@3055: public static final String I18N_XAXIS_LABEL = christian@3055: "chart.fixings.wq.xaxis.label"; christian@3055: christian@3055: public static final String I18N_YAXIS_LABEL = christian@3055: "chart.fixings.wq.yaxis.label"; christian@3055: christian@3055: public static final String I18N_CHART_TITLE_DEFAULT = christian@3055: "Fixierungsanalyse"; christian@3055: christian@3055: public static final String I18N_XAXIS_LABEL_DEFAULT = christian@3055: "Q [m\u00B3/s]"; christian@3055: christian@3055: public static final String I18N_YAXIS_LABEL_DEFAULT = christian@3055: "W [NN + m]"; christian@3055: christian@3055: public static enum YAXIS { christian@3055: W(0), christian@3055: Q(1); christian@3055: public int idx; christian@3055: private YAXIS(int c) { christian@3055: idx = c; christian@3055: } christian@3055: } christian@3055: christian@3055: @Override christian@3056: public void doOut(ArtifactAndFacet aaf, Document doc, boolean visible) { christian@3056: String name = aaf.getFacetName(); christian@3055: logger.debug("doOut: " + name); christian@3056: christian@3055: if(FIX_SECTOR_AVERAGE_WQ.equals(name)) { christian@3056: doSectorAverageOut(aaf, doc, visible); christian@3062: } christian@3062: else if(FIX_ANALYSIS_EVENTS_WQ.equals(name)) { christian@3056: doAnalysisEventsOut(aaf, doc, visible); christian@3062: } christian@3062: else if(FIX_ANALYSIS_PERIODS_WQ.equals(name)) { christian@3056: doAnalysisPeriodsOut(aaf, doc, visible); christian@3062: } christian@3062: else if(FIX_REFERENCE_EVENTS_WQ.equals(name)) { christian@3056: doReferenceEventsOut(aaf, doc, visible); christian@3062: } christian@3062: else if(FIX_WQ_CURVE.equals(name)) { christian@3056: doWQCurveOut(aaf, doc, visible); christian@3062: } christian@3062: else if(FIX_OUTLIER.equals(name)) { christian@3056: doOutlierOut(aaf, doc, visible); christian@3062: } christian@3062: else { christian@3055: logger.warn("Unknown facet name " + name); christian@3055: return; christian@3055: } christian@3055: } christian@3055: christian@3055: protected void doSectorAverageOut(ArtifactAndFacet aaf, Document doc, boolean visible) { christian@3062: logger.debug("doSectorAverageOut"); christian@3055: christian@3062: QWD[] qwds = (QWD[])aaf.getData(context); sascha@3076: christian@3062: if(qwds != null) { christian@3081: // TODO christian@3062: } christian@3055: } christian@3055: christian@3055: protected void doAnalysisEventsOut(ArtifactAndFacet aaf, Document doc, boolean visible) { christian@3055: logger.debug("doAnalysisEventsOut"); christian@3055: christian@3062: QWD[] qwds = (QWD[])aaf.getData(context); christian@3062: if(qwds != null) { christian@3062: XYSeries series = new StyledXYSeries(aaf.getFacetDescription(), doc); christian@3062: for(QW qw : qwds) { christian@3062: series.add(qw.getQ(), qw.getW()); christian@3062: } christian@3055: christian@3062: addAxisSeries(series, 0, visible); christian@3062: } christian@3055: } christian@3055: christian@3055: protected void doAnalysisPeriodsOut(ArtifactAndFacet aaf, Document doc, boolean visible) { christian@3055: logger.debug("doAnalysisPeriodsOut"); christian@3055: christian@3062: DateRange[] dateRanges = (DateRange[])aaf.getData(context); sascha@3076: //TODO What to do with Date ranges? christian@3055: } christian@3055: christian@3055: protected void doReferenceEventsOut(ArtifactAndFacet aaf, Document doc, boolean visible) { christian@3055: logger.debug("doReferenceEventsOut"); christian@3055: christian@3062: QW[] qws = (QW[])aaf.getData(context); christian@3062: addQWSeries(qws, aaf, doc, visible); christian@3055: } christian@3055: christian@3056: protected void doWQCurveOut(ArtifactAndFacet aaf, Document doc, boolean visible) { christian@3056: logger.debug("doWQCurveOut"); christian@3055: christian@3081: FixWQCurveFacet facet = (FixWQCurveFacet)aaf.getFacet(); christian@3081: FixFunction func = (FixFunction)facet.getData( christian@3081: aaf.getArtifact(), context, getCurrentKmFromRequest()); sascha@3073: sascha@3073: if (func == null) { christian@3081: logger.warn("doWQCurveOut: Facet does not contain FixFunction"); sascha@3073: return; sascha@3073: } christian@3081: christian@3081: double maxQ = func.getMaxQ(); christian@3081: maxQ = Math.min(2000.0, Math.abs(maxQ)); christian@3081: maxQ += maxQ * 0.05; sascha@3073: christian@3081: if(maxQ > 0) { christian@3062: XYSeries series = DatasetUtilities.sampleFunction2DToSeries( christian@3062: new Function2DAdapter(func.getFunction()), christian@3062: 0, // start christian@3062: func.getMaxQ(), // end christian@3062: 500, // number of samples christian@3062: aaf.getFacetDescription()); christian@3062: addAxisSeries(series, 0, visible); christian@3055: } christian@3062: else { christian@3081: logger.warn("doWQCurveOut: maxQ <= 0"); christian@3062: } christian@3055: } christian@3055: christian@3055: protected void doOutlierOut(ArtifactAndFacet aaf, Document doc, boolean visible) { christian@3055: logger.debug("doOutlierOut"); christian@3055: christian@3062: QW[] qws = (QW[])aaf.getData(context); christian@3062: addQWSeries(qws, aaf, doc, visible); christian@3062: } christian@3062: christian@3062: protected void addQWSeries(QW[] qws, ArtifactAndFacet aaf, Document doc, boolean visible) { christian@3062: if(qws != null) { christian@3062: XYSeries series = new StyledXYSeries(aaf.getFacetDescription(), doc); christian@3062: for(QW qw : qws) { christian@3062: series.add(qw.getQ(), qw.getW()); christian@3062: } christian@3062: christian@3062: addAxisSeries(series, 0, visible); christian@3055: } christian@3055: } christian@3055: christian@3055: @Override christian@3055: protected String getDefaultChartTitle() { christian@3055: return msg(I18N_CHART_TITLE, I18N_CHART_TITLE_DEFAULT); christian@3055: } christian@3055: christian@3055: @Override christian@3055: protected String getDefaultXAxisLabel() { christian@3055: return msg(I18N_XAXIS_LABEL, I18N_XAXIS_LABEL_DEFAULT); christian@3055: } christian@3055: christian@3055: @Override christian@3055: protected String getDefaultYAxisLabel(int pos) { christian@3055: return msg(I18N_YAXIS_LABEL, I18N_YAXIS_LABEL_DEFAULT); christian@3055: } christian@3055: christian@3055: @Override christian@3055: protected ChartGenerator.YAxisWalker getYAxisWalker() { christian@3055: return new YAxisWalker() { christian@3055: @Override christian@3055: public int length() { christian@3055: return YAXIS.values().length; christian@3055: } christian@3055: christian@3055: @Override christian@3055: public String getId(int idx) { christian@3055: YAXIS[] yaxes = YAXIS.values(); christian@3055: return yaxes[idx].toString(); christian@3055: } christian@3055: }; sascha@3076: } christian@3055: } christian@3055: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :