This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository echobase. See http://git.codelutin.com/echobase.git commit 8d5ba414cb02d860ac8ca6ea15903799b9188b73 Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Jan 22 12:59:04 2015 +0100 improve pg jdbc url --- .../services/service/spatial/GisService.java | 16 ++----- .../services/service/spatial/LizmapRepository.java | 15 ++----- .../services/service/spatial/PgJdbcUrl.java | 43 ++++++++++++++++++ .../service/spatial/LizmapRepositoryTest.java | 6 +-- .../services/service/spatial/PgJdbcUrlTest.java | 52 ++++++++++++++++++++++ 5 files changed, 106 insertions(+), 26 deletions(-) diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/spatial/GisService.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/spatial/GisService.java index e8f98f6..53105cb 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/spatial/GisService.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/spatial/GisService.java @@ -57,8 +57,6 @@ public class GisService extends EchoBaseServiceSupport { private static final String[] TEMPLATE_MARKUP = {"{{dbname}}", "{{host}}", "{{port}}", "{{userName}}", "{{password}}", "{{voyageName}}", "{{voyageId}}", "{{resourcesPath}}"}; - private static final String START_JDBC_URL = "jdbc:postgresql://"; - private static final String GIS_INTERNAL_PATH = "/gis/templates/"; private static final String QGIS_RESOURCES = "/gis/lizmap/resources/"; @@ -231,21 +229,15 @@ public class GisService extends EchoBaseServiceSupport { String[] templateValues = new String[TEMPLATE_MARKUP.length]; String url = conf.getUrl(); - if (!url.startsWith(START_JDBC_URL)) { - throw new EchoBaseTechnicalException("JDBC URL '" + url + "' is no reference to a Postrges database"); - } - //TODO Use a regex - int hostIndex = START_JDBC_URL.length() - 1; - int portIndex = url.indexOf(':', hostIndex); - int dbnameIndex = url.indexOf("/", portIndex); + PgJdbcUrl jdbcUrl = new PgJdbcUrl(url); // dbname - templateValues[0] = url.substring(dbnameIndex + 1); + templateValues[0] = jdbcUrl.getDatabaseName(); // host - templateValues[1] = url.substring(hostIndex + 1, portIndex); + templateValues[1] = jdbcUrl.getHost(); // port - templateValues[2] = url.substring(portIndex + 1, dbnameIndex); + templateValues[2] = jdbcUrl.getPort(); // userName templateValues[3] = conf.getLogin(); // password diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/spatial/LizmapRepository.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/spatial/LizmapRepository.java index 8ca7a32..aaede6f 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/spatial/LizmapRepository.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/spatial/LizmapRepository.java @@ -42,8 +42,6 @@ import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; -import java.util.regex.Matcher; -import java.util.regex.Pattern; /** * Created on 1/14/15. @@ -108,8 +106,6 @@ public class LizmapRepository { private static final String[] REPLACEMENT_LIST = new String[]{"", ""}; - private static final Pattern URL_PATTERN = Pattern.compile("jdbc:postgresql://([^:]+)(:(.+)){0,1}/(.+)"); - private final LizmapRepositoryConfiguration configuration; private String repositoryName; @@ -144,14 +140,11 @@ public class LizmapRepository { String url = configuration.getUrl(); - Matcher matcher = URL_PATTERN.matcher(url); + PgJdbcUrl jdbcUrl = new PgJdbcUrl(url); - if (!matcher.matches()) { - throw new EchoBaseTechnicalException(url + " is not a jdbc postgresql url!"); - } - String host = matcher.group(1); - String port = matcher.group(3); - String dbname = matcher.group(4); + String host = jdbcUrl.getHost(); + String port = jdbcUrl.getPort(); + String dbname = jdbcUrl.getDatabaseName(); repositoryName = configuration.getLizmapRepositoryName() + host + port + dbname; repositoryName = StringUtils.replaceEach(repositoryName, TO_REPLACE, REPLACEMENT_LIST); diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/spatial/PgJdbcUrl.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/spatial/PgJdbcUrl.java new file mode 100644 index 0000000..09f36af --- /dev/null +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/spatial/PgJdbcUrl.java @@ -0,0 +1,43 @@ +package fr.ifremer.echobase.services.service.spatial; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Created on 1/22/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 2.9 + */ +public class PgJdbcUrl { + + protected final String url; + + private static final Pattern URL_PATTERN = Pattern.compile("jdbc:postgresql://([^:]+)(:(.+)){0,1}/(.+)"); + + private final Matcher matcher; + + public PgJdbcUrl(String url) { + this.url = url; + matcher = URL_PATTERN.matcher(url); + if (!matcher.matches()) { + throw new IllegalArgumentException(url + " is not a valid pg jdbc url"); + + } + } + + public String getHost() { + return matcher.group(1); + } + + public String getPort() { + String port = matcher.group(3); + return port == null ? "5432" : port; + } + + public String getDatabaseName() { + return matcher.group(4); + } + + +} diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/spatial/LizmapRepositoryTest.java b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/spatial/LizmapRepositoryTest.java index daf091b..0c000cc 100644 --- a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/spatial/LizmapRepositoryTest.java +++ b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/spatial/LizmapRepositoryTest.java @@ -28,17 +28,17 @@ public class LizmapRepositoryTest extends EchoBaseTestServiceSupport { LizmapRepository lizmapRepository = LizmapRepository.newLizmapRepository(configuration, jdbcConfiguration); String repositoryName = lizmapRepository.getRepositoryName(); Assert.assertNotNull(repositoryName); - Assert.assertEquals("echobaselocalhostnullEchobasetest", repositoryName); + Assert.assertEquals("echobaselocalhost5432Echobasetest", repositoryName); } { - JdbcConfiguration jdbcConfiguration = JdbcConfiguration.newConfig(DriverType.POSTGRESQL, "jdbc:postgresql://localhost:5432/Echobase-test", "login", "password"); + JdbcConfiguration jdbcConfiguration = JdbcConfiguration.newConfig(DriverType.POSTGRESQL, "jdbc:postgresql://localhost:5433/Echobase-test", "login", "password"); LizmapRepository lizmapRepository = LizmapRepository.newLizmapRepository(configuration, jdbcConfiguration); String repositoryName = lizmapRepository.getRepositoryName(); Assert.assertNotNull(repositoryName); - Assert.assertEquals("echobaselocalhost5432Echobasetest", repositoryName); + Assert.assertEquals("echobaselocalhost5433Echobasetest", repositoryName); } diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/spatial/PgJdbcUrlTest.java b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/spatial/PgJdbcUrlTest.java new file mode 100644 index 0000000..9959a4f --- /dev/null +++ b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/spatial/PgJdbcUrlTest.java @@ -0,0 +1,52 @@ +package fr.ifremer.echobase.services.service.spatial; + +import org.junit.Assert; +import org.junit.Test; + +public class PgJdbcUrlTest { + + @Test + public void testGetPort() { + + { + PgJdbcUrl jdbcUrl = new PgJdbcUrl("jdbc:postgresql://localhost/Echobase-test"); + Assert.assertEquals("5432", jdbcUrl.getPort()); + } + { + PgJdbcUrl jdbcUrl = new PgJdbcUrl("jdbc:postgresql://localhost:5433/Echobase-test"); + Assert.assertEquals("5433", jdbcUrl.getPort()); + + } + + } + + @Test + public void testGetHost() { + + { + PgJdbcUrl jdbcUrl = new PgJdbcUrl("jdbc:postgresql://localhost/Echobase-test"); + Assert.assertEquals("localhost", jdbcUrl.getHost()); + } + { + PgJdbcUrl jdbcUrl = new PgJdbcUrl("jdbc:postgresql://localhost:5433/Echobase-test"); + Assert.assertEquals("localhost", jdbcUrl.getHost()); + + } + + } + + @Test + public void testGetDatabaseName() { + + { + PgJdbcUrl jdbcUrl = new PgJdbcUrl("jdbc:postgresql://localhost/Echobase-test"); + Assert.assertEquals("Echobase-test", jdbcUrl.getDatabaseName()); + } + { + PgJdbcUrl jdbcUrl = new PgJdbcUrl("jdbc:postgresql://localhost:5433/Echobase-test"); + Assert.assertEquals("Echobase-test", jdbcUrl.getDatabaseName()); + + } + + } +} \ No newline at end of file -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.