teichmann@5863: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5863: * Software engineering by Intevation GmbH teichmann@5863: * teichmann@5863: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5863: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5863: * documentation coming with Dive4Elements River for details. teichmann@5863: */ teichmann@5863: teichmann@5831: package org.dive4elements.river.exports.process; bjoern@4446: bjoern@4446: import org.apache.log4j.Logger; bjoern@4446: import org.jfree.data.xy.XYSeries; bjoern@4446: import org.jfree.data.xy.XYSeriesCollection; bjoern@4446: import org.w3c.dom.Document; bjoern@4446: teichmann@5831: import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; teichmann@5831: import org.dive4elements.artifacts.CallContext; teichmann@5831: import org.dive4elements.river.artifacts.model.FacetTypes; teichmann@5831: import org.dive4elements.river.artifacts.model.fixings.AnalysisPeriod; teichmann@5831: import org.dive4elements.river.artifacts.model.fixings.QWD; teichmann@5831: import org.dive4elements.river.exports.XYChartGenerator; teichmann@5831: import org.dive4elements.river.jfree.StyledXYSeries; teichmann@5831: import org.dive4elements.river.utils.KMIndex; bjoern@4446: bjoern@4446: public class KMIndexProcessor implements Processor { bjoern@4446: bjoern@4446: private static final Logger logger = Logger.getLogger(KMIndexProcessor.class); bjoern@4446: bjoern@4446: @Override bjoern@4446: public void doOut(XYChartGenerator generator, ArtifactAndFacet aandf, bjoern@4446: Document theme, boolean visible, int index) { bjoern@4446: String facettype = aandf.getFacetName(); rrenkert@4684: if (facettype.contains(FacetTypes.FIX_SECTOR_AVERAGE_LS)) { bjoern@4446: doSectorAverageOut(generator, aandf, theme, visible, index); bjoern@4446: } bjoern@4446: else if (facettype.equals(FacetTypes.FIX_REFERENCE_EVENTS_LS)) { bjoern@4446: doReferenceEventsOut(generator, aandf, theme, visible, index); bjoern@4446: } bjoern@4446: else if (facettype.equals(FacetTypes.FIX_ANALYSIS_EVENTS_LS)) { bjoern@4446: doAnalysisEventsOut(generator, aandf, theme, visible, index); bjoern@4446: } bjoern@4446: bjoern@4446: } bjoern@4446: bjoern@4446: @Override bjoern@4446: public boolean canHandle(String facettype) { bjoern@4446: if (facettype == null) { bjoern@4446: return false; bjoern@4446: } bjoern@4446: rrenkert@4684: if (facettype.contains(FacetTypes.FIX_SECTOR_AVERAGE_LS) bjoern@4446: || facettype.equals(FacetTypes.FIX_REFERENCE_EVENTS_LS) bjoern@4446: || facettype.equals(FacetTypes.FIX_ANALYSIS_EVENTS_LS)) bjoern@4446: { bjoern@4446: return true; bjoern@4446: } bjoern@4446: return false; bjoern@4446: } bjoern@4446: bjoern@4446: private void doSectorAverageOut(XYChartGenerator generator, ArtifactAndFacet aaf, bjoern@4446: Document doc, boolean visible, int idx) { bjoern@4446: logger.debug("doSectorAverageOut" + aaf.getFacet().getIndex()); bjoern@4446: bjoern@4446: CallContext context = generator.getCallContext(); bjoern@4446: int index = aaf.getFacet().getIndex(); bjoern@4446: int sectorNdx = index & 3; bjoern@4446: bjoern@4446: @SuppressWarnings("unchecked") bjoern@4446: KMIndex kms = bjoern@4446: (KMIndex)aaf.getData(context); bjoern@4446: bjoern@4446: if(kms == null) { bjoern@4446: return; bjoern@4446: } bjoern@4446: bjoern@4446: XYSeries series = new StyledXYSeries(aaf.getFacetDescription(), doc); bjoern@4446: bjoern@4446: for (KMIndex.Entry entry: kms) { bjoern@4446: double km = entry.getKm(); bjoern@4446: AnalysisPeriod ap = entry.getValue(); bjoern@4446: QWD qwd = ap.getQSectorAverages()[sectorNdx]; bjoern@4446: if (qwd == null) { bjoern@4446: continue; bjoern@4446: } bjoern@4446: double deltaW = qwd.getDeltaW(); bjoern@4446: series.add(km, deltaW); bjoern@4446: } bjoern@4446: bjoern@4446: generator.addAxisSeries(series, idx, visible); bjoern@4446: } bjoern@4446: teichmann@4736: private void doReferenceEventsOut(XYChartGenerator generator, bjoern@4446: ArtifactAndFacet aaf, Document doc, boolean visible, int idx) { bjoern@4446: logger.debug("doReferenceEventOut"); bjoern@4446: bjoern@4446: CallContext context = generator.getCallContext(); bjoern@4446: bjoern@4446: @SuppressWarnings("unchecked") bjoern@4446: KMIndex kms = bjoern@4446: (KMIndex)aaf.getData(context); bjoern@4446: bjoern@4446: if(kms == null) { bjoern@4446: return; bjoern@4446: } bjoern@4446: bjoern@4446: XYSeriesCollection col = new XYSeriesCollection(); bjoern@4446: bjoern@4446: StyledXYSeries series = new StyledXYSeries(aaf.getFacetDescription(), false, bjoern@4446: doc); bjoern@4446: bjoern@4446: for (KMIndex.Entry entry: kms) { bjoern@4446: double km = entry.getKm(); bjoern@4446: QWD qwd = entry.getValue(); bjoern@4446: bjoern@4446: series.add(km, qwd.getDeltaW()); bjoern@4446: } bjoern@4446: col.addSeries(series); bjoern@4446: bjoern@4446: generator.addAxisDataset(col, idx, visible); bjoern@4446: } bjoern@4446: teichmann@4736: private void doAnalysisEventsOut(XYChartGenerator generator, bjoern@4446: ArtifactAndFacet aaf, Document doc, boolean visible, int idx) { bjoern@4446: logger.debug("doAnalysisEventsOut"); bjoern@4446: bjoern@4446: CallContext context = generator.getCallContext(); bjoern@4446: bjoern@4446: @SuppressWarnings("unchecked") bjoern@4446: KMIndex kms = bjoern@4446: (KMIndex)aaf.getData(context); bjoern@4446: bjoern@4446: if(kms == null) { bjoern@4446: return; bjoern@4446: } bjoern@4446: bjoern@4446: XYSeriesCollection col = new XYSeriesCollection(); bjoern@4446: bjoern@4446: StyledXYSeries series = new StyledXYSeries(aaf.getFacetDescription(), false, doc); bjoern@4446: bjoern@4446: for (KMIndex.Entry entry: kms) { bjoern@4446: double km = entry.getKm(); bjoern@4446: QWD qwd = entry.getValue(); bjoern@4446: bjoern@4446: series.add(km, qwd.getDeltaW()); bjoern@4446: } bjoern@4446: col.addSeries(series); bjoern@4446: bjoern@4446: generator.addAxisDataset(col, idx, visible); bjoern@4446: } bjoern@4446: }