Mercurial > dive4elements > river
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 } |