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 :

http://dive4elements.wald.intevation.org