Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/WDifferencesState.java @ 1190:f514894ec2fd
merged flys-artifacts/2.5
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Fri, 28 Sep 2012 12:14:17 +0200 |
parents | 47ecf98f09eb |
children | b9b47af71564 |
comparison
equal
deleted
inserted
replaced
917:b48c36076e17 | 1190:f514894ec2fd |
---|---|
1 package de.intevation.flys.artifacts.states; | |
2 | |
3 import java.util.List; | |
4 | |
5 import org.apache.log4j.Logger; | |
6 | |
7 import de.intevation.artifacts.CallContext; | |
8 | |
9 import de.intevation.artifactdatabase.state.Facet; | |
10 | |
11 import de.intevation.artifacts.Artifact; | |
12 import de.intevation.flys.artifacts.FLYSArtifact; | |
13 import de.intevation.flys.artifacts.WINFOArtifact; | |
14 | |
15 import de.intevation.flys.artifacts.math.WKmsOperation; | |
16 | |
17 import de.intevation.flys.artifacts.model.FacetTypes; | |
18 import de.intevation.flys.artifacts.model.WKms; | |
19 import de.intevation.flys.artifacts.model.WQKms; | |
20 | |
21 import de.intevation.flys.artifacts.model.DataFacet; | |
22 import de.intevation.artifactdatabase.data.StateData; | |
23 | |
24 import de.intevation.flys.utils.FLYSUtils; | |
25 | |
26 | |
27 public class WDifferencesState | |
28 extends DefaultState | |
29 implements FacetTypes | |
30 { | |
31 /** The logger that is used in this state. */ | |
32 private static Logger logger = Logger.getLogger(WDifferencesState.class); | |
33 | |
34 | |
35 public WDifferencesState() { | |
36 } | |
37 | |
38 | |
39 /** Specify to display nothing (this is kind of a "final" state). */ | |
40 @Override | |
41 protected String getUIProvider() { | |
42 return "noinput"; | |
43 } | |
44 | |
45 | |
46 @Override | |
47 public boolean validate(Artifact artifact) | |
48 throws IllegalArgumentException | |
49 { | |
50 FLYSArtifact flys = (FLYSArtifact) artifact; | |
51 | |
52 StateData data = flys.getData("diffids"); | |
53 | |
54 if (data == null) { | |
55 throw new IllegalArgumentException("diffids is empty"); | |
56 } | |
57 | |
58 // TODO: Also validate format. | |
59 | |
60 return true; | |
61 } | |
62 | |
63 | |
64 | |
65 @Override | |
66 public Object computeAdvance( | |
67 FLYSArtifact artifact, | |
68 String hash, | |
69 CallContext context, | |
70 List<Facet> facets, | |
71 Object old | |
72 ) { | |
73 WINFOArtifact winfo = (WINFOArtifact)artifact; | |
74 String id = getID(); | |
75 | |
76 // Load the Artifacts/facets that we want to subtract and display. | |
77 // Expected format is: | |
78 // [42537f1e-3522-42ef-8968-635b03d8e9c6;longitudinal_section.w;0]#[1231f2-....] | |
79 String datas[] = winfo.getDataAsString("diffids").split("#"); | |
80 | |
81 // Validate the Data-Strings. | |
82 for (String s: datas) { | |
83 if (!WaterlevelSelectState.isValueValid(winfo.getDataAsString("diffids"))) { | |
84 // TODO: escalate. | |
85 } | |
86 } | |
87 | |
88 if (datas.length != 2) { | |
89 // TODO crash with style | |
90 ; | |
91 } | |
92 String uuid1 = WaterlevelSelectState.strip(datas[0]).split(";")[0]; | |
93 String uuid2 = WaterlevelSelectState.strip(datas[1]).split(";")[0]; | |
94 | |
95 WINFOArtifact flys1 = (WINFOArtifact) FLYSUtils.getArtifact( | |
96 uuid1, | |
97 context); | |
98 WINFOArtifact flys2 = (WINFOArtifact) FLYSUtils.getArtifact( | |
99 uuid2, | |
100 context); | |
101 | |
102 if (flys1 == null) { | |
103 logger.warn("One of the artifacts (1) for diff calculation could not be loaded"); | |
104 } | |
105 if (flys2 == null) { | |
106 logger.warn("One of the artifacts (2) for diff calculation could not be loaded"); | |
107 } | |
108 WKms wkms = null; | |
109 String facetName = "diff ()"; | |
110 | |
111 if (flys1 != null && flys2 != null) { | |
112 // TODO also check size. | |
113 // TODO also need index of wqkms. | |
114 WQKms[] minuend = (WQKms[]) flys1.getWaterlevelData().getData(); | |
115 WQKms[] subtrahend = (WQKms[]) flys2.getWaterlevelData().getData(); | |
116 wkms = WKmsOperation.SUBTRACTION.operate(minuend[0], subtrahend[0]); | |
117 facetName = "W ("+minuend[0].getName() + ") - W (" + subtrahend[0].getName()+")"; | |
118 logger.warn("Did a WKMSSubtraction"); | |
119 // Add these datasets also as facets ("absolutes"). | |
120 /* | |
121 Facet minuendAbsFacet = new WaterlevelFacet(0, LONGITUDINAL_W, | |
122 "Minuend: W (_todo_)", ComputeType.ADVANCE, id, hash); | |
123 Facet subtrahendAbsFacet = new WaterlevelFacet(1, LONGITUDINAL_W, | |
124 "Subtrahend: W (_todo_)", ComputeType.ADVANCE, id, hash); | |
125 */ | |
126 //facets.add(minuendAbsFacet); | |
127 //facets.add(subtrahendAbsFacet); | |
128 } | |
129 | |
130 if (facets != null) { | |
131 // TODO: pass computetype and state id. | |
132 //, ComputeType.ADVANCE, getID(), hash)); | |
133 facets.add(new DataFacet(W_DIFFERENCES, facetName)); | |
134 facets.add(new DataFacet(CSV, "CSV data")); | |
135 } | |
136 else { | |
137 logger.debug("Not adding facets in WDifferencesState."); | |
138 } | |
139 | |
140 return wkms; | |
141 } | |
142 } | |
143 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : |