Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/RiverAxisArtifact.java @ 1832:a8910c1c82fb
Refactored the RiverAxisArtifact and its State - uses the same base as WMSKmArtifact now.
flys-artifacts/trunk@3168 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Fri, 04 Nov 2011 12:15:03 +0000 |
parents | c62ff9e72cea |
children | 06c157848c8f |
comparison
equal
deleted
inserted
replaced
1831:490ab097f58c | 1832:a8910c1c82fb |
---|---|
1 package de.intevation.flys.artifacts; | 1 package de.intevation.flys.artifacts; |
2 | 2 |
3 import java.util.ArrayList; | |
4 import java.util.List; | 3 import java.util.List; |
5 | 4 |
6 import org.w3c.dom.Document; | 5 import org.w3c.dom.Document; |
7 | 6 |
8 import org.apache.log4j.Logger; | 7 import org.apache.log4j.Logger; |
9 | 8 |
10 import de.intevation.artifacts.Artifact; | 9 import com.vividsolutions.jts.geom.Envelope; |
10 import com.vividsolutions.jts.geom.Geometry; | |
11 | |
11 import de.intevation.artifacts.ArtifactFactory; | 12 import de.intevation.artifacts.ArtifactFactory; |
12 import de.intevation.artifacts.CallMeta; | 13 import de.intevation.artifacts.CallMeta; |
13 | 14 |
14 import de.intevation.artifacts.common.ArtifactNamespaceContext; | 15 import de.intevation.artifactdatabase.state.DefaultOutput; |
15 import de.intevation.artifacts.common.utils.XMLUtils; | |
16 | |
17 import de.intevation.artifactdatabase.data.DefaultStateData; | |
18 import de.intevation.artifactdatabase.state.Facet; | 16 import de.intevation.artifactdatabase.state.Facet; |
17 import de.intevation.artifactdatabase.state.State; | |
19 | 18 |
20 import de.intevation.flys.model.River; | 19 import de.intevation.flys.model.River; |
21 | 20 |
21 import de.intevation.flys.artifacts.model.FacetTypes; | |
22 import de.intevation.flys.artifacts.model.RiverFactory; | 22 import de.intevation.flys.artifacts.model.RiverFactory; |
23 import de.intevation.flys.artifacts.states.DefaultState; | 23 import de.intevation.flys.artifacts.resources.Resources; |
24 import de.intevation.flys.utils.FLYSUtils; | |
25 import de.intevation.flys.utils.GeometryUtils; | |
24 | 26 |
25 | 27 |
26 public class RiverAxisArtifact extends StaticFLYSArtifact { | 28 public class RiverAxisArtifact extends WMSDBArtifact { |
27 | 29 |
28 public static final String NAME = "riveraxis"; | 30 public static final String NAME = "riveraxis"; |
29 | |
30 public static final String XPATH_IDS = "/art:action/art:ids/@value"; | |
31 | 31 |
32 | 32 |
33 private static final Logger logger = | 33 private static final Logger logger = |
34 Logger.getLogger(RiverAxisArtifact.class); | 34 Logger.getLogger(RiverAxisArtifact.class); |
35 | |
36 | |
37 @Override | |
38 public String getName() { | |
39 return NAME; | |
40 } | |
41 | 35 |
42 | 36 |
43 @Override | 37 @Override |
44 public void setup( | 38 public void setup( |
45 String identifier, | 39 String identifier, |
49 Document data) | 43 Document data) |
50 { | 44 { |
51 logger.debug("RiverAxisArtifact.setup"); | 45 logger.debug("RiverAxisArtifact.setup"); |
52 | 46 |
53 super.setup(identifier, factory, context, callMeta, data); | 47 super.setup(identifier, factory, context, callMeta, data); |
54 | |
55 String ids = XMLUtils.xpathString( | |
56 data, XPATH_IDS, ArtifactNamespaceContext.INSTANCE); | |
57 | |
58 String[] splitted = ids != null ? ids.split(" ") : null; | |
59 | |
60 if (splitted != null && splitted.length > 0) { | |
61 try { | |
62 int river_id = Integer.parseInt(splitted[0]); | |
63 River river = RiverFactory.getRiver(river_id); | |
64 | |
65 if (river == null) { | |
66 throw new IllegalArgumentException( | |
67 "No river found for id: " + river_id); | |
68 } | |
69 | |
70 String name = river.getName(); | |
71 | |
72 addData("river", new DefaultStateData("river",null,null,name)); | |
73 | |
74 List<Facet> fs = new ArrayList<Facet>(); | |
75 | |
76 DefaultState state = (DefaultState) getCurrentState(context); | |
77 state.computeInit(this, hash(), context, callMeta, fs); | |
78 | |
79 if (!fs.isEmpty()) { | |
80 facets.put(getCurrentStateId(), fs); | |
81 } | |
82 } | |
83 catch (NumberFormatException nfe) { | |
84 logger.error("Could not create Artifact: " + nfe.getMessage()); | |
85 throw new IllegalArgumentException("No river id given."); | |
86 } | |
87 } | |
88 } | 48 } |
89 | 49 |
90 | 50 |
91 @Override | 51 @Override |
92 protected void initialize( | 52 public String getName() { |
93 Artifact artifact, | 53 return NAME; |
94 Object context, | 54 } |
95 CallMeta callMeta) | 55 |
56 | |
57 @Override | |
58 public State getCurrentState(Object cc) { | |
59 State s = new RiverAxisState(this); | |
60 | |
61 List<Facet> fs = facets.get(getCurrentStateId()); | |
62 | |
63 DefaultOutput o = new DefaultOutput( | |
64 "floodmap", | |
65 "floodmap", | |
66 "image/png", | |
67 fs, | |
68 "map"); | |
69 | |
70 s.getOutputs().add(o); | |
71 | |
72 return s; | |
73 } | |
74 | |
75 | |
76 public static class RiverAxisState extends WMSDBState implements FacetTypes | |
96 { | 77 { |
97 // do nothing | 78 private static final Logger logger = |
98 } | 79 Logger.getLogger(RiverAxisState.class); |
80 | |
81 protected Geometry geom; | |
82 protected int riverId; | |
83 | |
84 public RiverAxisState(WMSDBArtifact artifact) { | |
85 super(artifact); | |
86 riverId = 0; | |
87 } | |
88 | |
89 public int getRiverId() { | |
90 if (riverId == 0) { | |
91 String ids = artifact.getDataAsString("ids"); | |
92 | |
93 try { | |
94 riverId = Integer.valueOf(ids); | |
95 } | |
96 catch (NumberFormatException nfe) { | |
97 logger.error("Cannot parse river id from '" + ids + "'"); | |
98 } | |
99 } | |
100 | |
101 return riverId; | |
102 } | |
103 | |
104 @Override | |
105 protected String getFacetType() { | |
106 return FLOODMAP_RIVERAXIS; | |
107 } | |
108 | |
109 @Override | |
110 protected String getTitle(CallMeta meta) { | |
111 return Resources.getMsg( | |
112 meta, | |
113 FLOODMAP_RIVERAXIS, | |
114 FLOODMAP_RIVERAXIS); | |
115 } | |
116 | |
117 @Override | |
118 protected String getUrl() { | |
119 return FLYSUtils.getUserWMSUrl(artifact.identifier()); | |
120 } | |
121 | |
122 @Override | |
123 protected String getSrid() { | |
124 River river = RiverFactory.getRiver(getRiverId()); | |
125 return FLYSUtils.getRiverSrid(river.getName()); | |
126 } | |
127 | |
128 @Override | |
129 protected Envelope getExtent() { | |
130 River river = RiverFactory.getRiver(getRiverId()); | |
131 return GeometryUtils.getRiverBoundary(river.getName()); | |
132 } | |
133 | |
134 @Override | |
135 protected String getFilter() { | |
136 return "river_id=" + String.valueOf(getRiverId()); | |
137 } | |
138 | |
139 @Override | |
140 protected String getDataString() { | |
141 // TODO SRID | |
142 return "geom FROM river_axes USING UNIQUE id USING SRID 31466"; | |
143 } | |
144 | |
145 @Override | |
146 protected String getGeometryType() { | |
147 return "LINE"; | |
148 } | |
149 } // end of WMSKmState | |
99 } | 150 } |
100 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : | 151 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |