Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/WMSDBArtifact.java @ 1854:e372934f0c42
Replaced the dbconnection.include used by Mapserver - these information are provided by LayerInfo objects now, which reduces config overhead.
flys-artifacts/trunk@3199 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Wed, 09 Nov 2011 15:00:29 +0000 |
parents | 5364b86a0880 |
children | dd467951335c |
comparison
equal
deleted
inserted
replaced
1853:5b2122a8bcbf | 1854:e372934f0c42 |
---|---|
1 package de.intevation.flys.artifacts; | 1 package de.intevation.flys.artifacts; |
2 | 2 |
3 import java.util.ArrayList; | 3 import java.util.ArrayList; |
4 import java.util.List; | 4 import java.util.List; |
5 | 5 |
6 import java.util.regex.Pattern; | |
7 import java.util.regex.Matcher; | |
8 | |
6 import org.w3c.dom.Document; | 9 import org.w3c.dom.Document; |
7 | 10 |
8 import org.apache.log4j.Logger; | 11 import org.apache.log4j.Logger; |
12 | |
13 import org.hibernate.impl.SessionFactoryImpl; | |
9 | 14 |
10 import com.vividsolutions.jts.geom.Envelope; | 15 import com.vividsolutions.jts.geom.Envelope; |
11 | 16 |
12 import de.intevation.artifacts.Artifact; | 17 import de.intevation.artifacts.Artifact; |
13 import de.intevation.artifacts.ArtifactFactory; | 18 import de.intevation.artifacts.ArtifactFactory; |
18 import de.intevation.artifactdatabase.state.State; | 23 import de.intevation.artifactdatabase.state.State; |
19 | 24 |
20 import de.intevation.artifacts.common.ArtifactNamespaceContext; | 25 import de.intevation.artifacts.common.ArtifactNamespaceContext; |
21 import de.intevation.artifacts.common.utils.XMLUtils; | 26 import de.intevation.artifacts.common.utils.XMLUtils; |
22 | 27 |
28 import de.intevation.flys.backend.SessionFactoryProvider; | |
29 | |
23 import de.intevation.flys.artifacts.states.DefaultState; | 30 import de.intevation.flys.artifacts.states.DefaultState; |
24 import de.intevation.flys.artifacts.model.WMSDBLayerFacet; | 31 import de.intevation.flys.artifacts.model.WMSDBLayerFacet; |
32 import de.intevation.flys.utils.FLYSUtils; | |
25 | 33 |
26 | 34 |
27 public abstract class WMSDBArtifact extends StaticFLYSArtifact { | 35 public abstract class WMSDBArtifact extends StaticFLYSArtifact { |
28 | 36 |
29 private static final Logger logger = Logger.getLogger(WMSDBArtifact.class); | 37 private static final Logger logger = Logger.getLogger(WMSDBArtifact.class); |
30 | 38 |
31 public static final String XPATH_IDS = "/art:action/art:ids/@value"; | 39 public static final String XPATH_IDS = "/art:action/art:ids/@value"; |
40 | |
41 public static final Pattern DB_URL_PATTERN = | |
42 Pattern.compile("(.*)\\/\\/(.*):([0-9]+)\\/([a-zA-Z]+)"); | |
32 | 43 |
33 | 44 |
34 @Override | 45 @Override |
35 public void setup( | 46 public void setup( |
36 String identifier, | 47 String identifier, |
124 facet.setExtent(getExtent()); | 135 facet.setExtent(getExtent()); |
125 facet.setSrid(getSrid()); | 136 facet.setSrid(getSrid()); |
126 facet.setData(getDataString()); | 137 facet.setData(getDataString()); |
127 facet.setFilter(getFilter()); | 138 facet.setFilter(getFilter()); |
128 facet.setGeometryType(getGeometryType()); | 139 facet.setGeometryType(getGeometryType()); |
140 facet.setConnection(getConnection()); | |
141 facet.setConnectionType(getConnectionType()); | |
129 | 142 |
130 facets.add(facet); | 143 facets.add(facet); |
131 | 144 |
132 return null; | 145 return null; |
146 } | |
147 | |
148 /** | |
149 * This method returns a connection string for databases used by | |
150 * Mapserver's Mapfile. | |
151 * | |
152 * @return A connection string for Mapserver. | |
153 */ | |
154 protected String getConnection() { | |
155 SessionFactoryImpl sf = (SessionFactoryImpl) | |
156 SessionFactoryProvider.getSessionFactory(); | |
157 | |
158 String user = SessionFactoryProvider.getUser(sf); | |
159 String pass = SessionFactoryProvider.getPass(sf); | |
160 String url = SessionFactoryProvider.getURL(sf); | |
161 | |
162 logger.debug("Parse connection url: " + url); | |
163 | |
164 Matcher m = DB_URL_PATTERN.matcher(url); | |
165 if (!m.matches()) { | |
166 logger.warn("Could not parse Connection string."); | |
167 return null; | |
168 } | |
169 | |
170 logger.debug("Groups for connection string: " + m.groupCount()); | |
171 int groups = m.groupCount(); | |
172 | |
173 for (int i = 0; i <= m.groupCount(); i++) { | |
174 logger.debug("Group " + i + ": " + m.group(i)); | |
175 } | |
176 | |
177 String connection = null; | |
178 | |
179 if (FLYSUtils.isUsingOracle()) { | |
180 if (groups < 3) { | |
181 logger.warn("Could only partially parse connection string."); | |
182 return null; | |
183 } | |
184 | |
185 String host = m.group(2); | |
186 String port = m.group(3); | |
187 | |
188 connection = user + "/" + pass + "@" + host; | |
189 } | |
190 else { | |
191 if (groups < 4) { | |
192 logger.warn("Could only partially parse connection string."); | |
193 return null; | |
194 } | |
195 | |
196 String host = m.group(2); | |
197 String port = m.group(3); | |
198 String db = m.group(4); | |
199 | |
200 StringBuilder sb = new StringBuilder(); | |
201 sb.append("dbname=" + db); | |
202 sb.append("host='" + host + "'"); | |
203 sb.append("port=" + port); | |
204 sb.append("password='" + pass + "'"); | |
205 sb.append("sslmode=disable"); | |
206 | |
207 connection = sb.toString(); | |
208 } | |
209 | |
210 logger.debug("Created connection: '" + connection + "'"); | |
211 | |
212 return connection; | |
213 } | |
214 | |
215 protected String getConnectionType() { | |
216 return FLYSUtils.isUsingOracle() ? "oraclespatial" : "postgis"; | |
133 } | 217 } |
134 | 218 |
135 protected abstract String getFacetType(); | 219 protected abstract String getFacetType(); |
136 | 220 |
137 protected abstract String getTitle(CallMeta meta); | 221 protected abstract String getTitle(CallMeta meta); |