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@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; sascha@3060: christian@3194: import de.intevation.flys.jfree.CollisionFreeXYTextAnnotation; christian@3194: import de.intevation.flys.jfree.FLYSAnnotation; christian@3192: import de.intevation.flys.jfree.JFreeUtil; christian@3055: import de.intevation.flys.jfree.StyledXYSeries; christian@3055: christian@3194: import java.util.ArrayList; christian@3194: import java.util.List; christian@3194: christian@3055: import org.apache.log4j.Logger; christian@3055: christian@3194: import org.jfree.chart.annotations.XYTextAnnotation; christian@3194: christian@3055: import org.jfree.data.xy.XYSeries; christian@3055: christian@3194: christian@3055: import org.w3c.dom.Document; christian@3055: sascha@3076: public class FixWQCurveGenerator raimund@3088: extends FixChartGenerator 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@3133: if(name.startsWith(FIX_SECTOR_AVERAGE_WQ)) { 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_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@3091: /** Add sector average points to chart */ christian@3055: protected void doSectorAverageOut(ArtifactAndFacet aaf, Document doc, boolean visible) { christian@3062: logger.debug("doSectorAverageOut"); christian@3055: christian@3132: QWD qwd = (QWD)aaf.getData(context); christian@3132: if(qwd != null) { christian@3194: addQWSeries(new QWD[] { qwd }, aaf, doc, visible); christian@3062: } christian@3133: else { christian@3133: logger.debug("doSectorAverageOut: qwd == null"); christian@3133: } christian@3055: } christian@3055: christian@3091: /** Add analysis event points to chart */ christian@3055: protected void doAnalysisEventsOut(ArtifactAndFacet aaf, Document doc, boolean visible) { christian@3194: logger.debug("doAnalysisEventsOut"); christian@3055: christian@3194: QWD[] qwds = (QWD[])aaf.getData(context); christian@3194: if(qwds != null) { christian@3194: addQWSeries(qwds, aaf, doc, visible); christian@3062: } christian@3095: else { christian@3095: logger.debug("doAnalysisEventsOut: qwds == null"); christian@3095: } christian@3055: } christian@3055: christian@3091: /** Add reference event points to chart */ christian@3055: protected void doReferenceEventsOut(ArtifactAndFacet aaf, Document doc, boolean visible) { christian@3055: logger.debug("doReferenceEventsOut"); sascha@3110: 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( raimund@3088: aaf.getArtifact(), context); sascha@3073: sascha@3073: if (func == null) { christian@3081: logger.warn("doWQCurveOut: Facet does not contain FixFunction"); sascha@3073: return; sascha@3073: } sascha@3110: christian@3081: double maxQ = func.getMaxQ(); sascha@3073: christian@3081: if(maxQ > 0) { christian@3192: StyledXYSeries series = JFreeUtil.sampleFunction2D( christian@3192: func.getFunction(), christian@3192: doc, christian@3192: aaf.getFacetDescription(), christian@3192: 500, // number of samples christian@3194: 0.0 , // start christian@3192: func.getMaxQ()); // end christian@3155: christian@3192: 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@3194: List textAnnos = new ArrayList(); christian@3194: christian@3062: for(QW qw : qws) { christian@3062: series.add(qw.getQ(), qw.getW()); christian@3194: christian@3194: StringBuilder label = new StringBuilder(); christian@3194: label.append(qw.getDate()); christian@3194: label.append(" "); christian@3194: label.append(qw.getDescription()); christian@3194: christian@3194: XYTextAnnotation anno = new CollisionFreeXYTextAnnotation( christian@3194: label.toString(), christian@3194: qw.getQ(), christian@3194: qw.getW()); christian@3194: textAnnos.add(anno); christian@3062: } christian@3062: christian@3194: FLYSAnnotation flysAnno = new FLYSAnnotation(null, null, null, doc); christian@3194: flysAnno.setTextAnnotations(textAnnos); christian@3062: addAxisSeries(series, 0, visible); christian@3194: addVisibleAnnotations(flysAnno); 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 :