From b2aedb661807f1b3667f3ffad52d5dda48d43a54 Mon Sep 17 00:00:00 2001 From: Nikolaus Krismer <niko@krismer.de> Date: Thu, 20 Feb 2014 18:37:31 +0100 Subject: [PATCH] binding configuration class to database class (config is bound to database) (configWeb is bound to databaseIsoga) --- .../inf/isochrone/algorithm/Isochrone.java | 3 ++- .../inf/isochrone/algorithm/MDijkstra.java | 10 ++++++---- .../unibz/inf/isochrone/algorithm/MineX.java | 12 +++++++----- .../unibz/inf/isochrone/algorithm/MrneX.java | 12 ++++++++---- .../it/unibz/inf/isochrone/db/Database.java | 13 ++++++------- .../it/unibz/inf/isochrone/util/Config.java | 12 ++++-------- .../it/unibz/inf/isoga/db/IsogaDatabase.java | 18 +++++++++--------- .../it/unibz/inf/isoga/util/ConfigWeb.java | 4 ++++ .../unibz/inf/isochrone/db/DatabaseTest.java | 9 ++++++--- 9 files changed, 52 insertions(+), 41 deletions(-) diff --git a/src/main/java/it/unibz/inf/isochrone/algorithm/Isochrone.java b/src/main/java/it/unibz/inf/isochrone/algorithm/Isochrone.java index b726043e..c895dc9a 100644 --- a/src/main/java/it/unibz/inf/isochrone/algorithm/Isochrone.java +++ b/src/main/java/it/unibz/inf/isochrone/algorithm/Isochrone.java @@ -6,6 +6,7 @@ import it.unibz.inf.isochrone.network.Location; import it.unibz.inf.isochrone.network.MemoryOutput; import it.unibz.inf.isochrone.network.Node; import it.unibz.inf.isochrone.network.Output; +import it.unibz.inf.isochrone.util.Config; import it.unibz.inf.isochrone.util.EnumContainer.Direction; import it.unibz.inf.isochrone.util.EnumContainer.Mode; import it.unibz.inf.isochrone.util.Query; @@ -32,7 +33,7 @@ public abstract class Isochrone { private final PriorityQueue<Node> queue; private Set<Integer> codes; - protected Database db; + protected Database<Config> db; /** * Instantiates a new isochrone object. diff --git a/src/main/java/it/unibz/inf/isochrone/algorithm/MDijkstra.java b/src/main/java/it/unibz/inf/isochrone/algorithm/MDijkstra.java index e2987fe1..0182255e 100644 --- a/src/main/java/it/unibz/inf/isochrone/algorithm/MDijkstra.java +++ b/src/main/java/it/unibz/inf/isochrone/algorithm/MDijkstra.java @@ -3,6 +3,7 @@ package it.unibz.inf.isochrone.algorithm; import it.unibz.inf.isochrone.db.Database; import it.unibz.inf.isochrone.network.Link; import it.unibz.inf.isochrone.network.Node; +import it.unibz.inf.isochrone.util.Config; import it.unibz.inf.isochrone.util.EnumContainer.Mode; import it.unibz.inf.isochrone.util.Query; @@ -11,6 +12,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; /** * The Dijkstra isochrone algorithm. Loads all data at the beginning, @@ -19,16 +21,16 @@ import java.util.List; * that is in the database. */ public class MDijkstra extends Isochrone { - - private HashMap<Integer, Node> nodes; - private LinkedHashMap<Integer, Link> links; + private Map<Integer, Node> nodes; + private Map<Integer, Link> links; public MDijkstra(final Query query) { super(query); nodes = new HashMap<Integer, Node>(); links = new LinkedHashMap<Integer, Link>(); - db = new Database(query.getDs(), query.getMode(), query.getDir()); + final Config config = new Config(query.getDs()); + db = new Database<Config>(config, query.getMode(), query.getDir()); db.readNetwork(nodes, links); initDateCodes(); } diff --git a/src/main/java/it/unibz/inf/isochrone/algorithm/MineX.java b/src/main/java/it/unibz/inf/isochrone/algorithm/MineX.java index cd17a135..036e016f 100644 --- a/src/main/java/it/unibz/inf/isochrone/algorithm/MineX.java +++ b/src/main/java/it/unibz/inf/isochrone/algorithm/MineX.java @@ -3,26 +3,28 @@ package it.unibz.inf.isochrone.algorithm; import it.unibz.inf.isochrone.db.Database; import it.unibz.inf.isochrone.network.Link; import it.unibz.inf.isochrone.network.Node; -import it.unibz.inf.isochrone.util.Query; +import it.unibz.inf.isochrone.util.Config; import it.unibz.inf.isochrone.util.EnumContainer.Mode; +import it.unibz.inf.isochrone.util.Query; import java.util.Collection; import java.util.HashMap; import java.util.List; +import java.util.Map; /** * The MineX isochrone algorithm. Loads the nodes and links from the * database as soon as they are needed. */ public class MineX extends Isochrone { - - private final HashMap<Integer, Node> nodes; + private final Map<Integer, Node> nodes; public MineX(final Query query) { super(query); - nodes = new HashMap<Integer, Node>(); - db = new Database(query.getDs(), query.getMode(), query.getDir()); + + final Config config = new Config(query.getDs()); + db = new Database<Config>(config, query.getMode(), query.getDir()); initDateCodes(); } diff --git a/src/main/java/it/unibz/inf/isochrone/algorithm/MrneX.java b/src/main/java/it/unibz/inf/isochrone/algorithm/MrneX.java index ae06c1be..40efd5ec 100644 --- a/src/main/java/it/unibz/inf/isochrone/algorithm/MrneX.java +++ b/src/main/java/it/unibz/inf/isochrone/algorithm/MrneX.java @@ -3,6 +3,7 @@ package it.unibz.inf.isochrone.algorithm; import it.unibz.inf.isochrone.db.Database; import it.unibz.inf.isochrone.network.Link; import it.unibz.inf.isochrone.network.Node; +import it.unibz.inf.isochrone.util.Config; import it.unibz.inf.isochrone.util.DistanceAlgorithm; import it.unibz.inf.isochrone.util.EnumContainer.Mode; import it.unibz.inf.isochrone.util.Query; @@ -12,16 +13,17 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; +import java.util.Map; /** * The MrneX isochrone algorithm. Loads the data in circles * surrounding the currently explored node. */ public class MrneX extends Isochrone { - private HashMap<Integer, Node> nodes; - private HashMap<Integer, Node> loadedIERNodes = new HashMap<Integer, Node>(); + private Map<Integer, Node> nodes; + private Map<Integer, Node> loadedIERNodes = new HashMap<Integer, Node>(); - private final HashMap<Integer, List<Link>> adjList = new HashMap<Integer, List<Link>>(); + private final Map<Integer, List<Link>> adjList = new HashMap<Integer, List<Link>>(); private final int maxDuration, maxMemorySize; private final double walkingSpeed; @@ -33,7 +35,9 @@ public class MrneX extends Isochrone { public MrneX(final Query query, final int maxMemorySize) { super(query); - db = new Database(query.getDs(), query.getMode(), query.getDir()); + + final Config config = new Config(query.getDs()); + db = new Database<Config>(config, query.getMode(), query.getDir()); initDateCodes(); nodes = new HashMap<Integer, Node>(); 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 363088bb..b7fad147 100644 --- a/src/main/java/it/unibz/inf/isochrone/db/Database.java +++ b/src/main/java/it/unibz/inf/isochrone/db/Database.java @@ -3,7 +3,6 @@ package it.unibz.inf.isochrone.db; import it.unibz.inf.isochrone.network.Link; import it.unibz.inf.isochrone.network.Node; 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.Mode; import it.unibz.inf.isochrone.util.Point; @@ -42,7 +41,7 @@ import org.apache.commons.dbutils.DbUtils; * @author <a href="mailto:markus.innerebner@inf.unibz.it">Markus Innerebner</a>. * @version 2.2 */ -public class Database { +public class Database<T extends Config> { protected static final byte NW_MODE_CONTINUOUS = 0; protected static final byte NW_MODE_DISCRETE = 1; @@ -62,17 +61,17 @@ public class Database { private final String queryGetLinksInRange; private final String queryGetRange; private final String queryLoadLinksFromIER; - protected final Config config; + protected final T config; protected Mode mode; protected boolean isIncoming; protected Connection connection; - public Database(final Dataset dataset, final Mode mode, final Direction direction) { - this(new Config(dataset), direction); + public Database(final T config, final Mode mode, final Direction direction) { + this(config, direction); setMode(mode); } - protected Database(final Config config, final Direction direction) { + protected Database(final T config, final Direction direction) { this.config = config; this.isIncoming = (direction == Direction.INCOMING); @@ -96,7 +95,7 @@ public class Database { queryGetDateCodes = "SELECT DISTINCT SERVICE_ID " + " FROM " - + config.getDaymarkerTable() + + config.getTableDaymarker() + " WHERE (((MONDAY::int::bit || TUESDAY::int::bit || WEDNESDAY::int::bit || THURSDAY::int::bit" + " || FRIDAY::int::bit || SATURDAY::int::bit || SUNDAY::int::bit) & ?::bit(7))::int) > 0" + " AND START_DATE <= ? AND END_DATE >= ? " 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 bd6922a4..cbf79387 100644 --- a/src/main/java/it/unibz/inf/isochrone/util/Config.java +++ b/src/main/java/it/unibz/inf/isochrone/util/Config.java @@ -77,10 +77,6 @@ public class Config { // Public methods - public int getClientSRID() { - return Integer.parseInt(getProperty("cfg.clientSRID")); - } - public Connection getConnection() { try { return factory.getConnection(); @@ -106,10 +102,6 @@ public class Config { return resultList; } - public String getDaymarkerTable() { - return getProperty("tbl.dateCodes"); - } - public String getDBName() { return getProperty("org.postgresql.database"); } @@ -138,6 +130,10 @@ public class Config { return Integer.parseInt(getProperty("sql.spatial.srid")); } + public String getTableDaymarker() { + return getProperty("tbl.dateCodes"); + } + public String getTableEdges() { return getProperty("tbl.links"); } 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 e300c73e..968cbeea 100644 --- a/src/main/java/it/unibz/inf/isoga/db/IsogaDatabase.java +++ b/src/main/java/it/unibz/inf/isoga/db/IsogaDatabase.java @@ -42,7 +42,7 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; * interface. (Mostly inserting vertices and links into the tables * used for the GeoServer) */ -public class IsogaDatabase extends Database { +public class IsogaDatabase extends Database<ConfigWeb> { private final String queryGetIsoEdges; private final String queryStoreLinks; private final String queryStorePartialLinks; @@ -165,7 +165,7 @@ public class IsogaDatabase extends Database { } final IsoEdge edge = new IsoEdge(edgeId, sourceId, targetId, length, adjNodeDistance, geometry); - if (((ConfigWeb) config).isIncoming()) { + if (config.isIncoming()) { edge.setStartOffset(adjNodeOffset); edge.setEndOffset(length); edge.setRemainingDistance(adjNodeOffset > 0 ? 0 : dMax - edge.getAdjNodeDistance() * speed); @@ -210,7 +210,7 @@ public class IsogaDatabase extends Database { geometryString = polygon.getTypeString() + polygon.getValue(); final StringBuilder b = new StringBuilder(); - b.append("INSERT INTO ").append(((ConfigWeb) config).getDestinationAreaBufferTableEntry().getTableName()); + b.append("INSERT INTO ").append(config.getDestinationAreaBufferTableEntry().getTableName()); b.append("(\"ID\",\"GEOMETRY\") VALUES(?,ST_MULTI(ST_Buffer(ST_MakeValid(ST_GeomFromText(?," + config.getServerSRID() + ")),?,'endcap=round join=round')))"); PreparedStatement statement = null; try { @@ -233,8 +233,8 @@ public class IsogaDatabase extends Database { final List<Integer> edges = new ArrayList<Integer>(); final StringBuilder b1 = new StringBuilder(); b1.append("SELECT L.\"ID\" FROM "); - b1.append(((ConfigWeb) config).getDestinationEdgeTableEntry().getTableName()).append(" L, "); - b1.append(((ConfigWeb) config).getDestinationAreaBufferTableEntry().getTableName()).append(" A "); + b1.append(config.getDestinationEdgeTableEntry().getTableName()).append(" L, "); + b1.append(config.getDestinationAreaBufferTableEntry().getTableName()).append(" A "); b1.append("WHERE A.\"ID\"=? AND ST_Within(L.\"GEOMETRY\",A.\"GEOMETRY\")=TRUE"); PreparedStatement statement = null; @@ -260,8 +260,8 @@ 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(((ConfigWeb) config).getTableBuilding()).append(" B, "); - b.append(((ConfigWeb) config).getDestinationAreaBufferTableEntry().getTableName()).append(" A "); + b.append(config.getTableBuilding()).append(" B, "); + b.append(config.getDestinationAreaBufferTableEntry().getTableName()).append(" A "); b.append("WHERE ST_Within(B.GEOMETRY, A.GEOMETRY)='TRUE') I"); PreparedStatement statement = null; @@ -283,7 +283,7 @@ public class IsogaDatabase extends Database { } public int totalInhabitants() { - final String query = "SELECT SUM(INHABITANTS) FROM " + ((ConfigWeb) config).getTableBuilding(); + final String query = "SELECT SUM(INHABITANTS) FROM " + config.getTableBuilding(); int totalInhabitants = 0; PreparedStatement statement = null; @@ -382,7 +382,7 @@ public class IsogaDatabase extends Database { statement.setInt(2, config.getClientSRID()); // CHECKSTYLE:OFF MagicNumber - final int tolerance = ((ConfigWeb) config).getDistanceTolerance(); + final int tolerance = 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/util/ConfigWeb.java b/src/main/java/it/unibz/inf/isoga/util/ConfigWeb.java index a1080fe0..760c75aa 100644 --- a/src/main/java/it/unibz/inf/isoga/util/ConfigWeb.java +++ b/src/main/java/it/unibz/inf/isoga/util/ConfigWeb.java @@ -73,6 +73,10 @@ public class ConfigWeb extends Config { return new Point(Double.valueOf(poiProperty[0]), Double.valueOf(poiProperty[1])); } + public int getClientSRID() { + return Integer.parseInt(getProperty("cfg.clientSRID")); + } + public TableEntry getDestinationAreaBufferTableEntry() { return destinationAreaBufferTableEntry; } diff --git a/src/test/java/it/unibz/inf/isochrone/db/DatabaseTest.java b/src/test/java/it/unibz/inf/isochrone/db/DatabaseTest.java index abd86205..60471553 100644 --- a/src/test/java/it/unibz/inf/isochrone/db/DatabaseTest.java +++ b/src/test/java/it/unibz/inf/isochrone/db/DatabaseTest.java @@ -2,6 +2,7 @@ package it.unibz.inf.isochrone.db; import it.unibz.inf.isochrone.network.Link; import it.unibz.inf.isochrone.network.Node; +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.Mode; @@ -42,7 +43,8 @@ public class DatabaseTest { @Test public void testCreateDatabaseObject() { - final Database db = new Database(Dataset.BZ, Mode.MULTIMODAL, Direction.INCOMING); + final Config bzConfig = new Config(Dataset.BZ); + final Database<Config> db = new Database<Config>(bzConfig, Mode.MULTIMODAL, Direction.INCOMING); Assert.assertNotNull(db, "Database object could not be created!"); } @@ -71,8 +73,9 @@ public class DatabaseTest { // Private methods - private Database initDb() { - final Database db = new Database(Dataset.BZ, Mode.MULTIMODAL, Direction.INCOMING); + private Database<Config> initDb() { + final Config config = new Config(Dataset.BZ); + final Database<Config> db = new Database<Config>(config, Mode.MULTIMODAL, Direction.INCOMING); db.readNetwork(nodes, links); return db; -- GitLab