comparison artifacts/src/main/java/org/dive4elements/river/artifacts/states/minfo/SedimentLoadCalculate.java @ 6392:9a0f8d532797

Load sedimentload fraction with sedimentload factory and add new facets to artifact.
author Raimund Renkert <rrenkert@intevation.de>
date Fri, 21 Jun 2013 15:35:44 +0200
parents 01ff5cd6abfa
children ab11ce67854b
comparison
equal deleted inserted replaced
6391:ec537afacac2 6392:9a0f8d532797
7 */ 7 */
8 8
9 package org.dive4elements.river.artifacts.states.minfo; 9 package org.dive4elements.river.artifacts.states.minfo;
10 10
11 import java.util.ArrayList; 11 import java.util.ArrayList;
12 import java.util.Date;
12 import java.util.List; 13 import java.util.List;
13 14
14 import org.apache.log4j.Logger; 15 import org.apache.log4j.Logger;
15
16 import org.dive4elements.artifactdatabase.state.Facet; 16 import org.dive4elements.artifactdatabase.state.Facet;
17 import org.dive4elements.artifactdatabase.state.FacetActivity; 17 import org.dive4elements.artifactdatabase.state.FacetActivity;
18 import org.dive4elements.artifacts.Artifact; 18 import org.dive4elements.artifacts.Artifact;
19 import org.dive4elements.artifacts.CallContext; 19 import org.dive4elements.artifacts.CallContext;
20 import org.dive4elements.artifacts.CallMeta; 20 import org.dive4elements.artifacts.CallMeta;
21 import org.dive4elements.river.artifacts.D4EArtifact; 21 import org.dive4elements.river.artifacts.D4EArtifact;
22 import org.dive4elements.river.artifacts.access.SedimentLoadAccess; 22 import org.dive4elements.river.artifacts.access.SedimentLoadAccess;
23 import org.dive4elements.river.artifacts.model.CalculationResult; 23 import org.dive4elements.river.artifacts.model.CalculationResult;
24 import org.dive4elements.river.artifacts.model.DataFacet;
25 import org.dive4elements.river.artifacts.model.FacetTypes; 24 import org.dive4elements.river.artifacts.model.FacetTypes;
26 import org.dive4elements.river.artifacts.model.ReportFacet; 25 import org.dive4elements.river.artifacts.model.ReportFacet;
26 import org.dive4elements.river.artifacts.model.minfo.SedimentLoad;
27 import org.dive4elements.river.artifacts.model.minfo.SedimentLoadCalculation; 27 import org.dive4elements.river.artifacts.model.minfo.SedimentLoadCalculation;
28 import org.dive4elements.river.artifacts.model.minfo.SedimentLoadFacet; 28 import org.dive4elements.river.artifacts.model.minfo.SedimentLoadFacet;
29 import org.dive4elements.river.artifacts.model.minfo.SedimentLoadFactory;
29 import org.dive4elements.river.artifacts.model.minfo.SedimentLoadResult; 30 import org.dive4elements.river.artifacts.model.minfo.SedimentLoadResult;
31 import org.dive4elements.river.artifacts.model.minfo.SedimentLoadUnknownFacet;
30 import org.dive4elements.river.artifacts.resources.Resources; 32 import org.dive4elements.river.artifacts.resources.Resources;
31 import org.dive4elements.river.artifacts.states.DefaultState; 33 import org.dive4elements.river.artifacts.states.DefaultState;
34 import org.dive4elements.river.utils.DateGuesser;
32 35
33 36
34 public class SedimentLoadCalculate 37 public class SedimentLoadCalculate
35 extends DefaultState 38 extends DefaultState
36 implements FacetTypes 39 implements FacetTypes
68 name.equals(SEDIMENT_LOAD_SUSP_SAND) || 71 name.equals(SEDIMENT_LOAD_SUSP_SAND) ||
69 name.equals(SEDIMENT_LOAD_SUSP_SEDIMENT) || 72 name.equals(SEDIMENT_LOAD_SUSP_SEDIMENT) ||
70 name.equals(SEDIMENT_LOAD_SUSP_SAND_BED)){ 73 name.equals(SEDIMENT_LOAD_SUSP_SAND_BED)){
71 return Boolean.FALSE; 74 return Boolean.FALSE;
72 } 75 }
76 else if (name.equals(SEDIMENT_LOAD_UNKOWN)) {
77 D4EArtifact d4e = (D4EArtifact)artifact;
78 SedimentLoadUnknownFacet f =
79 (SedimentLoadUnknownFacet)
80 d4e.getNativeFacet(facet, null);
81 SedimentLoad load =
82 (SedimentLoad)f.getData(artifact, null);
83 SedimentLoadAccess access =
84 new SedimentLoadAccess(d4e);
85 List<int[]> dates = new ArrayList<int[]>();
86 if (access.getYearEpoch().equals("year")) {
87 dates.add(access.getPeriod());
88 }
89 else {
90 int[][] epochs = access.getEpochs();
91 for (int i = 0; i < epochs.length; i++) {
92 dates.add(epochs[i]);
93 }
94 }
95 for (int[] date: dates) {
96 try {
97 Date s =
98 DateGuesser.guessDate(String.valueOf(date[0]));
99 Date e =
100 DateGuesser.guessDate(String.valueOf(date[1]));
101 if (!(s.after(load.getEnd()) ||
102 e.before(load.getStart()))) {
103 return Boolean.TRUE;
104 }
105 }
106 catch (IllegalArgumentException iae) {
107 return Boolean.FALSE;
108 }
109 }
110 return Boolean.FALSE;
111 }
73 else { 112 else {
74 return null; 113 return null;
75 } 114 }
76 } 115 }
77 }); 116 });
98 if (results == null || results.length == 0) { 137 if (results == null || results.length == 0) {
99 logger.warn("Calculation computed no results!"); 138 logger.warn("Calculation computed no results!");
100 return res; 139 return res;
101 } 140 }
102 141
142 String river = access.getRiver();
143 SedimentLoad[] unknown =
144 SedimentLoadFactory.getSedimentLoadUnknown(river);
145
103 String type = access.getYearEpoch(); 146 String type = access.getYearEpoch();
104 if (type.equals("year")) { 147 if (type.equals("year")) {
105 generateYearFacets(context, newFacets, results, getID(), hash); 148 generateYearFacets(context, newFacets, results, getID(), hash);
106 } 149 }
107 else if (type.equals("epoch")) { 150 else if (type.equals("epoch")) {
111 generateOffEpochFacets(context, newFacets, results, getID(), hash); 154 generateOffEpochFacets(context, newFacets, results, getID(), hash);
112 } 155 }
113 logger.debug("Created " + newFacets.size() + " new Facets."); 156 logger.debug("Created " + newFacets.size() + " new Facets.");
114 if (res.getReport().hasProblems()) { 157 if (res.getReport().hasProblems()) {
115 newFacets.add(new ReportFacet(ComputeType.ADVANCE, hash, id)); 158 newFacets.add(new ReportFacet(ComputeType.ADVANCE, hash, id));
159 }
160
161 for (int i = 0; i < unknown.length; i++) {
162 newFacets.add(new SedimentLoadUnknownFacet(
163 i,
164 SEDIMENT_LOAD_UNKOWN,
165 unknown[i].getDescription(),
166 ComputeType.ADVANCE,
167 getID(),
168 hash));
116 } 169 }
117 facets.addAll(newFacets); 170 facets.addAll(newFacets);
118 171
119 return res; 172 return res;
120 } 173 }

http://dive4elements.wald.intevation.org