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);

http://dive4elements.wald.intevation.org