ingo@3077: package de.intevation.flys.exports.sq; ingo@3077: ingo@3077: import org.apache.log4j.Logger; ingo@3077: ingo@3077: import org.jfree.chart.axis.LogarithmicAxis; ingo@3077: import org.jfree.chart.axis.NumberAxis; ingo@3079: import org.jfree.data.xy.XYSeries; ingo@3077: ingo@3077: import org.w3c.dom.Document; ingo@3077: ingo@3077: import de.intevation.artifactdatabase.state.ArtifactAndFacet; ingo@3077: import de.intevation.artifactdatabase.state.Facet; ingo@3077: ingo@3077: import de.intevation.flys.artifacts.model.FacetTypes; ingo@3079: import de.intevation.flys.artifacts.model.sq.SQ; ingo@3105: import de.intevation.flys.artifacts.model.sq.SQFunction; ingo@3077: import de.intevation.flys.exports.XYChartGenerator; ingo@3105: import de.intevation.flys.jfree.Function2DAdapter; ingo@3105: import de.intevation.flys.jfree.JFreeUtil; ingo@3079: import de.intevation.flys.jfree.StyledXYSeries; ingo@3077: ingo@3077: /** ingo@3077: * An OutGenerator that generates charts for MINFO sq relation. ingo@3077: * ingo@3077: * @author Ingo Weinzierl ingo@3077: */ ingo@3077: public class SQRelationGenerator ingo@3077: extends XYChartGenerator ingo@3077: implements FacetTypes ingo@3077: { ingo@3077: public enum YAXIS { ingo@3077: S(0); ingo@3077: protected int idx; ingo@3077: private YAXIS(int c) { ingo@3077: idx = c; ingo@3077: } ingo@3077: } ingo@3077: ingo@3077: /** The logger that is used in this generator. */ ingo@3077: private static Logger logger = Logger.getLogger(SQRelationGenerator.class); ingo@3077: ingo@3077: ingo@3077: @Override ingo@3077: protected YAxisWalker getYAxisWalker() { ingo@3077: return new YAxisWalker() { ingo@3077: @Override ingo@3077: public int length() { ingo@3077: return YAXIS.values().length; ingo@3077: } ingo@3077: ingo@3077: @Override ingo@3077: public String getId(int idx) { ingo@3077: YAXIS[] yaxes = YAXIS.values(); ingo@3077: return yaxes[idx].toString(); ingo@3077: } ingo@3077: }; ingo@3077: } ingo@3077: ingo@3077: ingo@3077: @Override ingo@3077: public String getDefaultChartTitle() { ingo@3077: return "TODO: CHART TITLE"; ingo@3077: } ingo@3077: ingo@3077: ingo@3077: @Override ingo@3077: protected String getDefaultXAxisLabel() { ingo@3077: return "TODO: XAXIS LABEL"; ingo@3077: } ingo@3077: ingo@3077: ingo@3077: @Override ingo@3077: protected String getDefaultYAxisLabel(int index) { ingo@3077: return "TODO: YAXIS LABEL " + index; ingo@3077: } ingo@3077: ingo@3077: ingo@3077: @Override ingo@3079: protected NumberAxis createXAxis(String label) { ingo@3079: return new LogarithmicAxis(label); ingo@3079: } ingo@3079: ingo@3079: ingo@3079: @Override ingo@3077: protected NumberAxis createYAxis(int index) { ingo@3077: return new LogarithmicAxis("TODO: LABEL " + index); ingo@3077: } ingo@3077: ingo@3077: ingo@3077: @Override ingo@3077: public void doOut( ingo@3077: ArtifactAndFacet artifactAndFacet, ingo@3077: Document attr, ingo@3077: boolean visible ingo@3077: ) { ingo@3077: logger.debug("doOut"); ingo@3077: ingo@3077: Facet facet = artifactAndFacet.getFacet(); ingo@3077: String name = facet != null ? facet.getName() : null; ingo@3077: ingo@3077: if (name == null || name.length() == 0) { ingo@3077: logger.warn("Invalid facet with no name given!"); ingo@3077: return; ingo@3077: } ingo@3077: ingo@3077: if (IS.SQ_CURVE(name)) { ingo@3077: doSQCurveOut(artifactAndFacet, attr, visible); ingo@3077: } ingo@3077: else if (IS.SQ_MEASUREMENT(name)) { ingo@3099: doSQOut(artifactAndFacet, attr, visible); ingo@3077: } ingo@3077: else if (IS.SQ_OUTLIER(name)) { ingo@3099: doSQOut(artifactAndFacet, attr, visible); ingo@3077: } ingo@3077: } ingo@3077: ingo@3077: ingo@3077: protected void doSQCurveOut( ingo@3077: ArtifactAndFacet artifactAndFacet, ingo@3077: Document attr, ingo@3077: boolean visible ingo@3077: ) { ingo@3077: logger.debug("doSQCurveOut"); ingo@3105: ingo@3105: Facet f = artifactAndFacet.getFacet(); ingo@3105: SQFunction func = (SQFunction) artifactAndFacet.getData(context); ingo@3105: ingo@3105: XYSeries series = JFreeUtil.sampleFunction2D( ingo@3105: new Function2DAdapter(func.getFunction()), ingo@3105: attr, ingo@3105: "SQ Curve", ingo@3105: 10, ingo@3105: func.getMinQ(), ingo@3105: func.getMaxQ()); ingo@3105: ingo@3105: addAxisSeries(series, YAXIS.S.idx, visible); ingo@3077: } ingo@3077: ingo@3077: ingo@3099: protected void doSQOut( ingo@3077: ArtifactAndFacet artifactAndFacet, ingo@3077: Document attr, ingo@3077: boolean visible ingo@3077: ) { ingo@3099: logger.debug("doSQOut: " + artifactAndFacet.getFacetDescription()); ingo@3079: ingo@3079: Facet f = artifactAndFacet.getFacet(); ingo@3079: SQ[] sqs = (SQ[]) artifactAndFacet.getData(context); ingo@3079: XYSeries series = new StyledXYSeries(f.getDescription(), attr); ingo@3079: ingo@3079: for (SQ sq: sqs) { ingo@3079: series.add(sq.getQ(), sq.getS()); ingo@3079: } ingo@3079: ingo@3079: addAxisSeries(series, YAXIS.S.idx, visible); ingo@3077: } ingo@3077: } ingo@3077: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :