# HG changeset patch # User Andre Heinecke # Date 1380898805 -7200 # Node ID bb4a6b0077cf7bb67f2a43e43261a2e5fb428d70 # Parent a62c5b48ccab2215e5edbac89b42dc3d9052b5f6 Add SQRelation Processor diff -r a62c5b48ccab -r bb4a6b0077cf artifacts/src/main/java/org/dive4elements/river/exports/process/SQRelationProcessor.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/process/SQRelationProcessor.java Fri Oct 04 17:00:05 2013 +0200 @@ -0,0 +1,110 @@ +/* Copyright (C) 2013 by Bundesanstalt für Gewässerkunde + * Software engineering by Intevation GmbH + * + * This file is Free Software under the GNU AGPL (>=v3) + * and comes with ABSOLUTELY NO WARRANTY! Check out the + * documentation coming with Dive4Elements River for details. + */ + +package org.dive4elements.river.exports.process; + +import org.apache.log4j.Logger; +import org.jfree.data.xy.XYSeries; + +import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; +import org.dive4elements.artifacts.CallContext; +import org.dive4elements.river.exports.DiagramGenerator; +import org.dive4elements.river.jfree.StyledXYSeries; +import org.dive4elements.river.themes.ThemeDocument; +import org.dive4elements.river.artifacts.model.FacetTypes; + +import org.dive4elements.river.jfree.JFreeUtil; + +import org.dive4elements.river.artifacts.model.sq.SQ; +import org.dive4elements.river.artifacts.model.sq.SQFunction; + +public class SQRelationProcessor extends DefaultProcessor { + + public static final String I18N_AXIS_LABEL = + "chart.sq_relation.yaxis.label"; + public static final String I18N_AXIS_LABEL_DEFAULT = + ""; + + private final static Logger logger = + Logger.getLogger(SQRelationProcessor.class); + + @Override + public void doOut( + DiagramGenerator generator, + ArtifactAndFacet bundle, + ThemeDocument theme, + boolean visible) { + CallContext context = generator.getCallContext(); + String facetName = bundle.getFacetName(); + XYSeries series; + Object data = bundle.getData(context); + String desc = bundle.getFacetDescription(); + + if (data == null) { + // Check has been here before so we keep it but + // this should never happen. + logger.error("Data is null for facet: " + facetName); + return; + } + + if (FacetTypes.IS.SQ_CURVE(facetName)) { + SQFunction func = (SQFunction) data; + + series = JFreeUtil.sampleFunction2DPositive( + func.getFunction(), + theme, + desc, + 500, + Math.max(func.getMinQ(), 0.01), + Math.max(func.getMaxQ(), 0.02)); + + } else if (FacetTypes.IS.SQ_MEASUREMENT(facetName) || + FacetTypes.IS.SQ_OUTLIER(facetName)) { + + SQ[] sqs = (SQ[]) data; + series = new StyledXYSeries(desc, theme); + + for (SQ sq: sqs) { + double q = sq.getQ(); + double s = sq.getS(); + if (s > 0d && q > 0d) { + series.add(q, s, false); + } + } + } else { + logger.error("Could not handle: " + facetName); + return; + } + + if (logger.isDebugEnabled()) { + logger.debug("Series '" + desc + "' has " + + series.getItemCount() + " items."); + + logger.debug(" -> min x = " + series.getMinX()); + logger.debug(" -> max x = " + series.getMaxX()); + logger.debug(" -> min y = " + series.getMinY()); + logger.debug(" -> max y = " + series.getMaxY()); + } + + generator.addAxisSeries(series, axisName, visible); + } + + @Override + public boolean canHandle(String facettype) { + return FacetTypes.IS.SQ_CURVE(facettype) || + FacetTypes.IS.SQ_MEASUREMENT(facettype) || + FacetTypes.IS.SQ_OUTLIER(facettype); + } + + @Override + public String getAxisLabel(DiagramGenerator generator) { + return generator.msg( + I18N_AXIS_LABEL, + I18N_AXIS_LABEL_DEFAULT); + } +}