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);

http://dive4elements.wald.intevation.org