Mercurial > dive4elements > river
diff 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 |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WMSDBArtifact.java Wed Nov 09 14:02:15 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WMSDBArtifact.java Wed Nov 09 15:00:29 2011 +0000 @@ -3,10 +3,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.regex.Pattern; +import java.util.regex.Matcher; + import org.w3c.dom.Document; import org.apache.log4j.Logger; +import org.hibernate.impl.SessionFactoryImpl; + import com.vividsolutions.jts.geom.Envelope; import de.intevation.artifacts.Artifact; @@ -20,8 +25,11 @@ import de.intevation.artifacts.common.ArtifactNamespaceContext; import de.intevation.artifacts.common.utils.XMLUtils; +import de.intevation.flys.backend.SessionFactoryProvider; + import de.intevation.flys.artifacts.states.DefaultState; import de.intevation.flys.artifacts.model.WMSDBLayerFacet; +import de.intevation.flys.utils.FLYSUtils; public abstract class WMSDBArtifact extends StaticFLYSArtifact { @@ -30,6 +38,9 @@ public static final String XPATH_IDS = "/art:action/art:ids/@value"; + public static final Pattern DB_URL_PATTERN = + Pattern.compile("(.*)\\/\\/(.*):([0-9]+)\\/([a-zA-Z]+)"); + @Override public void setup( @@ -126,12 +137,85 @@ facet.setData(getDataString()); facet.setFilter(getFilter()); facet.setGeometryType(getGeometryType()); + facet.setConnection(getConnection()); + facet.setConnectionType(getConnectionType()); facets.add(facet); return null; } + /** + * This method returns a connection string for databases used by + * Mapserver's Mapfile. + * + * @return A connection string for Mapserver. + */ + protected String getConnection() { + SessionFactoryImpl sf = (SessionFactoryImpl) + SessionFactoryProvider.getSessionFactory(); + + String user = SessionFactoryProvider.getUser(sf); + String pass = SessionFactoryProvider.getPass(sf); + String url = SessionFactoryProvider.getURL(sf); + + logger.debug("Parse connection url: " + url); + + Matcher m = DB_URL_PATTERN.matcher(url); + if (!m.matches()) { + logger.warn("Could not parse Connection string."); + return null; + } + + logger.debug("Groups for connection string: " + m.groupCount()); + int groups = m.groupCount(); + + for (int i = 0; i <= m.groupCount(); i++) { + logger.debug("Group " + i + ": " + m.group(i)); + } + + String connection = null; + + if (FLYSUtils.isUsingOracle()) { + if (groups < 3) { + logger.warn("Could only partially parse connection string."); + return null; + } + + String host = m.group(2); + String port = m.group(3); + + connection = user + "/" + pass + "@" + host; + } + else { + if (groups < 4) { + logger.warn("Could only partially parse connection string."); + return null; + } + + String host = m.group(2); + String port = m.group(3); + String db = m.group(4); + + StringBuilder sb = new StringBuilder(); + sb.append("dbname=" + db); + sb.append("host='" + host + "'"); + sb.append("port=" + port); + sb.append("password='" + pass + "'"); + sb.append("sslmode=disable"); + + connection = sb.toString(); + } + + logger.debug("Created connection: '" + connection + "'"); + + return connection; + } + + protected String getConnectionType() { + return FLYSUtils.isUsingOracle() ? "oraclespatial" : "postgis"; + } + protected abstract String getFacetType(); protected abstract String getTitle(CallMeta meta);