Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/exports/fixings/FixWQCurveGenerator.java @ 3062:7660cfe5e8f6
FixWQCurveGenerator can generate charts from Fix*-Facets (in theory and not complete)
flys-artifacts/trunk@4642 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Christian Lins <christian.lins@intevation.de> |
---|---|
date | Tue, 12 Jun 2012 12:40:44 +0000 |
parents | 94d78e0dc5e9 |
children | 33c167d6fff6 |
comparison
equal
deleted
inserted
replaced
3061:49baebb39305 | 3062:7660cfe5e8f6 |
---|---|
2 | 2 |
3 import de.intevation.artifactdatabase.state.ArtifactAndFacet; | 3 import de.intevation.artifactdatabase.state.ArtifactAndFacet; |
4 | 4 |
5 import de.intevation.flys.artifacts.model.FacetTypes; | 5 import de.intevation.flys.artifacts.model.FacetTypes; |
6 | 6 |
7 import de.intevation.flys.artifacts.model.fixings.DateRange; | |
7 import de.intevation.flys.artifacts.model.fixings.FixFunction; | 8 import de.intevation.flys.artifacts.model.fixings.FixFunction; |
9 import de.intevation.flys.artifacts.model.fixings.QW; | |
10 import de.intevation.flys.artifacts.model.fixings.QWD; | |
8 | 11 |
9 import de.intevation.flys.exports.ChartGenerator; | 12 import de.intevation.flys.exports.ChartGenerator; |
10 import de.intevation.flys.exports.XYChartGenerator; | 13 import de.intevation.flys.exports.XYChartGenerator; |
11 | 14 |
15 import de.intevation.flys.jfree.Function2DAdapter; | |
12 import de.intevation.flys.jfree.StyledXYSeries; | 16 import de.intevation.flys.jfree.StyledXYSeries; |
13 | 17 |
14 import org.apache.log4j.Logger; | 18 import org.apache.log4j.Logger; |
15 | 19 |
20 import org.jfree.chart.JFreeChart; | |
21 import org.jfree.chart.plot.ValueMarker; | |
22 import org.jfree.data.general.DatasetUtilities; | |
16 import org.jfree.data.xy.XYSeries; | 23 import org.jfree.data.xy.XYSeries; |
17 | 24 |
18 import org.w3c.dom.Document; | 25 import org.w3c.dom.Document; |
19 | 26 |
20 public class FixWQCurveGenerator | 27 public class FixWQCurveGenerator |
59 String name = aaf.getFacetName(); | 66 String name = aaf.getFacetName(); |
60 logger.debug("doOut: " + name); | 67 logger.debug("doOut: " + name); |
61 | 68 |
62 if(FIX_SECTOR_AVERAGE_WQ.equals(name)) { | 69 if(FIX_SECTOR_AVERAGE_WQ.equals(name)) { |
63 doSectorAverageOut(aaf, doc, visible); | 70 doSectorAverageOut(aaf, doc, visible); |
64 } else if(FIX_ANALYSIS_EVENTS_WQ.equals(name)) { | 71 } |
72 else if(FIX_ANALYSIS_EVENTS_WQ.equals(name)) { | |
65 doAnalysisEventsOut(aaf, doc, visible); | 73 doAnalysisEventsOut(aaf, doc, visible); |
66 } else if(FIX_ANALYSIS_PERIODS_WQ.equals(name)) { | 74 } |
75 else if(FIX_ANALYSIS_PERIODS_WQ.equals(name)) { | |
67 doAnalysisPeriodsOut(aaf, doc, visible); | 76 doAnalysisPeriodsOut(aaf, doc, visible); |
68 } else if(FIX_REFERENCE_EVENTS_WQ.equals(name)) { | 77 } |
78 else if(FIX_REFERENCE_EVENTS_WQ.equals(name)) { | |
69 doReferenceEventsOut(aaf, doc, visible); | 79 doReferenceEventsOut(aaf, doc, visible); |
70 } else if(FIX_WQ_CURVE.equals(name)) { | 80 } |
81 else if(FIX_WQ_CURVE.equals(name)) { | |
71 doWQCurveOut(aaf, doc, visible); | 82 doWQCurveOut(aaf, doc, visible); |
72 } else if(FIX_OUTLIER.equals(name)) { | 83 } |
84 else if(FIX_OUTLIER.equals(name)) { | |
73 doOutlierOut(aaf, doc, visible); | 85 doOutlierOut(aaf, doc, visible); |
74 } else { | 86 } |
87 else { | |
75 logger.warn("Unknown facet name " + name); | 88 logger.warn("Unknown facet name " + name); |
76 return; | 89 return; |
77 } | 90 } |
78 } | 91 } |
79 | 92 |
80 protected void doSectorAverageOut(ArtifactAndFacet aaf, Document doc, boolean visible) { | 93 protected void doSectorAverageOut(ArtifactAndFacet aaf, Document doc, boolean visible) { |
81 logger.debug("doSectorAverageOut"); | 94 logger.debug("doSectorAverageOut"); |
82 | 95 |
83 XYSeries series = new StyledXYSeries(aaf.getFacetDescription(), doc); | 96 QWD[] qwds = (QWD[])aaf.getData(context); |
84 java.util.Random rand = new java.util.Random(7000); | 97 |
85 for(int n = 0; n < 10; n++) { | 98 if(qwds != null) { |
86 series.add(rand.nextDouble(), rand.nextDouble()); | 99 // Draw vertical markers |
87 } | 100 JFreeChart chart = generateChart(); |
88 | 101 for(QWD qwd : qwds) { |
89 addAxisSeries(series, 0, visible); | 102 chart.getXYPlot().addDomainMarker(new ValueMarker(qwd.getQ())); |
103 } | |
104 } | |
90 } | 105 } |
91 | 106 |
92 protected void doAnalysisEventsOut(ArtifactAndFacet aaf, Document doc, boolean visible) { | 107 protected void doAnalysisEventsOut(ArtifactAndFacet aaf, Document doc, boolean visible) { |
93 logger.debug("doAnalysisEventsOut"); | 108 logger.debug("doAnalysisEventsOut"); |
94 | 109 |
95 XYSeries series = new StyledXYSeries(aaf.getFacetDescription(), doc); | 110 QWD[] qwds = (QWD[])aaf.getData(context); |
96 java.util.Random rand = new java.util.Random(4000); | 111 if(qwds != null) { |
97 for(int n = 0; n < 10; n++) { | 112 XYSeries series = new StyledXYSeries(aaf.getFacetDescription(), doc); |
98 series.add(rand.nextDouble(), rand.nextDouble()); | 113 for(QW qw : qwds) { |
99 } | 114 series.add(qw.getQ(), qw.getW()); |
100 | 115 } |
101 addAxisSeries(series, 0, visible); | 116 |
117 addAxisSeries(series, 0, visible); | |
118 } | |
102 } | 119 } |
103 | 120 |
104 protected void doAnalysisPeriodsOut(ArtifactAndFacet aaf, Document doc, boolean visible) { | 121 protected void doAnalysisPeriodsOut(ArtifactAndFacet aaf, Document doc, boolean visible) { |
105 logger.debug("doAnalysisPeriodsOut"); | 122 logger.debug("doAnalysisPeriodsOut"); |
106 | 123 |
107 XYSeries series = new StyledXYSeries(aaf.getFacetDescription(), doc); | 124 DateRange[] dateRanges = (DateRange[])aaf.getData(context); |
108 java.util.Random rand = new java.util.Random(5000); | 125 //TODO What to do with Date ranges? |
109 for(int n = 0; n < 10; n++) { | |
110 series.add(rand.nextDouble(), rand.nextDouble()); | |
111 } | |
112 | |
113 addAxisSeries(series, 0, visible); | |
114 } | 126 } |
115 | 127 |
116 protected void doReferenceEventsOut(ArtifactAndFacet aaf, Document doc, boolean visible) { | 128 protected void doReferenceEventsOut(ArtifactAndFacet aaf, Document doc, boolean visible) { |
117 logger.debug("doReferenceEventsOut"); | 129 logger.debug("doReferenceEventsOut"); |
118 | 130 |
119 XYSeries series = new StyledXYSeries(aaf.getFacetDescription(), doc); | 131 QW[] qws = (QW[])aaf.getData(context); |
120 java.util.Random rand = new java.util.Random(3000); | 132 addQWSeries(qws, aaf, doc, visible); |
121 for(int n = 0; n < 10; n++) { | |
122 series.add(rand.nextDouble(), rand.nextDouble()); | |
123 } | |
124 | |
125 addAxisSeries(series, 0, visible); | |
126 } | 133 } |
127 | 134 |
128 protected void doWQCurveOut(ArtifactAndFacet aaf, Document doc, boolean visible) { | 135 protected void doWQCurveOut(ArtifactAndFacet aaf, Document doc, boolean visible) { |
129 logger.debug("doWQCurveOut"); | 136 logger.debug("doWQCurveOut"); |
130 | 137 |
131 FixFunction func = (FixFunction)aaf.getData(context); | 138 FixFunction func = (FixFunction)aaf.getData(context); |
132 | 139 if(func.getMaxQ() > 0) { |
133 XYSeries series = new StyledXYSeries(aaf.getFacetDescription(), doc); | 140 XYSeries series = DatasetUtilities.sampleFunction2DToSeries( |
134 for (int q = 0; q <= func.getMaxQ(); q += 1.0) { | 141 new Function2DAdapter(func.getFunction()), |
135 series.add(q, func.getFunction().value(q)); | 142 0, // start |
136 } | 143 func.getMaxQ(), // end |
137 | 144 500, // number of samples |
138 addAxisSeries(series, 0, visible); | 145 aaf.getFacetDescription()); |
146 addAxisSeries(series, 0, visible); | |
147 } | |
148 else { | |
149 logger.warn("doWQCurveOut: func.getMaxQ() returns 0"); | |
150 } | |
139 } | 151 } |
140 | 152 |
141 protected void doOutlierOut(ArtifactAndFacet aaf, Document doc, boolean visible) { | 153 protected void doOutlierOut(ArtifactAndFacet aaf, Document doc, boolean visible) { |
142 logger.debug("doOutlierOut"); | 154 logger.debug("doOutlierOut"); |
143 | 155 |
144 XYSeries series = new StyledXYSeries(aaf.getFacetDescription(), doc); | 156 QW[] qws = (QW[])aaf.getData(context); |
145 java.util.Random rand = new java.util.Random(2000); | 157 addQWSeries(qws, aaf, doc, visible); |
146 for(int n = 0; n < 10; n++) { | 158 } |
147 series.add(rand.nextDouble(), rand.nextDouble()); | 159 |
148 } | 160 protected void addQWSeries(QW[] qws, ArtifactAndFacet aaf, Document doc, boolean visible) { |
149 | 161 if(qws != null) { |
150 addAxisSeries(series,0, visible); | 162 XYSeries series = new StyledXYSeries(aaf.getFacetDescription(), doc); |
163 for(QW qw : qws) { | |
164 series.add(qw.getQ(), qw.getW()); | |
165 } | |
166 | |
167 addAxisSeries(series, 0, visible); | |
168 } | |
151 } | 169 } |
152 | 170 |
153 @Override | 171 @Override |
154 protected String getDefaultChartTitle() { | 172 protected String getDefaultChartTitle() { |
155 return msg(I18N_CHART_TITLE, I18N_CHART_TITLE_DEFAULT); | 173 return msg(I18N_CHART_TITLE, I18N_CHART_TITLE_DEFAULT); |