annotate artifacts/src/main/java/org/dive4elements/river/utils/MapUtils.java @ 9670:07d854c325d8 3.2.x

Tighten code a bit PostgreSQL database names might also contain dots and since the extra pattern matches a subset of the other, it will never match anyhow. Thus remove the extra pattern, a lot of duplicate code and some superfluous debug logging.
author Tom Gottfried <tom@intevation.de>
date Wed, 20 May 2020 17:50:27 +0200
parents 5e38e2924c07
children 9cfc495a9f40
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
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
41 log.debug("Parse connection url: " + url);
4841
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
42
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
43 Matcher m = DB_URL_PATTERN.matcher(url);
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
44 if (!m.matches()) {
9670
07d854c325d8 Tighten code a bit
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
45 log.warn("Could not parse Connection string");
07d854c325d8 Tighten code a bit
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
46 return null;
4841
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
47 }
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
48
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
49 int groups = m.groupCount();
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
50
8202
e4606eae8ea5 sed src/**/*.java 's/logger/log/g'
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5994
diff changeset
51 if (log.isDebugEnabled()) {
5147
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
52 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
53 log.debug("Group " + i + ": " + m.group(i));
5147
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
54 }
4841
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
55 }
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
56
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
57 String connection = null;
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
58
9670
07d854c325d8 Tighten code a bit
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
59 if (groups < 4) {
07d854c325d8 Tighten code a bit
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
60 log.warn("Could only partially parse connection string.");
07d854c325d8 Tighten code a bit
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
61 return null;
07d854c325d8 Tighten code a bit
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
62 }
07d854c325d8 Tighten code a bit
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
63
07d854c325d8 Tighten code a bit
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
64 String host = m.group(2);
07d854c325d8 Tighten code a bit
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
65 String port = m.group(3);
07d854c325d8 Tighten code a bit
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
66 String db = m.group(4);
07d854c325d8 Tighten code a bit
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
67
5865
73da40528cf2 River artifacts: Renamed FLYSUtils to RiverUtils.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
68 if (RiverUtils.isUsingOracle()) {
8856
5e38e2924c07 Fix code style.
Tom Gottfried <tom@intevation.de>
parents: 8202
diff changeset
69 connection = user + "/" + pass
9670
07d854c325d8 Tighten code a bit
Tom Gottfried <tom@intevation.de>
parents: 8856
diff changeset
70 + "@" + host + ":" + port + "/" + db;
4841
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
71 }
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
72 else {
5147
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
73 connection = createConnectionString(user, pass, host, db, port);
4841
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
74 }
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 return connection;
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
77 }
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
78
5147
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
79 public static String createConnectionString(
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
80 String user,
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
81 String pass,
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
82 String host,
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
83 String db,
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
84 String port
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
85 ) {
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
86 StringBuilder sb = new StringBuilder();
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
87 sb.append("dbname=").append(db);
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
88 sb.append(" host='").append(host).append("'");
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
89 sb.append(" user=").append(user);
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
90 sb.append(" port=").append(port);
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
91 // XXX: We need to escape this somehow.
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
92 sb.append(" password='").append(pass).append("'");
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
93 sb.append(" sslmode=disable");
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
94 return sb.toString();
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
95 }
48b231a02d3a Generate valid DB connection strings.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 4841
diff changeset
96
4841
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
97 public static String getConnectionType() {
5865
73da40528cf2 River artifacts: Renamed FLYSUtils to RiverUtils.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
98 return RiverUtils.isUsingOracle() ? "oraclespatial" : "postgis";
4841
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
99 }
ad0990a82ab8 Insert db connection into riveraxis map files.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
100 }

http://dive4elements.wald.intevation.org