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 :

http://dive4elements.wald.intevation.org