diff --git a/stack-clients/docker-compose.yml b/stack-clients/docker-compose.yml index 67af642a0..b1d0022c2 100644 --- a/stack-clients/docker-compose.yml +++ b/stack-clients/docker-compose.yml @@ -1,6 +1,6 @@ services: stack-client: - image: ghcr.io/theworldavatar/stack-client${IMAGE_SUFFIX}:1.54.1 + image: ghcr.io/theworldavatar/stack-client${IMAGE_SUFFIX}:1.55.0-external-postgres-SNAPSHOT secrets: - blazegraph_password - postgis_password diff --git a/stack-clients/pom.xml b/stack-clients/pom.xml index 1f122256b..53bf09830 100644 --- a/stack-clients/pom.xml +++ b/stack-clients/pom.xml @@ -7,7 +7,7 @@ com.cmclinnovations stack-clients - 1.54.1 + 1.55.0-external-postgres-SNAPSHOT Stack Clients https://theworldavatar.io diff --git a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/CityDB.java b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/CityDB.java index d802ea76d..70550c890 100644 --- a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/CityDB.java +++ b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/CityDB.java @@ -12,6 +12,7 @@ import com.cmclinnovations.stack.clients.citydb.ImpExpOptions; import com.cmclinnovations.stack.clients.geoserver.GeoServerClient; import com.cmclinnovations.stack.clients.geoserver.GeoServerVectorSettings; +import com.cmclinnovations.stack.clients.postgis.Database; import com.cmclinnovations.stack.clients.postgis.PostGISClient; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; @@ -62,18 +63,20 @@ protected void setPreviousFile(Path previousFilePath) { @Override void loadInternal(Dataset parent) { - String database = parent.getDatabase(); + Database database = parent.getDatabase(); + database.ensureDefault(); + String databaseName = database.getDatabaseName(); super.loadInternal(parent); if (null != previousFile) { logger.info("Exporting data..."); - writeOutPrevious(database); + writeOutPrevious(databaseName); } if (createTile) { logger.info("Creating 3D tiles..."); - createLayer(database); + createLayer(databaseName); } } @@ -140,7 +143,7 @@ public String getSchema() { } @Override - public void createLayers(String workspaceName, String database) { + public void createLayers(String workspaceName, Database database) { logger.info("Publishing to geoserver..."); GeoServerClient.getInstance() .createPostGISLayer(workspaceName, database, getSchema(), getTable(), geoServerSettings); diff --git a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/DCATUpdateQuery.java b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/DCATUpdateQuery.java index 526b2c9fb..227464627 100644 --- a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/DCATUpdateQuery.java +++ b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/DCATUpdateQuery.java @@ -22,7 +22,7 @@ import com.cmclinnovations.stack.clients.blazegraph.BlazegraphClient; import com.cmclinnovations.stack.clients.core.StackClient; import com.cmclinnovations.stack.clients.ontop.OntopClient; -import com.cmclinnovations.stack.clients.postgis.PostGISClient; +import com.cmclinnovations.stack.clients.postgis.Database; import com.cmclinnovations.stack.clients.rdf4j.Rdf4jClient; final class DCATUpdateQuery { @@ -213,10 +213,10 @@ private void addBlazegraphServer(Dataset dataset) { private void addPostGISServer(Dataset dataset) { boolean used = dataset.usesPostGIS(); - String database = dataset.getDatabase(); - String url = used ? PostGISClient.getInstance().readEndpointConfig().getJdbcURL(database) : null; + Database database = dataset.getDatabase(); + String url = used ? database.getEndpointConfig().getJdbcURL(database.getDatabaseName()) : null; - addService(postgisServiceVar, database, SparqlConstants.POSTGIS_SERVICE, url, null, null, used); + addService(postgisServiceVar, database.getDatabaseName(), SparqlConstants.POSTGIS_SERVICE, url, null, null, used); } private void addGeoServerServer(Dataset dataset) { diff --git a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/Dataset.java b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/Dataset.java index 1b3b4f2bf..c53a3c829 100644 --- a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/Dataset.java +++ b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/Dataset.java @@ -19,6 +19,7 @@ import com.cmclinnovations.stack.clients.core.EndpointNames; import com.cmclinnovations.stack.clients.geoserver.GeoServerStyle; import com.cmclinnovations.stack.clients.geoserver.StaticGeoServerData; +import com.cmclinnovations.stack.clients.postgis.Database; import com.fasterxml.jackson.annotation.JacksonInject; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -40,7 +41,7 @@ public class Dataset extends AbstractDataObject { private final Optional datasetDirectory; @JsonProperty - private final Optional database; + private final Optional database; @JsonProperty private final Optional namespace; @JsonProperty("workspace") @@ -99,7 +100,7 @@ public class Dataset extends AbstractDataObject { Dataset(String name, Optional description, Optional datasetDirectory, - Optional database, + Optional database, Optional namespace, Optional workspaceName, Optional> externalDatasetNames, @@ -140,12 +141,12 @@ public Path getDirectory() { return Path.of("/inputs", "data").resolve(datasetDirectory.orElse(Path.of(name))); } - public String getDatabase() { + public Database getDatabase() { if (database.isPresent()) { LOGGER.warn(NAME_DEPRECATION_NOTICE, "database", getName(), database.get()); return database.get(); } - return getName(); + return new Database(getName()); } public String getNamespace() { @@ -195,7 +196,7 @@ public List getOntopMappings() { public List getRules() { return rules.orElse(Collections.emptyList()); } - + public List getOntopLenses() { return ontopLenses.orElse(Collections.emptyList()); } diff --git a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/DatasetLoader.java b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/DatasetLoader.java index 1a38c57c3..ceb022e70 100644 --- a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/DatasetLoader.java +++ b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/DatasetLoader.java @@ -23,6 +23,7 @@ import com.cmclinnovations.stack.clients.geoserver.GeoServerClient; import com.cmclinnovations.stack.clients.geoserver.StaticGeoServerData; import com.cmclinnovations.stack.clients.ontop.OntopClient; +import com.cmclinnovations.stack.clients.postgis.Database; import com.cmclinnovations.stack.clients.postgis.PostGISClient; import com.cmclinnovations.stack.clients.rdf4j.Rdf4jClient; import com.cmclinnovations.stack.clients.utils.JsonHelper; @@ -207,11 +208,14 @@ private List getServiceDescriptions(String datasetName) { private void configurePostgres(Dataset dataset, List dataSubsets) { if (dataset.usesPostGIS()) { + Database database = dataset.getDatabase(); + database.ensureDefault(); + String databaseName = database.getDatabaseName(); PostGISClient postGISClient = PostGISClient.getInstance(); - postGISClient.createDatabase(dataset.getDatabase()); + postGISClient.createDatabase(databaseName); dataSubsets.stream().filter(DataSubset::usesPostGIS) .filter(PostgresDataSubset.class::isInstance) - .forEach(subset -> postGISClient.createSchema(dataset.getDatabase(), + .forEach(subset -> postGISClient.createSchema(databaseName, ((PostgresDataSubset) subset).getSchema())); } } @@ -263,7 +267,10 @@ private void configureOntop(Dataset dataset, Path directory, List ontolo ServiceConfig newOntopServiceConfig = serviceManager.duplicateServiceConfig(EndpointNames.ONTOP, newOntopServiceName); - newOntopServiceConfig.setEnvironmentVariable(OntopService.ONTOP_DB_NAME, dataset.getDatabase()); + Database database = dataset.getDatabase(); + newOntopServiceConfig.setEnvironmentVariable(OntopService.ONTOP_DB_NAME, database.getDatabaseName()); + newOntopServiceConfig.getContainerSpec().getConfigs().stream().findFirst() + .ifPresent(config -> config.withConfigName(database.getEndpointName())); newOntopServiceConfig.getEndpoints() .replaceAll((endpointName, connection) -> new Connection( connection.getUrl(), @@ -278,7 +285,7 @@ private void configureOntop(Dataset dataset, Path directory, List ontolo OntopClient ontopClient = OntopClient.getInstance(newOntopServiceName); ontopMappings.forEach(mapping -> ontopClient.updateOBDA(directory.resolve(mapping))); - if (PostGISClient.DEFAULT_DATABASE_NAME.equals(dataset.getDatabase())) { + if (PostGISClient.DEFAULT_DATABASE_NAME.equals(database.getDatabaseName())) { OntopClient defaultOntopClient = OntopClient.getInstance(EndpointNames.ONTOP); ontopMappings.forEach(mapping -> defaultOntopClient.updateOBDA(directory.resolve(mapping))); } @@ -286,8 +293,9 @@ private void configureOntop(Dataset dataset, Path directory, List ontolo ontopClient.uploadOntology(catalogNamespace, ontologyDatasetNames); ontopClient.uploadRules(dataset.getRules().stream().map(directory::resolve).collect(Collectors.toList())); - - ontopClient.uploadLenses(dataset.getOntopLenses().stream().map(directory::resolve).collect(Collectors.toList())); + + ontopClient.uploadLenses( + dataset.getOntopLenses().stream().map(directory::resolve).collect(Collectors.toList())); } } } diff --git a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/DatasetRemover.java b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/DatasetRemover.java index ccc4adb07..56f44f6c8 100644 --- a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/DatasetRemover.java +++ b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/DatasetRemover.java @@ -6,6 +6,7 @@ import com.cmclinnovations.stack.clients.blazegraph.BlazegraphClient; import com.cmclinnovations.stack.clients.core.StackClient; import com.cmclinnovations.stack.clients.geoserver.GeoServerClient; +import com.cmclinnovations.stack.clients.postgis.Database; import com.cmclinnovations.stack.clients.postgis.PostGISClient; import com.cmclinnovations.stack.services.ServiceManager; @@ -39,6 +40,8 @@ public void removeDataset(Dataset dataset) { serviceManager.removeService(StackClient.getStackName(), ontopServiceName); + Database database = dataset.getDatabase(); + database.ensureDefault(); GeoServerClient geoServerClient = GeoServerClient.getInstance(); String workspaceName = dataset.getWorkspaceName(); // Ensure GeoServer workspace is removed @@ -48,7 +51,7 @@ public void removeDataset(Dataset dataset) { BlazegraphClient.getInstance().removeNamespace(dataset.getNamespace()); // Ensure PostGIS database is removed, if specified - PostGISClient.getInstance().removeDatabase(dataset.getDatabase()); + PostGISClient.getInstance().removeDatabase(database.getDatabaseName()); // Upload styles to GeoServer // dataset.getGeoserverStyles().forEach(style -> diff --git a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/GeoServerDataSubset.java b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/GeoServerDataSubset.java index a75981e0a..8e81eff3e 100644 --- a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/GeoServerDataSubset.java +++ b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/GeoServerDataSubset.java @@ -1,5 +1,7 @@ package com.cmclinnovations.stack.clients.core.datasets; +import com.cmclinnovations.stack.clients.postgis.Database; + public abstract class GeoServerDataSubset extends PostgresDataSubset { @Override @@ -13,6 +15,6 @@ void loadInternal(Dataset parent) { createLayers(parent.getWorkspaceName(), parent.getDatabase()); } - public abstract void createLayers(String workspaceName, String database); + public abstract void createLayers(String workspaceName, Database database); } diff --git a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/OSMRouting.java b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/OSMRouting.java index fcb1cc76f..2c43d6c98 100644 --- a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/OSMRouting.java +++ b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/OSMRouting.java @@ -5,6 +5,7 @@ import com.cmclinnovations.stack.clients.core.Options; import com.cmclinnovations.stack.clients.geoserver.GeoServerClient; import com.cmclinnovations.stack.clients.geoserver.GeoServerVectorSettings; +import com.cmclinnovations.stack.clients.postgis.Database; import com.cmclinnovations.stack.clients.postgis.PGRoutingClient; import com.fasterxml.jackson.annotation.JsonProperty; @@ -26,13 +27,13 @@ public void loadData(Path dirPath, String database, String baseIRI) { } @Override - public void createLayers(String workspaceName, String database) { + public void createLayers(String workspaceName, Database database) { createLayer(workspaceName, database, prefixTableName("ways"), waysGeoServerSettings); createLayer(workspaceName, database, prefixTableName("ways_vertices_pgr"), verticesGeoServerSettings); createLayer(workspaceName, database, prefixTableName("pointsofinterest"), poiGeoServerSettings); } - private void createLayer(String workspaceName, String database, String layerName, + private void createLayer(String workspaceName, Database database, String layerName, GeoServerVectorSettings geoServerVectorSettings) { GeoServerClient.getInstance() .createPostGISLayer(workspaceName, database, getSchema(), layerName, geoServerVectorSettings); diff --git a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/PostgresDataSubset.java b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/PostgresDataSubset.java index 53e76c07c..883e5cfe9 100644 --- a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/PostgresDataSubset.java +++ b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/PostgresDataSubset.java @@ -7,6 +7,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.cmclinnovations.stack.clients.postgis.Database; import com.cmclinnovations.stack.clients.postgis.PostGISClient; import com.cmclinnovations.stack.clients.utils.JsonHelper; import com.fasterxml.jackson.annotation.JsonProperty; @@ -49,17 +50,19 @@ public boolean usesPostGIS() { @Override void loadInternal(Dataset parent) { - String database = parent.getDatabase(); + Database database = parent.getDatabase(); + database.ensureDefault(); + String databaseName = database.getDatabaseName(); Optional subdirectory = this.getSubdirectory(); if (subdirectory.isPresent()) { Path dataSubsetDirectory = parent.getDirectory().resolve(subdirectory.get()); - PostGISClient.getInstance().resetSchema(database); - loadData(dataSubsetDirectory, database, parent.baseIRI()); + PostGISClient.getInstance().resetSchema(databaseName); + loadData(dataSubsetDirectory, databaseName, parent.baseIRI()); } else { logger.warn("No Subdirectory specified, Continuing with SQL process and creation without data upload"); } - runSQLPostProcess(database); - PostGISClient.getInstance().resetSchema(database); + runSQLPostProcess(databaseName); + PostGISClient.getInstance().resetSchema(databaseName); } public abstract void loadData(Path dataSubsetDir, String database, String baseIRI); diff --git a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/RML.java b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/RML.java index a9ca70f65..cb6deb73f 100644 --- a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/RML.java +++ b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/RML.java @@ -1,7 +1,6 @@ package com.cmclinnovations.stack.clients.core.datasets; import java.nio.file.Path; -import java.util.Map; import com.cmclinnovations.stack.clients.rml.RmlMapperClient; diff --git a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/Raster.java b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/Raster.java index 851ad51e5..3533706b2 100644 --- a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/Raster.java +++ b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/Raster.java @@ -9,6 +9,7 @@ import com.cmclinnovations.stack.clients.geoserver.GeoServerClient; import com.cmclinnovations.stack.clients.geoserver.GeoServerRasterSettings; import com.cmclinnovations.stack.clients.geoserver.MultidimSettings; +import com.cmclinnovations.stack.clients.postgis.Database; import com.fasterxml.jackson.annotation.JsonProperty; public class Raster extends GeoServerDataSubset { @@ -30,7 +31,7 @@ public void loadData(Path dirPath, String database, String baseIRI) { } @Override - public void createLayers(String workspaceName, String database) { + public void createLayers(String workspaceName, Database database) { GeoServerClient.getInstance() .createGeoTiffLayer(workspaceName, getTable(), database, getSchema(), geoServerSettings, mdimSettings); diff --git a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/Vector.java b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/Vector.java index b15ef558f..9471c977c 100644 --- a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/Vector.java +++ b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/Vector.java @@ -6,6 +6,7 @@ import com.cmclinnovations.stack.clients.gdal.Ogr2OgrOptions; import com.cmclinnovations.stack.clients.geoserver.GeoServerClient; import com.cmclinnovations.stack.clients.geoserver.GeoServerVectorSettings; +import com.cmclinnovations.stack.clients.postgis.Database; import com.fasterxml.jackson.annotation.JsonProperty; public class Vector extends GeoServerDataSubset { @@ -24,7 +25,7 @@ public void loadData(Path dirPath, String database, String baseIRI) { } @Override - public void createLayers(String workspaceName, String database) { + public void createLayers(String workspaceName, Database database) { GeoServerClient.getInstance() .createPostGISLayer(workspaceName, database, getSchema(), getTable(), geoServerSettings); } diff --git a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/XtoCityDB.java b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/XtoCityDB.java index f5045369e..9817aef61 100644 --- a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/XtoCityDB.java +++ b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/core/datasets/XtoCityDB.java @@ -34,12 +34,12 @@ protected void loadDataInternal(Path dataSubsetDir, String database, String base GDALClient.getInstance() .uploadVectorFilesToPostGIS(database, getSchema(), getTable(), dataSubsetDir.toString(), ogr2ogrOptions, false); - CityDBClient.getInstance() - .updateDatabase(database, getSridIn()); - CityDBClient.getInstance().preparePGforCityDB(database, getTable(), JsonHelper.handleFileValues(preprocessSql), - minArea, columnMap); - CityDBClient.getInstance().populateCityDBbySQL(database, lineage, columnMap); - CityDBClient.getInstance().addIRIs(database, baseIRI); + CityDBClient instance = CityDBClient.getInstance(); + instance.updateDatabase(database, getSridIn()); + instance.preparePGforCityDB(database, getTable(), JsonHelper.handleFileValues(preprocessSql), minArea, + columnMap); + instance.populateCityDBbySQL(database, lineage, columnMap); + instance.addIRIs(database, baseIRI); } @Override diff --git a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/gdal/CommonOptions.java b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/gdal/CommonOptions.java index 532ec6085..0bcba84c9 100644 --- a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/gdal/CommonOptions.java +++ b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/gdal/CommonOptions.java @@ -39,13 +39,18 @@ protected CommonOptions(String command) { this.command = command; } + @SuppressWarnings("unchecked") + protected final T self() { + return (T) this; + } + public final String getSridIn() { return sridIn; } public final T setSridIn(String sridIn) { this.sridIn = sridIn; - return (T) this; + return self(); } public final String getSridOut() { @@ -54,27 +59,27 @@ public final String getSridOut() { public final T setSridOut(String sridOut) { this.sridOut = sridOut; - return (T) this; + return self(); } public final T addInputDatasetOpenOption(String name, String value) { inputDatasetOpenOptions.put(name, value); - return (T) this; + return self(); } public final T addOtherOption(String option, String... values) { otherOptions.put(option, new Option(values)); - return (T) this; + return self(); } public final T addConfigOption(String option, String value) { configOptions.put(option, value); - return (T) this; + return self(); } public final T withEnv(String key, String value) { envVars.put(key, value); - return (T) this; + return self(); } public final Map getEnv() { diff --git a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/gdal/GDALClient.java b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/gdal/GDALClient.java index 15af8883e..d3793ce09 100644 --- a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/gdal/GDALClient.java +++ b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/gdal/GDALClient.java @@ -250,9 +250,8 @@ private void addCustomCRStoPostGis(String gdalContainerId, String filePath, Stri sridAuthNameArray = newSrid.split(":"); String authName = sridAuthNameArray[0]; String srid = sridAuthNameArray[1]; - PostGISClient.getInstance().addProjectionsToPostgis(databaseName, proj4String, - wktString, - authName, srid); + PostGISClient.getInstance() + .addProjectionsToPostgis(databaseName, proj4String, wktString, authName, srid); GeoServerClient.getInstance().addProjectionsToGeoserver(wktString, srid); } catch (NullPointerException ex) { throw new RuntimeException( diff --git a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/gdal/GDALOptions.java b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/gdal/GDALOptions.java index 082ca278d..0030087bc 100644 --- a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/gdal/GDALOptions.java +++ b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/gdal/GDALOptions.java @@ -18,7 +18,7 @@ protected GDALOptions(String command) { public final T addCreationOption(String name, String value) { creationOptions.put(name, value); - return (T) this; + return self(); } public final String[] generateCommand(String sourceFormat, String source, String destination, diff --git a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/geoserver/GeoServerClient.java b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/geoserver/GeoServerClient.java index 423b52f93..5a088fc20 100644 --- a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/geoserver/GeoServerClient.java +++ b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/geoserver/GeoServerClient.java @@ -19,6 +19,7 @@ import com.cmclinnovations.stack.clients.core.RESTEndpointConfig; import com.cmclinnovations.stack.clients.core.StackClient; import com.cmclinnovations.stack.clients.docker.DockerClient; +import com.cmclinnovations.stack.clients.postgis.Database; import com.cmclinnovations.stack.clients.postgis.PostGISClient; import com.cmclinnovations.stack.clients.postgis.PostGISEndpointConfig; import com.cmclinnovations.stack.clients.utils.JsonHelper; @@ -38,8 +39,6 @@ public class GeoServerClient extends ClientWithEndpoint { private static final Logger logger = LoggerFactory.getLogger(GeoServerClient.class); private final GeoServerRESTManager manager; - private final PostGISEndpointConfig postgreSQLEndpoint; - private static GeoServerClient instance = null; public static final Path SERVING_DIRECTORY = Path.of("/opt/geoserver_data/www"); @@ -76,8 +75,6 @@ public GeoServerClient(URL restURL, String username, String password) { } manager = new GeoServerRESTManager(restURL, username, password); - - postgreSQLEndpoint = readEndpointConfig(EndpointNames.POSTGIS, PostGISEndpointConfig.class); } public void createWorkspace(String workspaceName) { @@ -167,17 +164,17 @@ public void loadIcons(Path baseDirectory, String iconDir) { } } - public void createPostGISDataStore(String workspaceName, String name, String database, String schema) { + public void createPostGISDataStore(String workspaceName, String name, Database database, String schema) { if (manager.getReader().existsDatastore(workspaceName, name)) { logger.info("GeoServer datastore '{}' already exists.", name); } else { - + PostGISEndpointConfig postgreSQLEndpoint = database.getEndpointConfig(); GSPostGISDatastoreEncoder encoder = new GSPostGISDatastoreEncoder(name); encoder.setHost(postgreSQLEndpoint.getHostName()); encoder.setPort(Integer.parseInt(postgreSQLEndpoint.getPort())); encoder.setUser(postgreSQLEndpoint.getUsername()); encoder.setPassword(postgreSQLEndpoint.getPassword()); - encoder.setDatabase(database); + encoder.setDatabase(database.getDatabaseName()); encoder.setSchema(schema); encoder.setValidateConnections(true); @@ -190,9 +187,9 @@ public void createPostGISDataStore(String workspaceName, String name, String dat } } - public void createPostGISLayer(String workspaceName, String database, String schema, String layerName, + public void createPostGISLayer(String workspaceName, Database database, String schema, String layerName, GeoServerVectorSettings geoServerSettings) { - String storeName = database; + String storeName = database.getDatabaseName(); // Need to include the "Util.DEFAULT_QUIET_ON_NOT_FOUND" argument because the // 2-arg version of "existsLayer" incorrectly calls the 3-arg version of the @@ -239,14 +236,15 @@ private void configureVirtualTable(String layerName, GSFeatureTypeEncoder fte, G } } - public void createGeoTiffLayer(String workspaceName, String name, String database, String schema, + public void createGeoTiffLayer(String workspaceName, String name, Database database, String schema, GeoServerRasterSettings geoServerSettings, MultidimSettings mdimSettings) { if (manager.getReader().existsCoveragestore(workspaceName, name)) { logger.info("GeoServer coverage store '{}' already exists.", name); } else { + PostGISEndpointConfig postgreSQLEndpoint = database.getEndpointConfig(); String geoserverRasterIndexDatabaseName = database + GEOSERVER_RASTER_INDEX_DATABASE_SUFFIX; - PostGISClient postgisClient = PostGISClient.getInstance(); + PostGISClient postgisClient = PostGISClient.getInstance(postgreSQLEndpoint.getName()); postgisClient.createDatabase(geoserverRasterIndexDatabaseName); postgisClient.createSchema(geoserverRasterIndexDatabaseName, schema); @@ -267,7 +265,7 @@ public void createGeoTiffLayer(String workspaceName, String name, String databas datastoreProperties.putIfAbsent("preparedStatements", "true"); StringWriter stringWriter = new StringWriter(); - Path geotiffDir = Path.of(StackClient.GEOTIFFS_DIR, database, schema, name); + Path geotiffDir = Path.of(StackClient.GEOTIFFS_DIR, database.getDatabaseName(), schema, name); try { Map files = new HashMap<>(); @@ -350,14 +348,12 @@ private void processDimensions(GeoServerDimensionSettings dimensionSettings, GSR public void addProjectionsToGeoserver(String wktString, String srid) { String geoserverContainerId = getContainerId("geoserver"); - DockerClient dockerClient = DockerClient.getInstance(); - - dockerClient.makeDir(geoserverContainerId, USER_PROJECTIONS_DIR); + DockerClient.getInstance().makeDir(geoserverContainerId, USER_PROJECTIONS_DIR); sendFileContent(geoserverContainerId, Path.of(USER_PROJECTIONS_DIR, "epsg.properties"), (srid + "=" + wktString + "\n").getBytes()); - GeoServerClient.getInstance().reload(); + reload(); } } diff --git a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/postgis/Database.java b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/postgis/Database.java new file mode 100644 index 000000000..0ea8c3766 --- /dev/null +++ b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/postgis/Database.java @@ -0,0 +1,60 @@ +package com.cmclinnovations.stack.clients.postgis; + +import com.cmclinnovations.stack.clients.core.EndpointNames; +import com.cmclinnovations.stack.clients.docker.DockerConfigHandler; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; + +public class Database { + + private final String databaseName; + + private PostGISEndpointConfig endpointConfig; + + /** + * Constructor for the short form (just the name as a string) + */ + @JsonCreator + public Database(String databaseName) { + this.databaseName = databaseName; + } + + /** + * Constructor for the long form (full JSON object) + */ + @JsonCreator + public Database(@JsonProperty(value = "name") String name, + @JsonProperty(value = "endpoint") PostGISEndpointConfig endpointConfig) { + this.databaseName = name; + this.endpointConfig = endpointConfig; + DockerConfigHandler.writeEndpointConfig(endpointConfig); + } + + public String getEndpointName() { + return getEndpointConfig().getName(); + } + + public String getDatabaseName() { + return databaseName; + } + + public PostGISEndpointConfig getEndpointConfig() { + if (null == endpointConfig) { + endpointConfig = DockerConfigHandler.readEndpointConfig(EndpointNames.POSTGIS, + PostGISEndpointConfig.class); + } + return endpointConfig; + } + + @Override + public String toString() { + return databaseName; + } + + public void ensureDefault() { + if (EndpointNames.POSTGIS != getEndpointName()) { + throw new IllegalStateException("This class/method does not support non-default Postgres databases."); + } + } + +} diff --git a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/postgis/PostGISClient.java b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/postgis/PostGISClient.java index 12e7219aa..a51c9deea 100644 --- a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/postgis/PostGISClient.java +++ b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/postgis/PostGISClient.java @@ -6,6 +6,8 @@ import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; +import java.util.HashMap; +import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -23,17 +25,22 @@ public class PostGISClient extends ClientWithEndpoint { private static final Logger logger = LoggerFactory.getLogger(PostGISClient.class); - private static PostGISClient instance = null; + private static Map instances = new HashMap<>(); public static PostGISClient getInstance() { - if (null == instance) { - instance = new PostGISClient(); - } - return instance; + return getInstance(EndpointNames.POSTGIS); + } + + public static PostGISClient getInstance(String name) { + return instances.computeIfAbsent(name, PostGISClient::new); } protected PostGISClient() { - super(EndpointNames.POSTGIS, PostGISEndpointConfig.class); + this(EndpointNames.POSTGIS); + } + + protected PostGISClient(String name) { + super(name, PostGISEndpointConfig.class); } private Connection getDefaultConnection() throws SQLException { @@ -169,7 +176,7 @@ public RemoteRDBStoreClient getRemoteStoreClient(String database) { public void resetSchema(String database) { try (InputStream is = PostGISClient.class.getResourceAsStream("postgis_reset_schema.sql")) { String sqlQuery = new String(is.readAllBytes()).replace("{database}", database); - PostGISClient.getInstance().getRemoteStoreClient(database).executeUpdate(sqlQuery); + getRemoteStoreClient(database).executeUpdate(sqlQuery); } catch (IOException ex) { throw new RuntimeException("Failed to read resource file 'postgis_reset_schema.sql'.", ex); } diff --git a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/rdf4j/Rdf4jClient.java b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/rdf4j/Rdf4jClient.java index d75c05282..6dd945853 100644 --- a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/rdf4j/Rdf4jClient.java +++ b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/rdf4j/Rdf4jClient.java @@ -4,7 +4,6 @@ import org.eclipse.rdf4j.federated.repository.FedXRepositoryConfigBuilder; import org.eclipse.rdf4j.repository.config.RepositoryConfig; -import org.eclipse.rdf4j.repository.config.RepositoryImplConfig; import org.eclipse.rdf4j.repository.manager.RemoteRepositoryManager; import org.eclipse.rdf4j.repository.sail.config.SailRepositoryConfig; import org.eclipse.rdf4j.repository.sparql.config.SPARQLRepositoryConfig; diff --git a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/utils/AliasMap.java b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/utils/AliasMap.java index fd02f3ce3..113e4d715 100644 --- a/stack-clients/src/main/java/com/cmclinnovations/stack/clients/utils/AliasMap.java +++ b/stack-clients/src/main/java/com/cmclinnovations/stack/clients/utils/AliasMap.java @@ -28,7 +28,7 @@ public final V get(String... aliases) { } } } - return null; + return (V) null; } @SafeVarargs diff --git a/stack-clients/src/test/java/com/cmclinnovations/stack/clients/core/datasets/DCATUpdateQueryTest.java b/stack-clients/src/test/java/com/cmclinnovations/stack/clients/core/datasets/DCATUpdateQueryTest.java index 82bcca6bc..b7a8aec07 100644 --- a/stack-clients/src/test/java/com/cmclinnovations/stack/clients/core/datasets/DCATUpdateQueryTest.java +++ b/stack-clients/src/test/java/com/cmclinnovations/stack/clients/core/datasets/DCATUpdateQueryTest.java @@ -36,6 +36,7 @@ import com.cmclinnovations.stack.clients.core.datasets.DatasetBuilder.Service; import com.cmclinnovations.stack.clients.ontop.OntopClient; import com.cmclinnovations.stack.clients.ontop.OntopEndpointConfig; +import com.cmclinnovations.stack.clients.postgis.Database; import com.cmclinnovations.stack.clients.postgis.PostGISClient; import com.cmclinnovations.stack.clients.postgis.PostGISEndpointConfig; import com.cmclinnovations.stack.clients.rdf4j.Rdf4jClient; @@ -163,7 +164,8 @@ void testAddPostGIS() { buildAndRunQuery(dataset); }, () -> { Dataset dataset = new DatasetBuilder("testDataset").withDescription("Dataset for testing2") - .withDatasetDirectory("test2").withServices(Service.POSTGIS).withDatabase("database1").build(); + .withDatasetDirectory("test2").withServices(Service.POSTGIS).withDatabase(new Database("database1")) + .build(); buildAndRunQuery(dataset); }, () -> { Dataset dataset = new DatasetBuilder("testDataset3").withDescription("Dataset for testing3") diff --git a/stack-clients/src/test/java/com/cmclinnovations/stack/clients/core/datasets/DatasetBuilder.java b/stack-clients/src/test/java/com/cmclinnovations/stack/clients/core/datasets/DatasetBuilder.java index c7af436db..18d3b101c 100644 --- a/stack-clients/src/test/java/com/cmclinnovations/stack/clients/core/datasets/DatasetBuilder.java +++ b/stack-clients/src/test/java/com/cmclinnovations/stack/clients/core/datasets/DatasetBuilder.java @@ -7,6 +7,7 @@ import com.cmclinnovations.stack.clients.blazegraph.Namespace; import com.cmclinnovations.stack.clients.geoserver.GeoServerStyle; import com.cmclinnovations.stack.clients.geoserver.StaticGeoServerData; +import com.cmclinnovations.stack.clients.postgis.Database; class DatasetBuilder { @@ -16,7 +17,7 @@ class DatasetBuilder { private Path datasetDirectory; - private String database; + private Database database; private Namespace namespace; @@ -65,7 +66,7 @@ public DatasetBuilder withDatasetDirectory(String datasetDirectory) { return this; } - public DatasetBuilder withDatabase(String database) { + public DatasetBuilder withDatabase(Database database) { this.database = database; return this; } @@ -160,7 +161,7 @@ static class TestDataset extends Dataset { private TestDataset(String name, Optional description, Optional datasetDirectory, - Optional database, + Optional database, Optional namespace, Optional workspaceName, Optional> externalDatasetNames, diff --git a/stack-clients/src/test/java/com/cmclinnovations/stack/clients/core/datasets/DatasetTest.java b/stack-clients/src/test/java/com/cmclinnovations/stack/clients/core/datasets/DatasetTest.java index e3bb08751..931d83489 100644 --- a/stack-clients/src/test/java/com/cmclinnovations/stack/clients/core/datasets/DatasetTest.java +++ b/stack-clients/src/test/java/com/cmclinnovations/stack/clients/core/datasets/DatasetTest.java @@ -40,7 +40,7 @@ void testDeserialisingTrivial() { Assertions.assertEquals(name, dataset.getDescription()); Assertions.assertEquals(Path.of("/inputs", "data", name), dataset.getDirectory()); Assertions.assertEquals(name, dataset.getNamespace()); - Assertions.assertEquals(name, dataset.getDatabase()); + Assertions.assertEquals(name, dataset.getDatabase().getDatabaseName()); Assertions.assertEquals(name, dataset.getWorkspaceName()); Assertions.assertFalse(dataset.isSkip()); Assertions.assertEquals(SparqlConstants.DEFAULT_BASE_IRI, dataset.baseIRI()); @@ -65,7 +65,7 @@ void testDeserialisingNames() { Assertions.assertEquals("Test description", dataset.getDescription()); Assertions.assertEquals(Path.of("/inputs", "data", "datasetDirectory"), dataset.getDirectory()); Assertions.assertEquals("namespace", dataset.getNamespace()); - Assertions.assertEquals("database", dataset.getDatabase()); + Assertions.assertEquals("database", dataset.getDatabase().getDatabaseName()); Assertions.assertEquals("workspace", dataset.getWorkspaceName()); Assertions.assertTrue(dataset.isSkip()); } diff --git a/stack-clients/src/test/java/com/cmclinnovations/stack/clients/geoserver/GeoServerClientTest.java b/stack-clients/src/test/java/com/cmclinnovations/stack/clients/geoserver/GeoServerClientTest.java index 4e22c52db..44e3e6753 100644 --- a/stack-clients/src/test/java/com/cmclinnovations/stack/clients/geoserver/GeoServerClientTest.java +++ b/stack-clients/src/test/java/com/cmclinnovations/stack/clients/geoserver/GeoServerClientTest.java @@ -42,6 +42,7 @@ import com.cmclinnovations.stack.clients.mocks.MockGeoServer; import com.cmclinnovations.stack.clients.mocks.MockPostGIS; import com.cmclinnovations.stack.clients.mocks.MockServiceWithFileSystem; +import com.cmclinnovations.stack.clients.postgis.Database; import com.cmclinnovations.stack.clients.utils.JsonHelper; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; @@ -51,7 +52,7 @@ public class GeoServerClientTest { private static final String RASTER_SCHEMA_NAME = "existing_raster_schema"; private static final String VECTOR_SCHEMA_NAME = "existing_vector_schema"; - private static final String DATABASE_NAME = "existing_database"; + private static final Database DATABASE = new Database("existing_database"); private static final String EXISTING_WORKSPACE = "existingWorkspace"; private static final String NEW_WORKSPACE = "newWorkspace"; private static final String EXISTING_COVERAGE_STORE = "existingCoverageStore"; @@ -111,8 +112,8 @@ void testCreateGeoTiffLayerExisting() { "/rest/workspaces/" + EXISTING_WORKSPACE + "/coveragestores/" + EXISTING_COVERAGE_STORE + ".xml", 200); - geoServerClient.createGeoTiffLayer(EXISTING_WORKSPACE, EXISTING_COVERAGE_STORE, DATABASE_NAME, - RASTER_SCHEMA_NAME, new GeoServerRasterSettings(), new MultidimSettings()); + geoServerClient.createGeoTiffLayer(EXISTING_WORKSPACE, EXISTING_COVERAGE_STORE, DATABASE, RASTER_SCHEMA_NAME, + new GeoServerRasterSettings(), new MultidimSettings()); } @Test @@ -125,8 +126,8 @@ void testCreateGeoTiffLayerNew() { "/rest/workspaces/" + EXISTING_WORKSPACE + "/coveragestores/" + NEW_COVERAGE_STORE + "/external.imagemosaic", 200, - request().withBody(Path.of("/geotiffs/existing_database/existing_raster_schema/newCoverageStore").toFile() - .toURI().toString()), + request().withBody(Path.of("/geotiffs/existing_database/existing_raster_schema/newCoverageStore") + .toFile().toURI().toString()), response().withBody("")); mockGeoServer.addExpectation(POST, @@ -138,7 +139,7 @@ void testCreateGeoTiffLayerNew() { request().withBody( "truetrue")); - geoServerClient.createGeoTiffLayer(EXISTING_WORKSPACE, NEW_COVERAGE_STORE, DATABASE_NAME, RASTER_SCHEMA_NAME, + geoServerClient.createGeoTiffLayer(EXISTING_WORKSPACE, NEW_COVERAGE_STORE, DATABASE, RASTER_SCHEMA_NAME, new GeoServerRasterSettings(), new MultidimSettings()); } @@ -147,8 +148,7 @@ void testCreatePostGISDataStoreExisting() { mockGeoServer.addExpectation(GET, "/rest/workspaces/" + EXISTING_WORKSPACE + "/datastores/" + NEW_POSTGIS_STORE + ".xml", 200); - geoServerClient.createPostGISDataStore(EXISTING_WORKSPACE, NEW_POSTGIS_STORE, DATABASE_NAME, - VECTOR_SCHEMA_NAME); + geoServerClient.createPostGISDataStore(EXISTING_WORKSPACE, NEW_POSTGIS_STORE, DATABASE, VECTOR_SCHEMA_NAME); } @Test @@ -161,8 +161,7 @@ void testCreatePostGISDataStoreNew() { request().withBody( "newPostgresStorepostgis110100020truefalse50falsetest-postgis1234userexisting_databaseexisting_vector_schematruePostGIS")); - geoServerClient.createPostGISDataStore(EXISTING_WORKSPACE, NEW_POSTGIS_STORE, DATABASE_NAME, - VECTOR_SCHEMA_NAME); + geoServerClient.createPostGISDataStore(EXISTING_WORKSPACE, NEW_POSTGIS_STORE, DATABASE, VECTOR_SCHEMA_NAME); } @Test @@ -171,7 +170,7 @@ void testCreatePostGISLayerExisting() { String layerName = "layerName"; mockGeoServer.addExpectation(GET, "/rest/layers/" + EXISTING_WORKSPACE + ":" + layerName + ".xml", 200); - geoServerClient.createPostGISLayer(EXISTING_WORKSPACE, DATABASE_NAME, VECTOR_SCHEMA_NAME, layerName, + geoServerClient.createPostGISLayer(EXISTING_WORKSPACE, DATABASE, VECTOR_SCHEMA_NAME, layerName, new GeoServerVectorSettings()); } @@ -180,11 +179,11 @@ void testCreatePostGISLayerExistingStore() { String layerName = "layerName"; mockGeoServer.addExpectation(GET, "/rest/layers/" + EXISTING_WORKSPACE + ":" + layerName + ".xml", 404); - mockGeoServer.addExpectation(GET, - "/rest/workspaces/" + EXISTING_WORKSPACE + "/datastores/" + DATABASE_NAME + ".xml", 200); + mockGeoServer.addExpectation(GET, "/rest/workspaces/" + EXISTING_WORKSPACE + "/datastores/" + DATABASE + ".xml", + 200); mockGeoServer.addExpectation(POST, - "/rest/workspaces/" + EXISTING_WORKSPACE + "/datastores/" + DATABASE_NAME + "/featuretypes", 200, + "/rest/workspaces/" + EXISTING_WORKSPACE + "/datastores/" + DATABASE + "/featuretypes", 200, request().withBody(XmlBody.xml( "trueNONElayerNamelayerName", MediaType.TEXT_XML))); @@ -193,7 +192,7 @@ void testCreatePostGISLayerExistingStore() { request().withBody( "truetrue")); - geoServerClient.createPostGISLayer(EXISTING_WORKSPACE, DATABASE_NAME, VECTOR_SCHEMA_NAME, layerName, + geoServerClient.createPostGISLayer(EXISTING_WORKSPACE, DATABASE, VECTOR_SCHEMA_NAME, layerName, new GeoServerVectorSettings()); } @@ -238,13 +237,13 @@ void testCreatePostGISLayerNew(String testName, GeoServerVectorSettings geoServe "existing_databasepostgis110100020truefalse50falsetest-postgis1234userexisting_databaseexisting_vector_schematruePostGIS")); mockGeoServer.addExpectation(GET, - "/rest/workspaces/" + EXISTING_WORKSPACE + "/datastores/" + DATABASE_NAME + ".xml", 404); + "/rest/workspaces/" + EXISTING_WORKSPACE + "/datastores/" + DATABASE + ".xml", 404); String layerName = "layerName"; mockGeoServer.addExpectation(GET, "/rest/layers/" + EXISTING_WORKSPACE + ":" + layerName + ".xml", 404); mockGeoServer.addExpectation(POST, - "/rest/workspaces/" + EXISTING_WORKSPACE + "/datastores/" + DATABASE_NAME + "/featuretypes", + "/rest/workspaces/" + EXISTING_WORKSPACE + "/datastores/" + DATABASE + "/featuretypes", 200, request().withBody(featureTypesBody)); mockGeoServer.addExpectation(PUT, "/rest/layers/" + EXISTING_WORKSPACE + ":" + layerName, 200, @@ -256,10 +255,10 @@ void testCreatePostGISLayerNew(String testName, GeoServerVectorSettings geoServe && null != (sql = virtualTable.getSql()) && sql.startsWith("@")) { moveConfigFileAndRun(sql.replaceAll(".*/", ""), filePath -> geoServerClient - .createPostGISLayer(EXISTING_WORKSPACE, DATABASE_NAME, VECTOR_SCHEMA_NAME, layerName, + .createPostGISLayer(EXISTING_WORKSPACE, DATABASE, VECTOR_SCHEMA_NAME, layerName, geoServerVectorSettings)); } else { - geoServerClient.createPostGISLayer(EXISTING_WORKSPACE, DATABASE_NAME, VECTOR_SCHEMA_NAME, layerName, + geoServerClient.createPostGISLayer(EXISTING_WORKSPACE, DATABASE, VECTOR_SCHEMA_NAME, layerName, geoServerVectorSettings); } } diff --git a/stack-clients/src/test/java/com/cmclinnovations/stack/clients/mocks/MockPostGIS.java b/stack-clients/src/test/java/com/cmclinnovations/stack/clients/mocks/MockPostGIS.java index c957c3a39..990de5fb4 100644 --- a/stack-clients/src/test/java/com/cmclinnovations/stack/clients/mocks/MockPostGIS.java +++ b/stack-clients/src/test/java/com/cmclinnovations/stack/clients/mocks/MockPostGIS.java @@ -30,6 +30,7 @@ public MockPostGIS() { postGISClientFactoryMock = mockStatic(PostGISClient.class); postGISClientFactoryMock.when(PostGISClient::getInstance).thenReturn(postGISClientMock); + postGISClientFactoryMock.when(()->PostGISClient.getInstance("postgis")).thenReturn(postGISClientMock); } public void addOverride(Consumer rule) { diff --git a/stack-data-uploader/docker-compose.yml b/stack-data-uploader/docker-compose.yml index e07d9ef3f..f162a5cf9 100644 --- a/stack-data-uploader/docker-compose.yml +++ b/stack-data-uploader/docker-compose.yml @@ -1,6 +1,6 @@ services: stack-data-uploader: - image: ghcr.io/theworldavatar/stack-data-uploader${IMAGE_SUFFIX}:1.54.1 + image: ghcr.io/theworldavatar/stack-data-uploader${IMAGE_SUFFIX}:1.55.0-external-postgres-SNAPSHOT secrets: - blazegraph_password - postgis_password diff --git a/stack-data-uploader/pom.xml b/stack-data-uploader/pom.xml index 85c6c5702..151044a0c 100644 --- a/stack-data-uploader/pom.xml +++ b/stack-data-uploader/pom.xml @@ -7,7 +7,7 @@ com.cmclinnovations stack-data-uploader - 1.54.1 + 1.55.0-external-postgres-SNAPSHOT Stack Data Uploader https://theworldavatar.io @@ -38,7 +38,7 @@ com.cmclinnovations stack-clients - 1.54.1 + 1.55.0-external-postgres-SNAPSHOT diff --git a/stack-manager/docker-compose.yml b/stack-manager/docker-compose.yml index 6f095bd3d..590755e8b 100644 --- a/stack-manager/docker-compose.yml +++ b/stack-manager/docker-compose.yml @@ -1,6 +1,6 @@ services: stack-manager: - image: ghcr.io/theworldavatar/stack-manager${IMAGE_SUFFIX}:1.54.1 + image: ghcr.io/theworldavatar/stack-manager${IMAGE_SUFFIX}:1.55.0-external-postgres-SNAPSHOT environment: EXTERNAL_PORT: "${EXTERNAL_PORT-3838}" STACK_BASE_DIR: "${STACK_BASE_DIR}" diff --git a/stack-manager/pom.xml b/stack-manager/pom.xml index 74ae3bd8c..59a7ec2e1 100644 --- a/stack-manager/pom.xml +++ b/stack-manager/pom.xml @@ -7,7 +7,7 @@ com.cmclinnovations stack-manager - 1.54.1 + 1.55.0-external-postgres-SNAPSHOT Stack Manager https://theworldavatar.io @@ -38,7 +38,7 @@ com.cmclinnovations stack-clients - 1.54.1 + 1.55.0-external-postgres-SNAPSHOT