comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/WMSFloodmapsArtifact.java @ 2581:afebbe9c2fce

Added a new Artifact for loading existing 'floodmaps' via datacage. flys-artifacts/trunk@4130 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Thu, 08 Mar 2012 13:44:51 +0000
parents
children b23c956c5aa2
comparison
equal deleted inserted replaced
2580:3d240200364c 2581:afebbe9c2fce
1 package de.intevation.flys.artifacts;
2
3 import java.util.List;
4
5 import org.w3c.dom.Document;
6
7 import org.apache.log4j.Logger;
8
9 import com.vividsolutions.jts.geom.Envelope;
10
11 import de.intevation.artifacts.ArtifactFactory;
12 import de.intevation.artifacts.CallMeta;
13
14 import de.intevation.artifactdatabase.state.DefaultOutput;
15 import de.intevation.artifactdatabase.state.Facet;
16 import de.intevation.artifactdatabase.state.State;
17
18 import de.intevation.flys.model.River;
19 import de.intevation.flys.model.Floodmaps;
20
21 import de.intevation.flys.artifacts.model.FacetTypes;
22 import de.intevation.flys.artifacts.model.RiverFactory;
23 import de.intevation.flys.artifacts.resources.Resources;
24 import de.intevation.flys.utils.FLYSUtils;
25
26
27 public class WMSFloodmapsArtifact extends WMSDBArtifact {
28
29 public static final String NAME = "floodmaps";
30
31
32 private static final Logger logger =
33 Logger.getLogger(WMSFloodmapsArtifact.class);
34
35
36 @Override
37 public void setup(
38 String identifier,
39 ArtifactFactory factory,
40 Object context,
41 CallMeta callMeta,
42 Document data)
43 {
44 logger.debug("WMSFloodmapsArtifact.setup");
45
46 super.setup(identifier, factory, context, callMeta, data);
47 }
48
49
50 @Override
51 public String getName() {
52 return NAME;
53 }
54
55
56 @Override
57 public State getCurrentState(Object cc) {
58 State s = new FloodmapsState(this);
59
60 List<Facet> fs = facets.get(getCurrentStateId());
61
62 DefaultOutput o = new DefaultOutput(
63 "floodmap",
64 "floodmap",
65 "image/png",
66 fs,
67 "map");
68
69 s.getOutputs().add(o);
70
71 return s;
72 }
73
74
75 public static class FloodmapsState extends WMSDBState implements FacetTypes
76 {
77 private static final Logger logger =
78 Logger.getLogger(FloodmapsState.class);
79
80 protected int riverId;
81 protected String floodmapName;
82
83 public FloodmapsState(WMSDBArtifact artifact) {
84 super(artifact);
85 riverId = 0;
86 floodmapName = null;
87 }
88
89 public int getRiverId() {
90 if (riverId == 0) {
91 String ids = artifact.getDataAsString("ids");
92
93 try {
94 String[] parts = ids.split("_");
95 riverId = Integer.valueOf(parts[0]);
96 }
97 catch (NumberFormatException nfe) {
98 logger.error("Cannot parse river id from '" + ids + "'");
99 }
100 }
101
102 return riverId;
103 }
104
105 public String getFloodmapName() {
106 if (floodmapName == null) {
107 String ids = artifact.getDataAsString("ids");
108
109 String parts[] = ids.split("_");
110 floodmapName = parts[1];
111 }
112
113 return floodmapName;
114 }
115
116 @Override
117 protected String getFacetType() {
118 return FLOODMAP_FLOODMAPS;
119 }
120
121 @Override
122 protected String getTitle(CallMeta meta) {
123 return Resources.getMsg(
124 meta,
125 FLOODMAP_FLOODMAPS,
126 FLOODMAP_FLOODMAPS);
127 }
128
129 @Override
130 protected String getUrl() {
131 return FLYSUtils.getUserWMSUrl(artifact.identifier());
132 }
133
134 @Override
135 protected String getSrid() {
136 River river = RiverFactory.getRiver(getRiverId());
137 return FLYSUtils.getRiverSrid(river.getName());
138 }
139
140 @Override
141 protected Envelope getExtent() {
142 List<Floodmaps> floodmaps =
143 Floodmaps.getFloodmaps(getRiverId(), getFloodmapName());
144
145 Envelope max = null;
146
147 for (Floodmaps f: floodmaps) {
148 Envelope env = f.getGeom().getEnvelopeInternal();
149
150 if (max == null) {
151 max = env;
152 continue;
153 }
154
155 max.expandToInclude(env);
156 }
157
158 return max;
159 }
160
161 @Override
162 protected String getFilter() {
163 return "river_id=" + String.valueOf(getRiverId())
164 + "name=" + getFloodmapName();
165 }
166
167 @Override
168 protected String getDataString() {
169 String srid = getSrid();
170
171 if (FLYSUtils.isUsingOracle()) {
172 return "geom FROM floodmaps USING SRID " + srid;
173 }
174 else {
175 return "geom FROM floodmaps USING UNIQUE id USING SRID " + srid;
176 }
177 }
178
179 @Override
180 protected String getGeometryType() {
181 return "MULTIPOLYGON";
182 }
183 } // end of WMSKmState
184 }
185 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org