# HG changeset patch # User Ingo Weinzierl # Date 1339762988 0 # Node ID 8ad8a227d9839b777712c9f71078e596bb5423f7 # Parent 0e0efd1acb4f287199eed650c89059fc684758f5 Added model classes for SQ calculation; generate fake results and improved the SQRelationGenerator which now draws the outliers. flys-artifacts/trunk@4675 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 0e0efd1acb4f -r 8ad8a227d983 flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Fri Jun 15 12:16:49 2012 +0000 +++ b/flys-artifacts/ChangeLog Fri Jun 15 12:23:08 2012 +0000 @@ -1,3 +1,29 @@ +2012-06-15 Ingo Weinzierl + + * src/main/java/de/intevation/flys/artifacts/model/sq/SQ.java: New model to + store values for S/Q. + + * src/main/java/de/intevation/flys/artifacts/model/sq/SQResult.java: New + model class that should be used to store calculation results of SQ + relation. + + * src/main/java/de/intevation/flys/artifacts/model/sq/SQRelationCalculation.java: + Create a fake SQResult. + + * src/main/java/de/intevation/flys/artifacts/model/sq/SQOutlierFacet.java: + Set missing required properties, so that this facet will be able to + re-calculate results again if the results are not in cache. + + * src/main/java/de/intevation/flys/artifacts/states/SQRelation.java: + Create correct number of facets for parameter A for outliers Facet. + + * src/main/java/de/intevation/flys/exports/sq/SQRelationGenerator.java: + Create a JFreeChart XYSeries from SQResult's outliers Facet. + + * src/main/java/de/intevation/flys/exports/XYChartGenerator.java: Added a + method to create X axes. The SQRelationGenerator overrides this method, + because it requires a logarithmic axis. + 2012-06-15 Raimund Renkert * src/main/java/de/intevation/flys/exports/ChartGenerator.java: diff -r 0e0efd1acb4f -r 8ad8a227d983 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/SQ.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/SQ.java Fri Jun 15 12:23:08 2012 +0000 @@ -0,0 +1,37 @@ +package de.intevation.flys.artifacts.model.sq; + +import java.io.Serializable; + + +public class SQ implements Serializable { + + protected double s; + protected double q; + + public SQ() { + } + + public SQ(double s, double q) { + this.s = s; + this.q = q; + } + + + public double getS() { + return s; + } + + public void setS(double s) { + this.s = s; + } + + + public double getQ() { + return q; + } + + public void setQ(double q) { + this.q = q; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 0e0efd1acb4f -r 8ad8a227d983 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/SQOutlierFacet.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/SQOutlierFacet.java Fri Jun 15 12:16:49 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/SQOutlierFacet.java Fri Jun 15 12:23:08 2012 +0000 @@ -6,8 +6,10 @@ import de.intevation.artifacts.CallContext; +import de.intevation.flys.artifacts.FLYSArtifact; +import de.intevation.flys.artifacts.model.CalculationResult; +import de.intevation.flys.artifacts.model.DataFacet; import de.intevation.flys.artifacts.model.FacetTypes; -import de.intevation.flys.artifacts.model.DataFacet; import de.intevation.flys.artifacts.states.DefaultState.ComputeType; @@ -22,19 +24,39 @@ private static final Logger log = Logger.getLogger(SQOutlierFacet.class); + private int iteration; + + public SQOutlierFacet() { } - public SQOutlierFacet(int idx, String name, String description) { - super(idx, name, description, ComputeType.ADVANCE, null, null); + public SQOutlierFacet( + int idx, + int iteration, + String name, + String description, + String hash, + String stateId + ) { + super(idx, name, description, ComputeType.ADVANCE, hash, stateId); } @Override public Object getData(Artifact artifact, CallContext context) { log.debug("SQOutlierFacet.getData"); - log.error("NOT IMPLEMENTED!"); + + if (artifact instanceof FLYSArtifact) { + FLYSArtifact flys = (FLYSArtifact) artifact; + + CalculationResult res = (CalculationResult) flys.compute( + context, ComputeType.ADVANCE, false); + + SQResult[] result = (SQResult[]) res.getData(); + + return result[index].getOutliers(iteration); + } return null; } diff -r 0e0efd1acb4f -r 8ad8a227d983 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/SQRelationCalculation.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/SQRelationCalculation.java Fri Jun 15 12:16:49 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/SQRelationCalculation.java Fri Jun 15 12:23:08 2012 +0000 @@ -1,5 +1,8 @@ package de.intevation.flys.artifacts.model.sq; +import java.util.ArrayList; +import java.util.List; + import org.apache.log4j.Logger; import de.intevation.flys.artifacts.model.Calculation; @@ -27,10 +30,70 @@ // TODO Insert input params here ) { logger.info("SQRelationCalculation.buildCalculationResult"); - logger.error("Not implemented!"); - return new CalculationResult(new Object[0], this); + SQResult[] result = getFakeResult(); + + return new CalculationResult(result, this); + } + + + protected SQResult[] getFakeResult() { + + SQ[] measurements = getFakeMeasurements(); + SQ[] fOutliers = getFakeOutliers(10); + SQ[] tOutliers = getFakeOutliers(20); + + List outliers = new ArrayList(); + outliers.add(fOutliers); + outliers.add(tOutliers); + + return new SQResult[] { new SQResult(null, measurements, outliers) }; + } + + protected SQ[] getFakeMeasurements() { + List a = new ArrayList(); + + a.add(new SQ(11.172500000000001, 1250.0)); + a.add(new SQ(13.407000000000002, 1500.0)); + a.add(new SQ(15.641500000000002, 1750.0)); + a.add(new SQ(17.876000000000005, 2000.0)); + a.add(new SQ(20.110500000000005, 2250.0)); + a.add(new SQ(22.345000000000002, 2500.0)); + a.add(new SQ(24.579500000000003, 2750.0)); + a.add(new SQ(26.814000000000004, 3000.0)); + a.add(new SQ(29.048500000000004, 3250.0)); + a.add(new SQ(31.283000000000005, 3500.0)); + a.add(new SQ(33.517500000000005, 3750.0)); + a.add(new SQ(35.75200000000001, 4000.0)); + a.add(new SQ(37.98650000000001, 4250.0)); + a.add(new SQ(40.22100000000001, 4500.0)); + a.add(new SQ(42.45550000000001, 4750.0)); + + return (SQ[]) a.toArray(new SQ[a.size()]); + } + + + protected SQ[] getFakeOutliers(int diff) { + List a = new ArrayList(); + + a.add(new SQ(11.172500000000001-diff, 1250.0)); + a.add(new SQ(13.407000000000002+diff, 1500.0)); + a.add(new SQ(25.641500000000002-diff, 1750.0)); + a.add(new SQ(17.876000000000005+diff, 2000.0)); + a.add(new SQ(20.110500000000005-diff, 2250.0)); + a.add(new SQ(22.345000000000002+diff, 2500.0)); + a.add(new SQ(24.579500000000003-diff, 2750.0)); + a.add(new SQ(26.814000000000004+diff, 3000.0)); + a.add(new SQ(29.048500000000004-diff, 3250.0)); + a.add(new SQ(31.283000000000005+diff, 3500.0)); + a.add(new SQ(33.517500000000005-diff, 3750.0)); + a.add(new SQ(35.75200000000001-diff, 4000.0)); + a.add(new SQ(37.98650000000001+diff, 4250.0)); + a.add(new SQ(40.22100000000001+diff, 4500.0)); + a.add(new SQ(42.45550000000001+diff, 4750.0)); + + return (SQ[]) a.toArray(new SQ[a.size()]); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : diff -r 0e0efd1acb4f -r 8ad8a227d983 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/SQResult.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/sq/SQResult.java Fri Jun 15 12:23:08 2012 +0000 @@ -0,0 +1,78 @@ +package de.intevation.flys.artifacts.model.sq; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +import de.intevation.flys.artifacts.model.Parameters; + + +public class SQResult implements Serializable { + + protected Parameters parameters; + + protected SQ[] measurements; + protected List outliers; + + + public SQResult() { + this.outliers = new ArrayList(); + } + + + public SQResult( + Parameters parameters, + SQ[] measurements, + List outliers + ) { + this.parameters = parameters; + this.measurements = measurements; + this.outliers = outliers; + } + + + public Parameters getParameters() { + return parameters; + } + + public void setParameters(Parameters parameters) { + this.parameters = parameters; + } + + + public SQ[] getMeasurements() { + return measurements; + } + + public void setMeasurements(SQ[] measurements) { + this.measurements = measurements; + } + + + public List getOutliers() { + return outliers; + } + + public void setOutliers(List outliers) { + this.outliers = outliers; + } + + + public int getOutliersCount() { + return outliers.size(); + } + + + public SQ[] getOutliers(int idx) { + if (idx < outliers.size()) { + return outliers.get(idx); + } + + return null; + } + + public void addOutliers(SQ[] outliers) { + this.outliers.add(outliers); + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : diff -r 0e0efd1acb4f -r 8ad8a227d983 flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/SQRelation.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/SQRelation.java Fri Jun 15 12:16:49 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/SQRelation.java Fri Jun 15 12:23:08 2012 +0000 @@ -18,6 +18,7 @@ import de.intevation.flys.artifacts.model.sq.SQMeasurementFacet; import de.intevation.flys.artifacts.model.sq.SQOutlierFacet; import de.intevation.flys.artifacts.model.sq.SQRelationCalculation; +import de.intevation.flys.artifacts.model.sq.SQResult; import de.intevation.flys.artifacts.states.DefaultState; /** @@ -52,12 +53,8 @@ return res; } - logger.error("Facet creation NOT IMPLEMENTED!"); - // TODO - //for (int idx = 0; idx < res.length; idx++) { - int idx = 0; - createFacets(newFacets, idx); - //} + SQResult[] sqr = (SQResult[]) res.getData(); + createFacets(newFacets, sqr, hash); Facet csv = new DataFacet( CSV, "CSV data", ComputeType.ADVANCE, hash, id); @@ -76,56 +73,25 @@ } - protected void createFacets(List container, int idx) { + protected void createFacets( + List container, + SQResult[] sqr, + String hash + ) { // TODO Create facets for each parameter type (A-F) - Facet measurements, outliers, curve; - measurements = new SQMeasurementFacet(idx, SQ_A_MEASUREMENT, "TODO"); - outliers = new SQOutlierFacet(idx, SQ_A_OUTLIER, "TODO"); - curve = new SQCurveFacet(idx, SQ_A_CURVE, "TODO"); - - container.add(measurements); - container.add(outliers); - container.add(curve); - - measurements = new SQMeasurementFacet(idx, SQ_B_MEASUREMENT, "TODO"); - outliers = new SQOutlierFacet(idx, SQ_B_OUTLIER, "TODO"); - curve = new SQCurveFacet(idx, SQ_B_CURVE, "TODO"); - - container.add(measurements); - container.add(outliers); - container.add(curve); - - measurements = new SQMeasurementFacet(idx, SQ_C_MEASUREMENT, "TODO"); - outliers = new SQOutlierFacet(idx, SQ_C_OUTLIER, "TODO"); - curve = new SQCurveFacet(idx, SQ_C_CURVE, "TODO"); + container.add(new SQMeasurementFacet(0, SQ_A_MEASUREMENT, "TODO")); + container.add(new SQCurveFacet(0, SQ_A_CURVE, "TODO")); - container.add(measurements); - container.add(outliers); - container.add(curve); - - measurements = new SQMeasurementFacet(idx, SQ_D_MEASUREMENT, "TODO"); - outliers = new SQOutlierFacet(idx, SQ_D_OUTLIER, "TODO"); - curve = new SQCurveFacet(idx, SQ_D_CURVE, "TODO"); - - container.add(measurements); - container.add(outliers); - container.add(curve); - - measurements = new SQMeasurementFacet(idx, SQ_E_MEASUREMENT, "TODO"); - outliers = new SQOutlierFacet(idx, SQ_E_OUTLIER, "TODO"); - curve = new SQCurveFacet(idx, SQ_E_CURVE, "TODO"); - - container.add(measurements); - container.add(outliers); - container.add(curve); - - measurements = new SQMeasurementFacet(idx, SQ_F_MEASUREMENT, "TODO"); - outliers = new SQOutlierFacet(idx, SQ_F_OUTLIER, "TODO"); - curve = new SQCurveFacet(idx, SQ_F_CURVE, "TODO"); - - container.add(measurements); - container.add(outliers); - container.add(curve); + for (int i = 0; i < sqr[0].getOutliersCount(); i++) { + container.add(new SQOutlierFacet( + 0, + i, + SQ_A_OUTLIER, + "OUTLIER AT" + i, + getID(), + hash + )); + } } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : diff -r 0e0efd1acb4f -r 8ad8a227d983 flys-artifacts/src/main/java/de/intevation/flys/exports/XYChartGenerator.java --- a/flys-artifacts/src/main/java/de/intevation/flys/exports/XYChartGenerator.java Fri Jun 15 12:16:49 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/XYChartGenerator.java Fri Jun 15 12:23:08 2012 +0000 @@ -227,6 +227,8 @@ false); XYPlot plot = (XYPlot) chart.getPlot(); + plot.setDomainAxis(createXAxis(getXAxisLabel())); + chart.setBackgroundPaint(Color.WHITE); plot.setBackgroundPaint(Color.WHITE); addSubtitles(chart); @@ -258,6 +260,11 @@ } + protected NumberAxis createXAxis(String label) { + return new NumberAxis(label); + } + + @Override protected Series getSeriesOf(XYDataset dataset, int idx) { return ((XYSeriesCollection) dataset).getSeries(idx); diff -r 0e0efd1acb4f -r 8ad8a227d983 flys-artifacts/src/main/java/de/intevation/flys/exports/sq/SQRelationGenerator.java --- a/flys-artifacts/src/main/java/de/intevation/flys/exports/sq/SQRelationGenerator.java Fri Jun 15 12:16:49 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/sq/SQRelationGenerator.java Fri Jun 15 12:23:08 2012 +0000 @@ -4,6 +4,7 @@ import org.jfree.chart.axis.LogarithmicAxis; import org.jfree.chart.axis.NumberAxis; +import org.jfree.data.xy.XYSeries; import org.w3c.dom.Document; @@ -11,7 +12,9 @@ import de.intevation.artifactdatabase.state.Facet; import de.intevation.flys.artifacts.model.FacetTypes; +import de.intevation.flys.artifacts.model.sq.SQ; import de.intevation.flys.exports.XYChartGenerator; +import de.intevation.flys.jfree.StyledXYSeries; /** * An OutGenerator that generates charts for MINFO sq relation. @@ -70,6 +73,12 @@ @Override + protected NumberAxis createXAxis(String label) { + return new LogarithmicAxis(label); + } + + + @Override protected NumberAxis createYAxis(int index) { return new LogarithmicAxis("TODO: LABEL " + index); } @@ -129,7 +138,16 @@ boolean visible ) { logger.debug("doSQOutliersOut"); - logger.error("NOT IMPLEMENTED: doSQOutliersOut"); + + Facet f = artifactAndFacet.getFacet(); + SQ[] sqs = (SQ[]) artifactAndFacet.getData(context); + XYSeries series = new StyledXYSeries(f.getDescription(), attr); + + for (SQ sq: sqs) { + series.add(sq.getQ(), sq.getS()); + } + + addAxisSeries(series, YAXIS.S.idx, visible); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :