annotate artifacts/src/main/java/org/dive4elements/river/utils/MapUtils.java @ 9671:9cfc495a9f40 3.2.x

Add minimal test coverage for MapServer connection generation
author Tom Gottfried <tom@intevation.de>
date Fri, 22 May 2020 19:45:08 +0200
parents 07d854c325d8
children b70b1bc0eece
rev   line source
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
2 * Software engineering by Intevation GmbH
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
3 *
5994
af13ceeba52a Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5865
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
5994
af13ceeba52a Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5865
diff changeset
6 * documentation coming with Dive4Elements River for details.
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
7 */
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
8
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5422
diff changeset
9 package org.dive4elements.river.utils;
4841
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
10
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
11 import java.util.regex.Matcher;
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
12 import java.util.regex.Pattern;
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
13
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
14 import org.apache.log4j.Logger;
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
15 import org.hibernate.impl.SessionFactoryImpl;
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
16
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5422
diff changeset
17 import org.dive4elements.river.backend.SessionFactoryProvider;
4841
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
18
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
19
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
20 public class MapUtils
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
21 {
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
22 private static final Logger log = Logger.getLogger(MapUtils.class);
4841
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
23
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
24 public static final Pattern DB_URL_PATTERN =
5211
9e11599266c8 Allow dots and numbers in oracle backend name
Andre Heinecke <aheinecke@intevation.de>
parents: 5147
diff changeset
25 Pattern.compile("(.*)\\/\\/(.*):([0-9]+)\\/([\\.a-zA-Z0-9_-]+)");
4841
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
26
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
27 /**
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
28 * This method returns a connection string for databases used by
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
29 * Mapserver's Mapfile.
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
30 *
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
31 * @return A connection string for Mapserver.
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
32 */
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
33 public static String getConnection() {
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
34 SessionFactoryImpl sf = (SessionFactoryImpl)
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
35 SessionFactoryProvider.getSessionFactory();
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
36
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
37 String user = SessionFactoryProvider.getUser(sf);
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
38 String pass = SessionFactoryProvider.getPass(sf);
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
39 String url = SessionFactoryProvider.getURL(sf);
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
40
9671
9cfc495a9f40 Add minimal test coverage for MapServer connection generation
Tom Gottfried <tom@intevation.de>
parents: 9670
diff changeset
41 return getConnection(user, pass, url);
9cfc495a9f40 Add minimal test coverage for MapServer connection generation
Tom Gottfried <tom@intevation.de>
parents: 9670
diff changeset
42 }
9cfc495a9f40 Add minimal test coverage for MapServer connection generation
Tom Gottfried <tom@intevation.de>
parents: 9670
diff changeset
43
9cfc495a9f40 Add minimal test coverage for MapServer connection generation
Tom Gottfried <tom@intevation.de>
parents: 9670
diff changeset
44 public static String getConnection(String user, String pass, String url) {
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
45 log.debug("Parse connection url: " + url);
4841
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
46
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
47 Matcher m = DB_URL_PATTERN.matcher(url);
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
48 if (!m.matches()) {
9670
07d854c325d8 Tighten code a bit
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
49 log.warn("Could not parse Connection string");
07d854c325d8 Tighten code a bit
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
50 return null;
4841
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
51 }
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
52
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
53 int groups = m.groupCount();
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
54
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
55 if (log.isDebugEnabled()) {
5147
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
56 for (int i = 0; i <= groups; i++) {
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
57 log.debug("Group " + i + ": " + m.group(i));
5147
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
58 }
4841
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
59 }
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
60
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
61 String connection = null;
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
62
9670
07d854c325d8 Tighten code a bit
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
63 if (groups < 4) {
07d854c325d8 Tighten code a bit
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
64 log.warn("Could only partially parse connection string.");
07d854c325d8 Tighten code a bit
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
65 return null;
07d854c325d8 Tighten code a bit
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
66 }
07d854c325d8 Tighten code a bit
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
67
07d854c325d8 Tighten code a bit
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
68 String host = m.group(2);
07d854c325d8 Tighten code a bit
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
69 String port = m.group(3);
07d854c325d8 Tighten code a bit
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
70 String db = m.group(4);
07d854c325d8 Tighten code a bit
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
71
9671
9cfc495a9f40 Add minimal test coverage for MapServer connection generation
Tom Gottfried <tom@intevation.de>
parents: 9670
diff changeset
72 if (url.startsWith("jdbc:oracle:")) {
8856
5e38e2924c07 Fix code style.
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
73 connection = user + "/" + pass
9670
07d854c325d8 Tighten code a bit
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
74 + "@" + host + ":" + port + "/" + db;
4841
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
75 }
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
76 else {
5147
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
77 connection = createConnectionString(user, pass, host, db, port);
4841
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
78 }
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
79
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
80 return connection;
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
81 }
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
82
5147
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
83 public static String createConnectionString(
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
84 String user,
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
85 String pass,
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
86 String host,
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
87 String db,
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
88 String port
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
89 ) {
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
90 StringBuilder sb = new StringBuilder();
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
91 sb.append("dbname=").append(db);
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
92 sb.append(" host='").append(host).append("'");
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
93 sb.append(" user=").append(user);
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
94 sb.append(" port=").append(port);
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
95 // XXX: We need to escape this somehow.
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
96 sb.append(" password='").append(pass).append("'");
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
97 sb.append(" sslmode=disable");
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
98 return sb.toString();
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
99 }
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
100
4841
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
101 public static String getConnectionType() {
5865
73da40528cf2 River artifacts: Renamed FLYSUtils to RiverUtils.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
102 return RiverUtils.isUsingOracle() ? "oraclespatial" : "postgis";
4841
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
103 }
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
104 }

http://dive4elements.wald.intevation.org