Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/DGMSelect.java @ 2424:092e519ff461
merged flys-artifacts/2.6.1
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Fri, 28 Sep 2012 12:14:26 +0200 |
parents | 9d5f339d83a3 |
children | a075f26a516c |
comparison
equal
deleted
inserted
replaced
2392:8112ec686a9a | 2424:092e519ff461 |
---|---|
1 package de.intevation.flys.artifacts.states; | |
2 | |
3 import java.io.File; | |
4 | |
5 import org.w3c.dom.Element; | |
6 | |
7 import org.apache.log4j.Logger; | |
8 | |
9 import de.intevation.artifacts.Artifact; | |
10 import de.intevation.artifacts.CallContext; | |
11 | |
12 import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator; | |
13 | |
14 import de.intevation.flys.model.DGM; | |
15 import de.intevation.flys.model.River; | |
16 | |
17 import de.intevation.flys.artifacts.FLYSArtifact; | |
18 import de.intevation.flys.utils.FLYSUtils; | |
19 | |
20 | |
21 /** | |
22 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> | |
23 */ | |
24 public class DGMSelect extends DefaultState { | |
25 | |
26 private static final Logger logger = Logger.getLogger(DGMSelect.class); | |
27 | |
28 public static final String ERR_EMPTY = "error_no_dgm_selected"; | |
29 public static final String ERR_INVALID_DGM = "error_invalid_dgm_selected"; | |
30 public static final String ERR_BAD_DGM_RANGE = "error_bad_dgm_range"; | |
31 public static final String ERR_BAD_DGM_RIVER = "error_bad_dgm_river"; | |
32 | |
33 | |
34 @Override | |
35 protected String getUIProvider() { | |
36 return "dgm_datacage_panel"; | |
37 } | |
38 | |
39 | |
40 @Override | |
41 protected Element createStaticData( | |
42 FLYSArtifact flys, | |
43 ElementCreator creator, | |
44 CallContext cc, | |
45 String name, | |
46 String value, | |
47 String type | |
48 ) { | |
49 Element dataElement = creator.create("data"); | |
50 creator.addAttr(dataElement, "name", name, true); | |
51 creator.addAttr(dataElement, "type", type, true); | |
52 | |
53 Element itemElement = creator.create("item"); | |
54 creator.addAttr(itemElement, "value", value, true); | |
55 | |
56 creator.addAttr(itemElement, "label", getLabel(cc, value), true); | |
57 dataElement.appendChild(itemElement); | |
58 | |
59 return dataElement; | |
60 } | |
61 | |
62 | |
63 public static String getLabel(CallContext cc, String value) { | |
64 logger.debug("Create label for value: " + value); | |
65 | |
66 try { | |
67 DGM dgm = DGM.getDGM(Integer.parseInt(value)); | |
68 | |
69 File file = new File(dgm.getPath()); | |
70 return file.getName(); | |
71 } | |
72 catch (NumberFormatException nfe) { | |
73 logger.warn("Cannot parse int value: '" + value + "'"); | |
74 } | |
75 | |
76 return ""; | |
77 } | |
78 | |
79 | |
80 @Override | |
81 public boolean validate(Artifact artifact) | |
82 throws IllegalArgumentException | |
83 { | |
84 FLYSArtifact flys = (FLYSArtifact) artifact; | |
85 | |
86 DGM dgm = getDGM(flys); | |
87 | |
88 if (dgm == null) { | |
89 throw new IllegalArgumentException(ERR_INVALID_DGM); | |
90 } | |
91 | |
92 double l = dgm.getLower().doubleValue(); | |
93 double u = dgm.getUpper().doubleValue(); | |
94 | |
95 double[] range = FLYSUtils.getKmFromTo(flys); | |
96 | |
97 if (range[0] < l || range[0] > u || range[1] < l || range[1] > u) { | |
98 throw new IllegalArgumentException(ERR_BAD_DGM_RANGE); | |
99 } | |
100 | |
101 River selectedRiver = FLYSUtils.getRiver(flys); | |
102 River dgmRiver = dgm.getRiver(); | |
103 | |
104 if (selectedRiver != dgmRiver) { | |
105 throw new IllegalArgumentException(ERR_BAD_DGM_RIVER); | |
106 } | |
107 | |
108 return true; | |
109 } | |
110 | |
111 | |
112 /** | |
113 * Returns the DGM specified in the parameters of <i>flys</i>. | |
114 * | |
115 * @param flys The FLYSArtifact that knows the ID of a DGM. | |
116 * | |
117 * @throws IllegalArgumentException If the FLYSArtifact doesn't know the ID | |
118 * of a DGM. | |
119 * | |
120 * @return the DGM specified by FLYSArtifact's parameters. | |
121 */ | |
122 public static DGM getDGM(FLYSArtifact flys) | |
123 throws IllegalArgumentException | |
124 { | |
125 try { | |
126 Integer dgmId = flys.getDataAsInteger("dgm"); | |
127 if (dgmId == null) { | |
128 throw new IllegalArgumentException(ERR_EMPTY); | |
129 } | |
130 | |
131 logger.debug("Found selected dgm: '" + dgmId + "'"); | |
132 | |
133 return DGM.getDGM(dgmId); | |
134 } | |
135 catch (NumberFormatException nfe) { | |
136 throw new IllegalArgumentException(ERR_INVALID_DGM); | |
137 } | |
138 } | |
139 } | |
140 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : |