diff --git a/src/main/java/it/unibz/inf/isochrone/db/Database.java b/src/main/java/it/unibz/inf/isochrone/db/Database.java index 5319c3018fe9a5dac693e26e7b33ca1fdc63be9b..363088bb9500999bb7b976c5717d3da451320015 100644 --- a/src/main/java/it/unibz/inf/isochrone/db/Database.java +++ b/src/main/java/it/unibz/inf/isochrone/db/Database.java @@ -81,18 +81,18 @@ public class Database { queryLatestDepartureTimeHomo = "SELECT TIME_D, TIME_A, ROUTE_ID FROM (" + " SELECT TIME_D,TIME_A,ROUTE_ID FROM " - + config.getScheduleTable() + + config.getTableSchedule() + " WHERE SOURCE = ? AND TARGET = ? AND ROUTE_ID IN (%S) AND TIME_A>=? AND TIME_A<=? AND SERVICE_ID IN (%S)) C WHERE TIME_D >= ?"; queryEarliestArrivalTimeHomo = "SELECT TIME_D, TIME_A, ROUTE_ID FROM (" + " SELECT TIME_D, TIME_A, ROUTE_ID FROM " - + config.getScheduleTable() + + config.getTableSchedule() + " WHERE SOURCE = ? AND TARGET = ? AND ROUTE_ID IN (%S) AND TIME_D>=? AND TIME_D<=?" + " AND SERVICE_ID IN (%S)) C WHERE TIME_A <= ?"; - queryGetAllEdges = "SELECT ID, SOURCE, TARGET, LENGTH, EDGE_MODE, ROUTE_ID FROM " + config.getEdgeTable(); + queryGetAllEdges = "SELECT ID, SOURCE, TARGET, LENGTH, EDGE_MODE, ROUTE_ID FROM " + config.getTableEdges(); - queryGetContinuousEdges = "SELECT ID, SOURCE, TARGET, LENGTH, EDGE_MODE, ROUTE_ID FROM " + config.getEdgeTable() + " WHERE EDGE_MODE=" + NW_MODE_CONTINUOUS; + queryGetContinuousEdges = "SELECT ID, SOURCE, TARGET, LENGTH, EDGE_MODE, ROUTE_ID FROM " + config.getTableEdges() + " WHERE EDGE_MODE=" + NW_MODE_CONTINUOUS; queryGetDateCodes = "SELECT DISTINCT SERVICE_ID " + " FROM " @@ -101,56 +101,56 @@ public class Database { + " || FRIDAY::int::bit || SATURDAY::int::bit || SUNDAY::int::bit) & ?::bit(7))::int) > 0" + " AND START_DATE <= ? AND END_DATE >= ? " + " ORDER BY SERVICE_ID"; - queryGetCoordinatesFromNode = "SELECT ID,ST_X(GEOMETRY) X, ST_Y(GEOMETRY) Y FROM " + config.getVertexTable() + " WHERE ID=?"; + queryGetCoordinatesFromNode = "SELECT ID,ST_X(GEOMETRY) X, ST_Y(GEOMETRY) Y FROM " + config.getTableVertex() + " WHERE ID=?"; queryGetRange = "select D0.DENSITY s0, D0.E_DISTANCE ed0, D1.DENSITY s1, D1.E_DISTANCE ed1 from " + "(SELECT ID,DENSITY,E_DISTANCE FROM " - + config.getProperty("tbl.vertex.density") + + config.getTableVertexDensity() + " WHERE ID=? AND DENSITY<? ORDER BY DENSITY DESC LIMIT 1) D0 FULL JOIN " + "(SELECT ID,DENSITY,E_DISTANCE FROM " - + config.getProperty("tbl.vertex.density") + + config.getTableVertexDensity() + " WHERE ID=? AND DENSITY>=? ORDER BY DENSITY ASC LIMIT 1) D1 ON D0.ID=D1.ID"; queryLoadLinksFromIER = "SELECT L.ID, L.SOURCE,L.SOURCE_MODE,L.TARGET,L.TARGET_MODE,L.LENGTH,L.EDGE_MODE,L.ROUTE_ID," + (isIncoming ? "L.SOURCE_OUTDEGREE" : "L.TARGET_INDEGREE") - + " DEGREE FROM " + config.getEdgeTable() + " L, " - + config.getVertexTable() + " N " + + " DEGREE FROM " + config.getTableEdges() + " L, " + + config.getTableVertex() + " N " + " WHERE L." + (isIncoming ? "TARGET" : "SOURCE") + "=N.ID" + " AND ST_DWITHIN(ST_PointFromText(?,?),N.GEOMETRY,?)='TRUE'"; queryGetLink = "SELECT SOURCE, TARGET, " + (isIncoming ? "SOURCE_OUTDEGREE" : "TARGET_INDEGREE") - + " NODE_DEGREE, LENGTH FROM " + config.getEdgeTable() + + " NODE_DEGREE, LENGTH FROM " + config.getTableEdges() + " WHERE ID = ? AND EDGE_MODE=" + NW_MODE_CONTINUOUS; queryGetContinuousLink = "SELECT SOURCE, TARGET, " + (isIncoming ? "SOURCE_C_OUTDEGREE" : "TARGET_C_INDEGREE") - + " NODE_DEGREE, LENGTH FROM " + config.getEdgeTable() + + " NODE_DEGREE, LENGTH FROM " + config.getTableEdges() + " WHERE ID = ? AND EDGE_MODE=" + NW_MODE_CONTINUOUS; queryGetContinuousNode = "SELECT " + (isIncoming ? "SOURCE_C_OUTDEGREE" : "TARGET_C_INDEGREE") - + " NODE_DEGREE FROM " + config.getEdgeTable() + + " NODE_DEGREE FROM " + config.getTableEdges() + (isIncoming ? "SOURCE=?" : "TARGET=?") + "AND EDGE_MODE=" + NW_MODE_CONTINUOUS; queryGetMrneXNode = "SELECT " + (isIncoming ? "OUTDEGREE" : "INDEGREE") - + " NODE_DEGREE, ST_X(GEOMETRY) X, ST_Y(GEOMETRY) Y FROM " + config.getVertexTable() + " WHERE ID=?"; + + " NODE_DEGREE, ST_X(GEOMETRY) X, ST_Y(GEOMETRY) Y FROM " + config.getTableVertex() + " WHERE ID=?"; queryGetLinksInRange = "SELECT L.ID,L.SOURCE,L.SOURCE_MODE,L.TARGET,L.TARGET_MODE,L.LENGTH,L.EDGE_MODE,L.ROUTE_ID," - + (isIncoming ? "L.SOURCE_OUTDEGREE" : "L.TARGET_INDEGREE") + " DEGREE FROM " + config.getEdgeTable() - + " L, " + config.getVertexTable() + " N WHERE L." + (isIncoming ? "TARGET" : "SOURCE") + + (isIncoming ? "L.SOURCE_OUTDEGREE" : "L.TARGET_INDEGREE") + " DEGREE FROM " + config.getTableEdges() + + " L, " + config.getTableVertex() + " N WHERE L." + (isIncoming ? "TARGET" : "SOURCE") + "=N.ID AND st_intersects(N.GEOMETRY,%S)"; if (isIncoming) { - queryGetAdjLinks = "SELECT ID,SOURCE NODE_ID,SOURCE_OUTDEGREE NODE_DEGREE,LENGTH,EDGE_MODE,ROUTE_ID FROM " + config.getEdgeTable() + " WHERE TARGET=?"; - queryGetAdjContinuousLinks = "SELECT ID,SOURCE NODE_ID,SOURCE_C_OUTDEGREE NODE_DEGREE,LENGTH,EDGE_MODE,ROUTE_ID FROM " + config.getEdgeTable() + queryGetAdjLinks = "SELECT ID,SOURCE NODE_ID,SOURCE_OUTDEGREE NODE_DEGREE,LENGTH,EDGE_MODE,ROUTE_ID FROM " + config.getTableEdges() + " WHERE TARGET=?"; + queryGetAdjContinuousLinks = "SELECT ID,SOURCE NODE_ID,SOURCE_C_OUTDEGREE NODE_DEGREE,LENGTH,EDGE_MODE,ROUTE_ID FROM " + config.getTableEdges() + " WHERE TARGET=? AND EDGE_MODE=" + NW_MODE_CONTINUOUS; } else { - queryGetAdjLinks = "SELECT ID,TARGET NODE_ID,TARGET_INDEGREE NODE_DEGREE, LENGTH,EDGE_MODE,ROUTE_ID FROM " + config.getEdgeTable() + " WHERE SOURCE=?"; - queryGetAdjContinuousLinks = "SELECT ID,TARGET NODE_ID, TARGET_C_INDEGREE NODE_DEGREE,LENGTH FROM " + config.getEdgeTable() + " WHERE TARGET=? AND EDGE_MODE="; + queryGetAdjLinks = "SELECT ID,TARGET NODE_ID,TARGET_INDEGREE NODE_DEGREE, LENGTH,EDGE_MODE,ROUTE_ID FROM " + config.getTableEdges() + " WHERE SOURCE=?"; + queryGetAdjContinuousLinks = "SELECT ID,TARGET NODE_ID, TARGET_C_INDEGREE NODE_DEGREE,LENGTH FROM " + config.getTableEdges() + " WHERE TARGET=? AND EDGE_MODE="; } } diff --git a/src/main/java/it/unibz/inf/isochrone/util/Config.java b/src/main/java/it/unibz/inf/isochrone/util/Config.java index c1aaacc4ebfc476ef18e85fd185bdce44d4c6122..bd6922a408be996a85b37a794744c450574f1270 100644 --- a/src/main/java/it/unibz/inf/isochrone/util/Config.java +++ b/src/main/java/it/unibz/inf/isochrone/util/Config.java @@ -134,38 +134,28 @@ public class Config { return getProperty("org.postgresql.username"); } - public String getEdgeTable() { - return getProperty("tbl.links"); + public int getServerSRID() { + return Integer.parseInt(getProperty("sql.spatial.srid")); } - /** - * Returns the value of the entry specified by the passed <code>key</code>. - * - * @param key the key that identifies the entry - * @return the value of the entry - */ - public String getProperty(final String key) { - if (internalProperties.getProperty(key) == null) { - return null; - } - - return internalProperties.getProperty(key).trim(); + public String getTableEdges() { + return getProperty("tbl.links"); } - public String getRouteTable() { + public String getTableRoutes() { return getProperty("tbl.routes"); } - public String getScheduleTable() { + public String getTableSchedule() { return getProperty("tbl.times"); } - public int getServerSRID() { - return Integer.parseInt(getProperty("sql.spatial.srid")); + public String getTableVertex() { + return getProperty("tbl.nodes"); } - public String getVertexTable() { - return getProperty("tbl.nodes"); + public String getTableVertexDensity() { + return getProperty("tbl.vertex.density"); } // Protected methods @@ -215,6 +205,20 @@ public class Config { internalProperties.putAll(System.getProperties()); } + /** + * Returns the value of the entry specified by the passed <code>key</code>. + * + * @param key the key that identifies the entry + * @return the value of the entry + */ + protected String getProperty(final String key) { + if (internalProperties.getProperty(key) == null) { + return null; + } + + return internalProperties.getProperty(key).trim(); + } + // Private methods private ConnectionFactory initConnectionFactory() { @@ -246,5 +250,4 @@ public class Config { return f; } - } diff --git a/src/main/java/it/unibz/inf/isoga/db/DbUtility.java b/src/main/java/it/unibz/inf/isoga/db/DbUtility.java index dc30938a35829c83b15af246c41c0785b18b7618..543d519c24ea61d9535a99546e133e18262bbfb3 100644 --- a/src/main/java/it/unibz/inf/isoga/db/DbUtility.java +++ b/src/main/java/it/unibz/inf/isoga/db/DbUtility.java @@ -328,7 +328,7 @@ public final class DbUtility { statement = connection.prepareStatement(query); // CHECKSTYLE:OFF MagicNumber statement.setString(1, config.getDestinationVertexAnnotatedTableEntry().getTableName()); - statement.setString(2, config.getRouteTable()); + statement.setString(2, config.getTableRoutes()); statement.setInt(3, vertexId); // CHECKSTYLE:ON MagicNumber diff --git a/src/main/java/it/unibz/inf/isoga/db/IsogaDatabase.java b/src/main/java/it/unibz/inf/isoga/db/IsogaDatabase.java index 6bba13cc5a34d453a1ed9365512f475cc5dce0f4..e300c73e0d39a7f0771a50807004d35ca71c6548 100644 --- a/src/main/java/it/unibz/inf/isoga/db/IsogaDatabase.java +++ b/src/main/java/it/unibz/inf/isoga/db/IsogaDatabase.java @@ -60,21 +60,21 @@ public class IsogaDatabase extends Database { + " WHERE E.\"SOURCE\" = V.\"ID\" ORDER BY \"OFFSET\" " + (isIncoming ? "DESC" : "ASC"); queryStoreLinks = "INSERT INTO " + cfg.getDestinationEdgeTableEntry().getTableName() - + " (\"ID\",\"SOURCE\",\"TARGET\",\"OFFSET\",\"LENGTH\",\"GEOMETRY\") (SELECT ID,SOURCE,TARGET,?,LENGTH," + " GEOMETRY FROM " + cfg.getEdgeTable() + " WHERE ID =?)"; + + " (\"ID\",\"SOURCE\",\"TARGET\",\"OFFSET\",\"LENGTH\",\"GEOMETRY\") (SELECT ID,SOURCE,TARGET,?,LENGTH," + " GEOMETRY FROM " + cfg.getTableEdges() + " WHERE ID =?)"; queryStorePartialLinks = "INSERT INTO " + cfg.getDestinationEdgeTableEntry().getTableName() + " (\"ID\",\"SOURCE\",\"TARGET\",\"OFFSET\",\"LENGTH\",\"GEOMETRY\") (SELECT ID,SOURCE,TARGET,?,LENGTH," - + " ST_LINE_SUBSTRING(GEOMETRY,?,?) FROM " + cfg.getEdgeTable() + " WHERE ID = ?)"; + + " ST_LINE_SUBSTRING(GEOMETRY,?,?) FROM " + cfg.getTableEdges() + " WHERE ID = ?)"; queryInsertVertex = "INSERT INTO " + cfg.getDestinationVertexTableEntry().getTableName() - + " (\"ID\",\"DISTANCE\",\"ROUTE_ID\",\"STATE\",\"GEOMETRY\") (SELECT ?,?,?,?,GEOMETRY FROM " + cfg.getVertexTable() + + " (\"ID\",\"DISTANCE\",\"ROUTE_ID\",\"STATE\",\"GEOMETRY\") (SELECT ?,?,?,?,GEOMETRY FROM " + cfg.getTableVertex() + " WHERE ID=?)"; queryInsertVertexAnnotation = "INSERT INTO " + cfg.getDestinationVertexAnnotatedTableEntry().getTableName() + " (\"ID\", \"ROUTE_ID\",\"TIME_A\",\"TIME_D\") VALUES (?,?,?,?)"; queryUpdateVertices = "UPDATE " + cfg.getDestinationVertexTableEntry().getTableName() - + " SET \"T_TYPE\"=R.ROUTE_TYPE FROM " + cfg.getRouteTable() + " R WHERE R.ROUTE_ID = " + + " SET \"T_TYPE\"=R.ROUTE_TYPE FROM " + cfg.getTableRoutes() + " R WHERE R.ROUTE_ID = " + cfg.getDestinationVertexTableEntry().getTableName() + ".\"ROUTE_ID\" " + "AND " + cfg.getDestinationVertexTableEntry().getTableName() + ".\"ROUTE_ID\">=0"; } @@ -260,7 +260,7 @@ public class IsogaDatabase extends Database { int reachedInhabitants = 0; final StringBuilder b = new StringBuilder(); b.append("SELECT SUM(I.INHABITANTS) FROM (SELECT DISTINCT B.ID, B.INHABITANTS FROM "); - b.append(config.getProperty("tbl.building")).append(" B, "); + b.append(((ConfigWeb) config).getTableBuilding()).append(" B, "); b.append(((ConfigWeb) config).getDestinationAreaBufferTableEntry().getTableName()).append(" A "); b.append("WHERE ST_Within(B.GEOMETRY, A.GEOMETRY)='TRUE') I"); @@ -283,7 +283,7 @@ public class IsogaDatabase extends Database { } public int totalInhabitants() { - final String query = "SELECT SUM(INHABITANTS) FROM " + config.getProperty("tbl.building"); + final String query = "SELECT SUM(INHABITANTS) FROM " + ((ConfigWeb) config).getTableBuilding(); int totalInhabitants = 0; PreparedStatement statement = null; @@ -363,7 +363,7 @@ public class IsogaDatabase extends Database { final StringBuilder sb = new StringBuilder(); sb.append("SELECT L.ID, ST_Line_Locate_Point(L.EDGE_GEO,L.POINT_GEO)*L.LENGTH AS OFFSET "); sb.append("FROM (SELECT E.ID, E.GEOMETRY EDGE_GEO, E.LENGTH, P.GEOMETRY POINT_GEO FROM "); - sb.append(config.getEdgeTable()).append(" E, "); + sb.append(config.getTableEdges()).append(" E, "); sb.append(" (SELECT "); if (config.getClientSRID() == config.getServerSRID()) { sb.append("ST_PointFromText(?,?) "); @@ -382,7 +382,7 @@ public class IsogaDatabase extends Database { statement.setInt(2, config.getClientSRID()); // CHECKSTYLE:OFF MagicNumber - final int tolerance = Integer.parseInt(config.getProperty("par.distance_tolerance")); + final int tolerance = ((ConfigWeb) config).getDistanceTolerance(); if (config.getClientSRID() != config.getServerSRID()) { statement.setInt(3, config.getServerSRID()); statement.setInt(4, tolerance); diff --git a/src/main/java/it/unibz/inf/isoga/geometry/BBox.java b/src/main/java/it/unibz/inf/isoga/geometry/BBox.java index 3f17cebf762a0da402ed98a4b011b86ed1379ff6..258265e8ac4227309a600eb2b57823498c30a4a0 100644 --- a/src/main/java/it/unibz/inf/isoga/geometry/BBox.java +++ b/src/main/java/it/unibz/inf/isoga/geometry/BBox.java @@ -2,62 +2,75 @@ package it.unibz.inf.isoga.geometry; import it.unibz.inf.isochrone.util.Point; -import org.json.JSONArray; -import org.json.JSONException; - /** * A bounding box in which the isochrone is to be displayed. */ public class BBox implements Comparable<BBox> { - private final long minX, minY, maxX, maxY; + private final double minX; + private final double minY; + private final double maxX; + private final double maxY; + + // Constructors public BBox(final double minX, final double minY, final double maxX, final double maxY) { - this.minX = Math.round(minX); - this.minY = Math.round(minY); - this.maxX = Math.round(maxX); - this.maxY = Math.round(maxY); + this.minX = minX; + this.minY = minY; + this.maxX = maxX; + this.maxY = maxY; } public BBox(final Point lowerCorner, final Point upperCorner) { - minX = (lowerCorner == null) ? 0 : Math.round(lowerCorner.getX()); - minY = (lowerCorner == null) ? 0 : Math.round(lowerCorner.getY()); - maxX = (upperCorner == null) ? 0 : Math.round(upperCorner.getX()); - maxY = (upperCorner == null) ? 0 : Math.round(upperCorner.getY()); + minX = (lowerCorner == null) ? 0 : lowerCorner.getX(); + minY = (lowerCorner == null) ? 0 : lowerCorner.getY(); + maxX = (upperCorner == null) ? 0 : upperCorner.getX(); + maxY = (upperCorner == null) ? 0 : upperCorner.getY(); } - public JSONArray toJSON() throws JSONException { - return new JSONArray(new long[] { minX, minY, maxX, maxY }); + // Getter + + public Point getLowerCorner() { + return new Point(minX, minY); } public long getMinX() { - return minX; + return Math.round(minX); } public long getMinY() { - return minY; + return Math.round(minY); } public long getMaxX() { - return maxX; + return Math.round(maxX); } public long getMaxY() { - return maxY; + return Math.round(maxY); } - @Override - public int hashCode() { - final int prime = 31; - int result = 1; + public Point getUpperCorner() { + return new Point(maxX, maxY); + } - // CHECKSTYLE:OFF MagicNumber - result = prime * result + (int) (maxX ^ (maxX >>> 32)); - result = prime * result + (int) (maxY ^ (maxY >>> 32)); - result = prime * result + (int) (minX ^ (minX >>> 32)); - result = prime * result + (int) (minY ^ (minY >>> 32)); - // CHECKSTYLE:ON MagicNumber + // Public methods - return result; + @Override + public int compareTo(final BBox other) { + if (getMinX() < other.getMinX()) { + return -1; + } + if (getMinX() > other.getMinX()) { + return 1; + } + if (getMinY() < other.getMinY()) { + return -1; + } + if (getMinY() > other.getMinY()) { + return 1; + } + + return 0; } @Override @@ -82,21 +95,22 @@ public class BBox implements Comparable<BBox> { } @Override - public int compareTo(final BBox other) { - if (getMinX() < other.getMinX()) { - return -1; - } - if (getMinX() > other.getMinX()) { - return 1; - } - if (getMinY() < other.getMinY()) { - return -1; - } - if (getMinY() > other.getMinY()) { - return 1; - } + public int hashCode() { + final int prime = 31; + int result = 1; + long temp; - return 0; - } + // CHECKSTYLE:OFF MagicNumber + temp = Double.doubleToLongBits(maxX); + result = prime * result + (int) (temp ^ (temp >>> 32)); + temp = Double.doubleToLongBits(maxY); + result = prime * result + (int) (temp ^ (temp >>> 32)); + temp = Double.doubleToLongBits(minX); + result = prime * result + (int) (temp ^ (temp >>> 32)); + temp = Double.doubleToLongBits(minY); + result = prime * result + (int) (temp ^ (temp >>> 32)); + // CHECKSTYLE:ON MagicNumber + return result; + } } diff --git a/src/main/java/it/unibz/inf/isoga/service/AbstractService.java b/src/main/java/it/unibz/inf/isoga/service/AbstractService.java index 921ed91c689341b6d1a7fa81230d2a4d5d94ebbd..0d9a7b7be698c7d9d2faa4962b6bd5cf25d57704 100644 --- a/src/main/java/it/unibz/inf/isoga/service/AbstractService.java +++ b/src/main/java/it/unibz/inf/isoga/service/AbstractService.java @@ -45,8 +45,8 @@ public abstract class AbstractService<T extends IRequest, U extends IResponse> i protected void registerLayers(final Connection connection, final ConfigDataset dSetConfig) { final ConfigWeb globalConfig = configContainer.getGlobalConfig(); final GeoServerRESTPublisher publisher = globalConfig.getGeoServerPublisher(); - final String ds = globalConfig.getProperty("rendering.server.rest.datastore"); - final String ws = globalConfig.getProperty("rendering.server.rest.workspace"); + final String ws = globalConfig.getRenderServerWorkspace(); + final String ds = globalConfig.getRenderServerDatastore(); final BBox serverExtend = dSetConfig.getServerExtent(); final int serverSrid = dSetConfig.getServerSRID(); final String srs = "EPSG:" + serverSrid; diff --git a/src/main/java/it/unibz/inf/isoga/service/ServiceConfiguration.java b/src/main/java/it/unibz/inf/isoga/service/ServiceConfiguration.java index 9577760b8b8983660c62928b42426712a4c23113..e0056cf28eae0f7bc561a6fa354535cd2e88f2af 100644 --- a/src/main/java/it/unibz/inf/isoga/service/ServiceConfiguration.java +++ b/src/main/java/it/unibz/inf/isoga/service/ServiceConfiguration.java @@ -9,6 +9,7 @@ import it.unibz.inf.isoga.util.ConfigDataset; import it.unibz.inf.isoga.util.ConfigWeb; import java.sql.Connection; +import java.util.Collection; import javax.websocket.Session; @@ -33,20 +34,16 @@ public class ServiceConfiguration extends AbstractService<RequestConfiguration, configContainer.setClientConfig(clientId, new ConfigWeb(globalConfig)); final ResponseConfiguration resp = new ResponseConfiguration(globalConfig); - for (final ConfigDataset templateConfig : configContainer.getDatasetTemplates()) { - final ConfigDataset clientConfig = (ConfigDataset) templateConfig.clone(); - clientConfig.appendTableSuffix(clientId); - configContainer.setClientDSetConfig(clientId, clientConfig); - + final Collection<ConfigDataset> clientConfigs = configContainer.initClient(clientId); + for (final ConfigDataset clientConfig : clientConfigs) { resp.addDSetConfig(clientConfig); } - preregisterDatasets(clientId, globalConfig); - + preregisterClients(clientId, globalConfig); return resp; } - private void preregisterDatasets(final String clientId, final Config config) { + private void preregisterClients(final String clientId, final Config config) { final Connection connection = config.getConnection(); for (Dataset dataset : PREREGISTERING_DATASETS) { diff --git a/src/main/java/it/unibz/inf/isoga/service/dto/ResponseConfiguration.java b/src/main/java/it/unibz/inf/isoga/service/dto/ResponseConfiguration.java index 6c07c9fdb5c0fa95ad28e45c2b9dc9979972867b..9fb93534b64b5bfcb9ef1c24d8cd845c30735434 100644 --- a/src/main/java/it/unibz/inf/isoga/service/dto/ResponseConfiguration.java +++ b/src/main/java/it/unibz/inf/isoga/service/dto/ResponseConfiguration.java @@ -1,7 +1,7 @@ package it.unibz.inf.isoga.service.dto; -import it.unibz.inf.isochrone.util.Config; import it.unibz.inf.isoga.util.ConfigDataset; +import it.unibz.inf.isoga.util.ConfigWeb; import java.util.ArrayList; import java.util.Collection; @@ -13,11 +13,11 @@ public class ResponseConfiguration implements IResponse { private final String version; private final Collection<ConfigDataset> defaultDatasets; - public ResponseConfiguration(final Config config) { + public ResponseConfiguration(final ConfigWeb config) { defaultDatasets = new ArrayList<ConfigDataset>(); - mapserverUrl = config.getProperty("rendering.server.url"); - version = config.getProperty("version"); + mapserverUrl = config.getRenderServerURL(); + version = config.getVersion(); } public void addDSetConfig(final ConfigDataset dsetConfig) { diff --git a/src/main/java/it/unibz/inf/isoga/util/ConfigDataset.java b/src/main/java/it/unibz/inf/isoga/util/ConfigDataset.java index 0a4313e6aa3abf4d02058f8bdf6d478d98d6d3fe..d5fd889d7408320e15e289550cd5e2a7d20e326f 100644 --- a/src/main/java/it/unibz/inf/isoga/util/ConfigDataset.java +++ b/src/main/java/it/unibz/inf/isoga/util/ConfigDataset.java @@ -245,16 +245,11 @@ public final class ConfigDataset implements Cloneable { // Public methods - public void appendTableSuffix(final String suffix) { - edgeLayer = appendSuffix(edgeLayer, suffix); - vertexLayer = appendSuffix(vertexLayer, suffix); - areaBufferLayer = appendSuffix(areaBufferLayer, suffix); - vertexAnnotatedTableName = appendSuffix(vertexAnnotatedTableName, suffix); + public ConfigDataset createFromTemplate(final String clientId) { + final ConfigDataset resultConfig = (ConfigDataset) this.clone(); + resultConfig.appendTableSuffix(clientId); - edgeTableEntry = new TableEntry(edgeLayer, "sidx_" + edgeLayer, TableType.EDGE); - vertexTableEntry = new TableEntry(vertexLayer, "sidx_" + vertexLayer, TableType.VERTEX); - vertexAnnotatedTableEntry = new TableEntry(vertexAnnotatedTableName, "sidx_" + vertexAnnotatedTableName, TableType.VERTEX); - areaBufferTableEntry = new TableEntry(areaBufferLayer, "sidx_" + areaBufferLayer, TableType.COVERAGE); + return resultConfig; } @Override @@ -268,7 +263,21 @@ public final class ConfigDataset implements Cloneable { // Private methods - private String appendSuffix(final String layerName, final String id) { + private void appendTableSuffix(final String suffix) { + edgeLayer = appendSuffix(edgeLayer, suffix); + vertexLayer = appendSuffix(vertexLayer, suffix); + areaBufferLayer = appendSuffix(areaBufferLayer, suffix); + vertexAnnotatedTableName = appendSuffix(vertexAnnotatedTableName, suffix); + + edgeTableEntry = new TableEntry(edgeLayer, "sidx_" + edgeLayer, TableType.EDGE); + vertexTableEntry = new TableEntry(vertexLayer, "sidx_" + vertexLayer, TableType.VERTEX); + vertexAnnotatedTableEntry = new TableEntry(vertexAnnotatedTableName, "sidx_" + vertexAnnotatedTableName, TableType.VERTEX); + areaBufferTableEntry = new TableEntry(areaBufferLayer, "sidx_" + areaBufferLayer, TableType.COVERAGE); + } + + // Private static methods + + private static String appendSuffix(final String layerName, final String id) { String name = layerName + "_" + id; if (name.length() > NAME_MAX_LENGTH) { // CHECKSTYLE:OFF MagicNumber diff --git a/src/main/java/it/unibz/inf/isoga/util/ConfigWeb.java b/src/main/java/it/unibz/inf/isoga/util/ConfigWeb.java index 015ed5378b7009911bdb5b10bf152ce78aa0bbb5..a1080fe0aa6ecbb4008d93972cf6b81c7257ba83 100644 --- a/src/main/java/it/unibz/inf/isoga/util/ConfigWeb.java +++ b/src/main/java/it/unibz/inf/isoga/util/ConfigWeb.java @@ -8,7 +8,9 @@ import it.unibz.inf.isochrone.util.Config; import it.unibz.inf.isochrone.util.EnumContainer.Dataset; import it.unibz.inf.isochrone.util.EnumContainer.Direction; import it.unibz.inf.isochrone.util.EnumContainer.TableType; +import it.unibz.inf.isochrone.util.Point; import it.unibz.inf.isoga.db.TableEntry; +import it.unibz.inf.isoga.geometry.BBox; import java.io.InputStream; import java.net.MalformedURLException; @@ -38,11 +40,6 @@ public class ConfigWeb extends Config { manager = initManager(); } - public ConfigWeb(final Dataset dataset) { - super(dataset); - manager = initManager(); - } - public ConfigWeb(final ConfigDataset datasetConfig, final Direction direction) { super(datasetConfig.getDataset()); @@ -60,8 +57,22 @@ public class ConfigWeb extends Config { manager = config.manager; } + public ConfigWeb(final Dataset dataset) { + super(dataset); + manager = initManager(); + } + // Getter + public String getClientArrivalTime() { + return getProperty("client.tArrival"); + } + + public Point getClientPOI() { + final String[] poiProperty = getProperty("client.poi").split(","); + return new Point(Double.valueOf(poiProperty[0]), Double.valueOf(poiProperty[1])); + } + public TableEntry getDestinationAreaBufferTableEntry() { return destinationAreaBufferTableEntry; } @@ -82,6 +93,10 @@ public class ConfigWeb extends Config { return direction; } + public int getDistanceTolerance() { + return Integer.parseInt(getProperty("par.distance_tolerance")); + } + public GeoServerRESTPublisher getGeoServerPublisher() { return manager.getPublisher(); } @@ -94,6 +109,65 @@ public class ConfigWeb extends Config { return manager.getStoreManager(); } + public String getIndexIsoAreaBuffer() { + return getProperty("idx.isoAreaBuffer"); + } + + public String getIndexIsoLinks() { + return getProperty("idx.isoLinks"); + } + + public String getIndexIsoNodes() { + return getProperty("idx.isoNodes"); + } + + public String getRenderServerDatastore() { + return getProperty("rendering.server.rest.datastore"); + } + + public String getRenderServerURL() { + return getProperty("rendering.server.url"); + } + + public String getRenderServerWorkspace() { + return getProperty("rendering.server.rest.workspace"); + } + + public BBox getServerBBox() { + final double lower1 = Double.parseDouble(getProperty("sql.spatial.dim1.lower")); + final double lower2 = Double.parseDouble(getProperty("sql.spatial.dim2.lower")); + final double upper1 = Double.parseDouble(getProperty("sql.spatial.dim1.upper")); + final double upper2 = Double.parseDouble(getProperty("sql.spatial.dim2.upper")); + + final Point lowerCorner = new Point(lower1, lower2); + final Point upperCorner = new Point(upper1, upper2); + return new BBox(lowerCorner, upperCorner); + } + + public String getTableBuilding() { + return getProperty("tbl.building"); + } + + public String getTableIsoAreaBuffer() { + return getProperty("tbl.isoAreaBuffer"); + } + + public String getTableIsoLinks() { + return getProperty("tbl.isoLinks"); + } + + public String getTableIsoNodes() { + return getProperty("tbl.isoNodes"); + } + + public String getTableIsoNodesAnnotations() { + return getProperty("tbl.isoNodesAnnotations"); + } + + public String getVersion() { + return getProperty("version"); + } + public boolean isIncoming() { return (getDirection() == Direction.INCOMING); } @@ -104,10 +178,10 @@ public class ConfigWeb extends Config { protected void appendPropertiesFromStream(final InputStream inputStream) { super.appendPropertiesFromStream(inputStream); - destinationEdgeTableEntry = getTableEntry(getProperty("tbl.isoLinks"), getProperty("idx.isoLinks"), TableType.EDGE); - destinationAreaBufferTableEntry = getTableEntry(getProperty("tbl.isoAreaBuffer"), getProperty("idx.isoAreaBuffer"), TableType.COVERAGE); - destinationVertexAnnotatedTableEntry = getTableEntry(getProperty("tbl.isoNodesAnnotations")); - destinationVertexTableEntry = getTableEntry(getProperty("tbl.isoNodes"), getProperty("idx.isoNodes"), TableType.VERTEX); + destinationEdgeTableEntry = getTableEntry(getTableIsoLinks(), getIndexIsoLinks(), TableType.EDGE); + destinationAreaBufferTableEntry = getTableEntry(getTableIsoAreaBuffer(), getIndexIsoAreaBuffer(), TableType.COVERAGE); + destinationVertexAnnotatedTableEntry = getTableEntry(getTableIsoNodesAnnotations()); + destinationVertexTableEntry = getTableEntry(getTableIsoNodes(), getIndexIsoNodes(), TableType.VERTEX); } // Private methods diff --git a/src/main/java/it/unibz/inf/isoga/web/ConfigContainer.java b/src/main/java/it/unibz/inf/isoga/web/ConfigContainer.java index 3bc34c176a2c37f94889ca3d6e4171cf950fc977..daacbb8e1eeac630e70ef82d915c8c07f96e59ef 100644 --- a/src/main/java/it/unibz/inf/isoga/web/ConfigContainer.java +++ b/src/main/java/it/unibz/inf/isoga/web/ConfigContainer.java @@ -80,9 +80,7 @@ public final class ConfigContainer { return clientDatasets.get(clientId).values(); } - public Collection<ConfigDataset> getDatasetTemplates() { - return datasetTemplates; - } + // Setter methods public void setClientConfig(final String clientId, final ConfigWeb config) { clientConfigMap.put(clientId, config); @@ -96,6 +94,17 @@ public final class ConfigContainer { clientDatasets.get(clientId).put(datasetConfig.getDataset(), datasetConfig); } + // Public methods + + public Collection<ConfigDataset> initClient(final String clientId) { + final Collection<ConfigDataset> createConfigs = new ArrayList<ConfigDataset>(datasetTemplates.size()); + for (final ConfigDataset templateConfig : datasetTemplates) { + setClientDSetConfig(clientId, templateConfig.createFromTemplate(clientId)); + } + + return createConfigs; + } + // Private methods private void initDatasetTemplates(final Collection<String> dataSets) { @@ -118,19 +127,11 @@ public final class ConfigContainer { } final ConfigWeb config = new ConfigWeb(dataSet); - final String areaBufferTable = config.getProperty("tbl.isoAreaBuffer"); - final String arrivalTime = config.getProperty("client.tArrival"); - final String[] poiProperty = config.getProperty("client.poi").split(","); - final String ws = config.getProperty("rendering.server.rest.workspace"); - final double lower1 = Double.parseDouble(config.getProperty("sql.spatial.dim1.lower")); - final double lower2 = Double.parseDouble(config.getProperty("sql.spatial.dim2.lower")); - final double upper1 = Double.parseDouble(config.getProperty("sql.spatial.dim1.upper")); - final double upper2 = Double.parseDouble(config.getProperty("sql.spatial.dim2.upper")); - - final Point lowerCorner = new Point(lower1, lower2); - final Point upperCorner = new Point(upper1, upper2); - final BBox serverBBox = new BBox(lowerCorner, upperCorner); - + final String areaBufferTable = config.getTableIsoAreaBuffer(); + final String arrivalTime = config.getClientArrivalTime(); + final Point clientPOI = config.getClientPOI(); + final String ws = config.getRenderServerWorkspace(); + final BBox serverBBox = config.getServerBBox(); final Calendar targetTime = Calendar.getInstance(); try { DateFormat dateFormatter = new SimpleDateFormat(FORMAT_DATE); @@ -140,8 +141,8 @@ public final class ConfigContainer { } final IsogaDatabase db = new IsogaDatabase(config); - final BBox clientBBox = new BBox(db.transform(lowerCorner), db.transform(upperCorner)); - final Point queryPoint = db.transform(new Point(Double.valueOf(poiProperty[0]), Double.valueOf(poiProperty[1]))); + final BBox clientBBox = new BBox(db.transform(serverBBox.getLowerCorner()), db.transform(serverBBox.getUpperCorner())); + final Point queryPoint = db.transform(clientPOI); final ConfigDataset dSetConfig = new ConfigDataset.Builder(dataSet) .serverMBR(serverBBox) diff --git a/src/main/java/it/unibz/inf/isoga/web/GeoserverHelper.java b/src/main/java/it/unibz/inf/isoga/web/GeoserverHelper.java index 4166c41cfc4d5e03f4dae334438e7defa2bfa332..076bfc0fafdb5854638515cc4a2c5b1c1cdefec9 100644 --- a/src/main/java/it/unibz/inf/isoga/web/GeoserverHelper.java +++ b/src/main/java/it/unibz/inf/isoga/web/GeoserverHelper.java @@ -40,13 +40,13 @@ class GeoserverHelper extends Object { final GeoServerRESTReader reader = config.getGeoServerReader(); final GeoServerRESTStoreManager storer = config.getGeoServerStoreManager(); - final String ws = config.getProperty("rendering.server.rest.workspace"); + final String ws = config.getRenderServerWorkspace(); final List<String> wsNames = reader.getWorkspaceNames(); if (!wsNames.contains(ws)) { publisher.createWorkspace(ws); } - final String ds = config.getProperty("rendering.server.rest.datastore"); + final String ds = config.getRenderServerDatastore(); final RESTDataStore restDs = reader.getDatastore(ws, ds); if (restDs == null) { final GSPostGISDatastoreEncoder encoder = new GSPostGISDatastoreEncoder(ds); @@ -112,8 +112,7 @@ class GeoserverHelper extends Object { private void removeLayers() { final GeoServerRESTPublisher publisher = config.getGeoServerPublisher(); final GeoServerRESTReader reader = config.getGeoServerReader(); - - final String ws = config.getProperty("rendering.server.rest.workspace"); + final String ws = config.getRenderServerWorkspace(); final RESTLayerList allLayers = reader.getLayers(); if (allLayers != null) { diff --git a/src/main/java/it/unibz/inf/isoga/web/JsonWebsocket.java b/src/main/java/it/unibz/inf/isoga/web/JsonWebsocket.java index 47df952d8536d22230250598f092d0f17e4638c3..c0fa8a73ff22586604b6a5ecf47c23da3a2046e0 100644 --- a/src/main/java/it/unibz/inf/isoga/web/JsonWebsocket.java +++ b/src/main/java/it/unibz/inf/isoga/web/JsonWebsocket.java @@ -100,7 +100,7 @@ public class JsonWebsocket { final ConfigContainer configContainer = ConfigContainer.getInstance(); final ConfigWeb globalConfig = configContainer.getGlobalConfig(); final Connection connection = globalConfig.getConnection(); - final String ws = globalConfig.getProperty("rendering.server.rest.workspace"); + final String ws = globalConfig.getRenderServerWorkspace(); final GeoServerRESTPublisher publisher = globalConfig.getGeoServerPublisher(); final Collection<ConfigDataset> allClientDatasetConfigs = configContainer.getClientDatasetConfigList(clientId);