From 0b6b0d2b8ed522e553f51314da237794512c6d37 Mon Sep 17 00:00:00 2001 From: Nikolaus Krismer <niko@krismer.de> Date: Wed, 5 Mar 2014 15:58:46 +0100 Subject: [PATCH] reworked enums and enumContainer reworked BBoxOutput added todo --- .../inf/isochrone/algorithm/Isochrone.java | 10 +- .../inf/isochrone/network/MemoryOutput.java | 37 ++++-- .../unibz/inf/isochrone/network/Output.java | 4 +- .../inf/isochrone/util/EnumContainer.java | 26 ++++- .../inf/isoga/coverage/CoverageBuilder.java | 7 +- .../java/it/unibz/inf/isoga/db/DbUtility.java | 8 -- .../it/unibz/inf/isoga/db/TableEntry.java | 2 +- .../unibz/inf/isoga/network/BBoxOutput.java | 110 ++++++++++++++++++ .../inf/isoga/network/MemoryBBoxOutput.java | 73 ------------ .../inf/isoga/service/AbstractService.java | 2 + .../inf/isoga/service/ServiceIsochrone.java | 52 +++++---- .../isoga/service/dto/RequestIsochrone.java | 65 +++++------ .../webapp/js/service/serviceIsochrone.js | 2 +- 13 files changed, 235 insertions(+), 163 deletions(-) create mode 100644 src/main/java/it/unibz/inf/isoga/network/BBoxOutput.java delete mode 100644 src/main/java/it/unibz/inf/isoga/network/MemoryBBoxOutput.java 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 42ae3d5a..29e502ab 100644 --- a/src/main/java/it/unibz/inf/isochrone/algorithm/Isochrone.java +++ b/src/main/java/it/unibz/inf/isochrone/algorithm/Isochrone.java @@ -88,7 +88,7 @@ public abstract class Isochrone { if (locationOffset > 0 && locationOffset < link.getLength()) { link.setStartOffset(Math.max(0, locationOffset - query.getDuration() * query.getWalkingSpeed())); link.setEndOffset(locationOffset); - output.output(link); + output.addLink(link); } } else { node = getNode(link.getEndNode()); @@ -96,7 +96,7 @@ public abstract class Isochrone { if (locationOffset > 0 && locationOffset < link.getLength()) { link.setStartOffset(locationOffset); link.setEndOffset(Math.min(link.getLength(), Math.abs(link.getLength() - locationOffset - query.getDuration() * query.getWalkingSpeed()))); - output.output(link); + output.addLink(link); } } @@ -130,13 +130,13 @@ public abstract class Isochrone { Node node = null; while ((node = queue.poll()) != null) { final Collection<Link> adjacents = calcAdjLinks(node.getID()); - output.outputNode(node); + output.addNode(node); node.close(); for (final Link link : adjacents) { if (link.isContinuous()) { updateQueue(expandContinuousLink(node, link)); if (Math.abs(link.getStartOffset() - Double.MIN_VALUE) < COMPARE_PRECISION) { - output.output(link); + output.addLink(link); } } else { updateQueue(expandDiscreteLink(node, link)); @@ -149,7 +149,7 @@ public abstract class Isochrone { } for (final Node n : getNodes()) { - output.outputNode(n); + output.addNode(n); } return output; diff --git a/src/main/java/it/unibz/inf/isochrone/network/MemoryOutput.java b/src/main/java/it/unibz/inf/isochrone/network/MemoryOutput.java index 3e3ae420..523e8210 100644 --- a/src/main/java/it/unibz/inf/isochrone/network/MemoryOutput.java +++ b/src/main/java/it/unibz/inf/isochrone/network/MemoryOutput.java @@ -1,25 +1,44 @@ package it.unibz.inf.isochrone.network; import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; /** * A sample output class, which simply stores all nodes and returns if needed. - * Will be maily used for tests. + * This is mainly used for testing purposes. */ public class MemoryOutput implements Output { - protected HashMap<Integer, Link> links = new HashMap<Integer, Link>(); + private final Map<Integer, Link> links; + private final Set<Node> nodes; - @Override - public void output(final Link link) { - links.put(link.getID(), link); + // Constructor + + public MemoryOutput() { + links = new HashMap<Integer, Link>(); + nodes = new HashSet<Node>(); + } + + // Getter + + public Map<Integer, Link> getLinks() { + return links; } + public Set<Node> getNodes() { + return nodes; + } + + // Public methods + @Override - public void outputNode(final Node node) { - // Do nothing, we don't care about the nodes in the memorynetwork + public void addLink(final Link link) { + links.put(link.getID(), link); } - public HashMap<Integer, Link> getLinks() { - return links; + @Override + public void addNode(final Node node) { + nodes.add(node); } } diff --git a/src/main/java/it/unibz/inf/isochrone/network/Output.java b/src/main/java/it/unibz/inf/isochrone/network/Output.java index 32605416..84104741 100644 --- a/src/main/java/it/unibz/inf/isochrone/network/Output.java +++ b/src/main/java/it/unibz/inf/isochrone/network/Output.java @@ -10,13 +10,13 @@ public interface Output { * * @param link The link that should be stored */ - void output(Link link); + void addLink(Link link); /** * Stores a node which belongs to the network. * * @param node The node that should be stored */ - void outputNode(Node node); + void addNode(Node node); } diff --git a/src/main/java/it/unibz/inf/isochrone/util/EnumContainer.java b/src/main/java/it/unibz/inf/isochrone/util/EnumContainer.java index ac9d4e01..8e4ebe8d 100644 --- a/src/main/java/it/unibz/inf/isochrone/util/EnumContainer.java +++ b/src/main/java/it/unibz/inf/isochrone/util/EnumContainer.java @@ -3,7 +3,16 @@ package it.unibz.inf.isochrone.util; /** * Stores all the enums used in the project in one place. */ -public class EnumContainer { +public final class EnumContainer { + + private EnumContainer() { } + + /** + * Lists of all algorithms available. + */ + public enum Algorithm { + MDIJKSTRA, MINEX, MRNEX + } /** * Lists of all datasets available in the database. @@ -20,6 +29,10 @@ public class EnumContainer { UNIMODAL, MULTIMODAL } + public enum CoverageMode { + BUFFER, SURFACE + } + /** * Direction in which the isochrone should be computed. */ @@ -63,4 +76,15 @@ public class EnumContainer { public enum QueryType { SUM, COUNT, SELECT, INVALID } + + public static <T extends Enum<T>> T getByName(final Class<T> enumType, final String str) { + T result = null; + try { + result = Enum.valueOf(enumType, str.toUpperCase()); + } catch (IllegalArgumentException e) { + result = null; + } + + return result; + } } diff --git a/src/main/java/it/unibz/inf/isoga/coverage/CoverageBuilder.java b/src/main/java/it/unibz/inf/isoga/coverage/CoverageBuilder.java index d002d11c..24264f67 100644 --- a/src/main/java/it/unibz/inf/isoga/coverage/CoverageBuilder.java +++ b/src/main/java/it/unibz/inf/isoga/coverage/CoverageBuilder.java @@ -23,16 +23,17 @@ public class CoverageBuilder { private final ConfigClient config; private final Mode mode; private final DatabaseWeb db; - private final Set<Integer> exploredEdges = new HashSet<Integer>(); + private final Set<Integer> exploredEdges; private long timeBufferQuery; private final Direction direction; - public CoverageBuilder(final ConfigClient config, final Mode mode, final Direction direction) { + public CoverageBuilder(final DatabaseWeb db, final ConfigClient config, final Mode mode, final Direction direction) { this.config = config; this.mode = mode; this.direction = direction; + this.db = db; - db = new DatabaseWeb(config, direction); + exploredEdges = new HashSet<Integer>(); } /** 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 f6f06a34..166aae8c 100644 --- a/src/main/java/it/unibz/inf/isoga/db/DbUtility.java +++ b/src/main/java/it/unibz/inf/isoga/db/DbUtility.java @@ -54,14 +54,6 @@ public final class DbUtility { executeStatement(connection, "DROP INDEX IF EXISTS " + indexName); } - public static void controlIndex(final Connection connection, final TableEntry tableEntry, final boolean disabled) { - if (disabled) { - dropIndex(connection, tableEntry.getIndexName()); - } else { - createSpatialIndex(connection, tableEntry); - } - } - public static void createTargetEdgeTable(final Connection connection, final String edgeTableName) { executeStatement(connection, "CREATE TABLE " + edgeTableName + " (\"ID\" integer NOT NULL, \"SOURCE\" integer, \"TARGET\" integer, \"OFFSET\" double precision, \"LENGTH\" double precision)"); diff --git a/src/main/java/it/unibz/inf/isoga/db/TableEntry.java b/src/main/java/it/unibz/inf/isoga/db/TableEntry.java index eaa57f89..95497ee5 100644 --- a/src/main/java/it/unibz/inf/isoga/db/TableEntry.java +++ b/src/main/java/it/unibz/inf/isoga/db/TableEntry.java @@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; /** - * Describes a database table for the isoga web interface. + * Describes a database table for the web interface. */ public class TableEntry { private String indexName; diff --git a/src/main/java/it/unibz/inf/isoga/network/BBoxOutput.java b/src/main/java/it/unibz/inf/isoga/network/BBoxOutput.java new file mode 100644 index 00000000..699913cf --- /dev/null +++ b/src/main/java/it/unibz/inf/isoga/network/BBoxOutput.java @@ -0,0 +1,110 @@ +package it.unibz.inf.isoga.network; + +import it.unibz.inf.isochrone.config.ConfigDataset; +import it.unibz.inf.isochrone.config.ConfigIsochrone; +import it.unibz.inf.isochrone.network.Link; +import it.unibz.inf.isochrone.network.MemoryOutput; +import it.unibz.inf.isochrone.network.Node; +import it.unibz.inf.isochrone.util.EnumContainer.Direction; +import it.unibz.inf.isoga.db.DatabaseWeb; +import it.unibz.inf.isoga.db.DbUtility; +import it.unibz.inf.isoga.db.TableEntry; +import it.unibz.inf.isoga.geometry.BBox; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +import org.apache.commons.dbutils.DbUtils; + +/** + * An output which stores links and vertices to the database for calculating the bounding box. + */ +public class BBoxOutput extends MemoryOutput { + private BBox boundingBox; + private boolean isSaved; + private final String query; + private final int serverSRID; + private final TableEntry edgeTableEntry; + private final TableEntry vertexTableEntry; + + // Constructors + + public BBoxOutput(final ConfigDataset config) { + super(); + + isSaved = false; + edgeTableEntry = config.getEdgeTableEntry(); + vertexTableEntry = config.getVertexTableEntry(); + serverSRID = config.getServerSRID(); + + query = "SELECT ST_XMin(mbr.geo) min_x, ST_yMin(mbr.geo) min_y, ST_XMax(mbr.geo) max_x, ST_yMax(mbr.geo) max_y FROM " + + "(SELECT st_transform(ST_SetSRID(st_extent(\"GEOMETRY\"),?),?) GEO FROM " + edgeTableEntry.getTableName() + ") MBR"; + } + + // Public methods + + @Override + public void addLink(final Link link) { + boundingBox = null; + isSaved = false; + + super.addLink(link); + } + + @Override + public void addNode(final Node node) { + boundingBox = null; + isSaved = false; + + super.addNode(node); + } + + public BBox getBoundingBox() { + if (!isSaved) { + throw new IllegalStateException("Can not calculate bounding box, since results have not been saved to database"); + } + if (boundingBox == null) { + calculateBoundingBox(); + } + + return boundingBox; + } + + private void calculateBoundingBox() { + final ConfigIsochrone configIso = ConfigIsochrone.getInstance(); + final Connection connection = configIso.getConnection(); + + PreparedStatement statement = null; + ResultSet rSet = null; + try { + statement = connection.prepareStatement(query); + statement.setInt(1, serverSRID); + statement.setInt(2, configIso.getClientSRID()); + rSet = statement.executeQuery(); + if (rSet.next()) { + long minX = Math.round(rSet.getDouble("min_x")); + long minY = Math.round(rSet.getDouble("min_y")); + long maxX = Math.round(rSet.getDouble("max_x")); + long maxY = Math.round(rSet.getDouble("max_y")); + + boundingBox = new BBox(minX, minY, maxX, maxY); + } + } catch (final SQLException e) { + boundingBox = null; + } finally { + DbUtils.closeQuietly(rSet); + DbUtils.closeQuietly(statement); + } + } + + public void saveInDatabase(final DatabaseWeb db, final Direction direction) { + db.storeLinks(getLinks().values(), direction); + db.storeVertices(getNodes()); + DbUtility.createSpatialIndex(db.getConnection(), vertexTableEntry); + db.updateVertexTable(); + + isSaved = true; + } +} diff --git a/src/main/java/it/unibz/inf/isoga/network/MemoryBBoxOutput.java b/src/main/java/it/unibz/inf/isoga/network/MemoryBBoxOutput.java deleted file mode 100644 index a7dd05d4..00000000 --- a/src/main/java/it/unibz/inf/isoga/network/MemoryBBoxOutput.java +++ /dev/null @@ -1,73 +0,0 @@ -package it.unibz.inf.isoga.network; - -import it.unibz.inf.isochrone.config.ConfigDataset; -import it.unibz.inf.isochrone.config.ConfigIsochrone; -import it.unibz.inf.isochrone.network.MemoryOutput; -import it.unibz.inf.isochrone.network.Node; -import it.unibz.inf.isochrone.util.EnumContainer.Direction; -import it.unibz.inf.isoga.db.DatabaseWeb; -import it.unibz.inf.isoga.geometry.BBox; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.HashSet; -import java.util.Set; - -import org.apache.commons.dbutils.DbUtils; - -/** - * An output which outputs the Links and Vertices to the database for - * calculating the bounding box. - */ -public class MemoryBBoxOutput extends MemoryOutput { - private final Set<Node> nodes = new HashSet<Node>(); - - public void storeAll(final DatabaseWeb db, final Direction direction) { - db.storeLinks(links.values(), direction); - db.storeVertices(nodes); - } - - public BBox getBoundingBox(final ConfigDataset config) { - final String q = "select ST_XMin(mbr.geo) min_x, ST_yMin(mbr.geo) min_y, ST_XMax(mbr.geo) max_x, ST_yMax(mbr.geo) max_y from " - + "(SELECT st_transform(ST_SetSRID(st_extent(\"GEOMETRY\"),?),?) GEO FROM " - + config.getEdgeTableEntry().getTableName() + ") mbr"; - - long minX = Long.MAX_VALUE; - long minY = minX; - long maxX = Long.MIN_VALUE; - long maxY = maxX; - - final ConfigIsochrone configIso = ConfigIsochrone.getInstance(); - final Connection connection = configIso.getConnection(); - - PreparedStatement statement = null; - ResultSet rSet = null; - try { - statement = connection.prepareStatement(q); - statement.setInt(1, config.getServerSRID()); - statement.setInt(2, configIso.getClientSRID()); - rSet = statement.executeQuery(); - if (rSet.next()) { - minX = Math.round(rSet.getDouble("min_x")); - minY = Math.round(rSet.getDouble("min_y")); - maxX = Math.round(rSet.getDouble("max_x")); - maxY = Math.round(rSet.getDouble("max_y")); - } - return new BBox(minX, minY, maxX, maxY); - } catch (final SQLException e) { - e.printStackTrace(); - } finally { - DbUtils.closeQuietly(rSet); - DbUtils.closeQuietly(statement); - } - - return null; - } - - @Override - public void outputNode(final Node node) { - nodes.add(node); - } -} 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 a1604c9b..429eb267 100644 --- a/src/main/java/it/unibz/inf/isoga/service/AbstractService.java +++ b/src/main/java/it/unibz/inf/isoga/service/AbstractService.java @@ -55,6 +55,7 @@ public abstract class AbstractService<T extends IRequest, U extends IResponse> i DbUtility.createTargetEdgeTable(connection, edgeTableEntry.getTableName()); DbUtility.insertGeometryMetadata(connection, edgeTableEntry, serverSrid); DbUtility.createSpatialIndex(connection, edgeTableEntry); + // TODO: Log database table creation final GSFeatureTypeEncoder edgeFeatureTypeEncoder = getFeatureEncoder(edgeTableEntry, serverExtend, srs); final GSLayerEncoder edgeLayerEncoder = new GSLayerEncoder(); edgeLayerEncoder.setDefaultStyle("STYLE_ISO_EDGES"); @@ -67,6 +68,7 @@ public abstract class AbstractService<T extends IRequest, U extends IResponse> i // create vertex annotation table final TableEntry annotatedTableEntry = configClient.getVertexAnnotatedTableEntry(); DbUtility.createVertexAnnotationTable(connection, annotatedTableEntry.getTableName()); + LOGGER.debug("Successfully created vertex annotation table \"" + annotatedTableEntry.getTableName() + "\""); // register vertex table final TableEntry vertexTableEntry = configClient.getVertexTableEntry(); diff --git a/src/main/java/it/unibz/inf/isoga/service/ServiceIsochrone.java b/src/main/java/it/unibz/inf/isoga/service/ServiceIsochrone.java index 4e2d704b..d969bafb 100644 --- a/src/main/java/it/unibz/inf/isoga/service/ServiceIsochrone.java +++ b/src/main/java/it/unibz/inf/isoga/service/ServiceIsochrone.java @@ -9,13 +9,16 @@ import it.unibz.inf.isochrone.algorithm.MrneX; import it.unibz.inf.isochrone.config.ConfigDataset; import it.unibz.inf.isochrone.config.ConfigIsochrone; import it.unibz.inf.isochrone.network.Location; +import it.unibz.inf.isochrone.util.EnumContainer.Algorithm; +import it.unibz.inf.isochrone.util.EnumContainer.CoverageMode; import it.unibz.inf.isochrone.util.EnumContainer.Dataset; +import it.unibz.inf.isochrone.util.EnumContainer.Direction; import it.unibz.inf.isochrone.util.Query; import it.unibz.inf.isoga.config.ConfigClient; import it.unibz.inf.isoga.coverage.CoverageBuilder; import it.unibz.inf.isoga.db.DatabaseWeb; import it.unibz.inf.isoga.db.DbUtility; -import it.unibz.inf.isoga.network.MemoryBBoxOutput; +import it.unibz.inf.isoga.network.BBoxOutput; import it.unibz.inf.isoga.network.QueryNode; import it.unibz.inf.isoga.service.dto.RequestIsochrone; import it.unibz.inf.isoga.service.dto.ResponseIsochrone; @@ -46,6 +49,7 @@ public class ServiceIsochrone extends AbstractService<RequestIsochrone, Response public ResponseIsochrone onJsonMessage(final Session session, final RequestIsochrone request) throws Exception { final long startRequestTiming = System.currentTimeMillis(); final String clientId = session.getId(); + final Direction direction = request.getDirection(); final Dataset dataset = request.getDataset(); if (dataset == null) { throw new IllegalArgumentException("Invalid dataset specified!"); @@ -61,33 +65,30 @@ public class ServiceIsochrone extends AbstractService<RequestIsochrone, Response // Timing start final long startComputationTiming = System.currentTimeMillis(); - final DatabaseWeb db = new DatabaseWeb(config, request.getMode(), request.getDirection()); + final DatabaseWeb db = new DatabaseWeb(config, request.getMode(), direction); truncateTables(config); - final Query query = new Query(request.getDirection(), request.getSpeed(), request.getDmax(), request.getDate(), true, request.getMode()); + final Query query = new Query(direction, request.getSpeed(), request.getDmax(), request.getDate(), true, request.getMode()); query.setLocations(locationsFromQueryNodes(request.getQueryNodes(), db)); - final Isochrone isochrone = getAlgorithm(config, request.getAlgorithm(), query); - final MemoryBBoxOutput output = isochrone.compute(new MemoryBBoxOutput()); + final Isochrone isochrone = getAlgorithm(request.getAlgorithm(), config, query); + final BBoxOutput output = isochrone.compute(new BBoxOutput(config)); + output.saveInDatabase(db, direction); final long timeIsochrone = System.currentTimeMillis() - startComputationTiming; - output.storeAll(db, request.getDirection()); - DbUtility.controlIndex(db.getConnection(), config.getVertexTableEntry(), false); - db.updateVertexTable(); - final ResponseIsochrone response = new ResponseIsochrone(); long startCoverageTiming = 0; if (!request.isExpiringMode()) { startCoverageTiming = System.currentTimeMillis(); - final CoverageBuilder coverage = new CoverageBuilder(config, request.getMode(), request.getDirection()); - final String coverageMode = request.getCoverageMode(); - if (coverageMode.equalsIgnoreCase("Buffer")) { + final CoverageBuilder coverage = new CoverageBuilder(db, config, request.getMode(), direction); + final CoverageMode coverageMode = request.getCoverageMode(); + if (coverageMode == CoverageMode.BUFFER) { coverage.createIsoAreaLBA(BUFFER_DISTANCE); - } else if (coverageMode.equalsIgnoreCase("Surface")) { + } else if (coverageMode == CoverageMode.SURFACE) { coverage.createIsoAreaSBA(request.getDmax(), BUFFER_DISTANCE, request.getSpeed()); } - } - response.setBoundingBox(output.getBoundingBox(config)); + final ResponseIsochrone response = new ResponseIsochrone(); + response.setBoundingBox(output.getBoundingBox()); final long currentTime = System.currentTimeMillis(); final long totalRequestTime = currentTime - startRequestTiming; @@ -101,15 +102,20 @@ public class ServiceIsochrone extends AbstractService<RequestIsochrone, Response // Private methods - public Isochrone getAlgorithm(final ConfigDataset config, final String algorithm, final Query query) throws AlgorithmException { - if (algorithm.equals("MrneX")) { - return new MrneX(config, query); - } - if (algorithm.equals("MDijkstra")) { - return new MDijkstra(config, query); + public Isochrone getAlgorithm(final Algorithm algorithm, final ConfigDataset config, final Query query) throws AlgorithmException { + final Isochrone result; + switch (algorithm) { + case MINEX: + result = new MineX(config, query); + break; + case MRNEX: + result = new MrneX(config, query); + break; + default: + result = new MDijkstra(config, query); } - return new MineX(config, query); + return result; } private Set<Location> locationsFromQueryNodes(final Collection<QueryNode> queryNodes, final DatabaseWeb db) { @@ -126,7 +132,7 @@ public class ServiceIsochrone extends AbstractService<RequestIsochrone, Response DbUtility.truncateTable(conn, config.getEdgeTableEntry().getTableName()); DbUtility.truncateTable(conn, config.getVertexTableEntry().getTableName()); - DbUtility.controlIndex(conn, config.getVertexTableEntry(), true); + DbUtility.dropIndex(conn, config.getVertexTableEntry().getIndexName()); DbUtility.truncateTable(conn, config.getVertexAnnotatedTableEntry().getTableName()); DbUtility.truncateTable(conn, config.getAreaBufferTableEntry().getTableName()); } diff --git a/src/main/java/it/unibz/inf/isoga/service/dto/RequestIsochrone.java b/src/main/java/it/unibz/inf/isoga/service/dto/RequestIsochrone.java index 869522d0..1cb3e831 100644 --- a/src/main/java/it/unibz/inf/isoga/service/dto/RequestIsochrone.java +++ b/src/main/java/it/unibz/inf/isoga/service/dto/RequestIsochrone.java @@ -1,5 +1,8 @@ package it.unibz.inf.isoga.service.dto; +import it.unibz.inf.isochrone.util.EnumContainer; +import it.unibz.inf.isochrone.util.EnumContainer.Algorithm; +import it.unibz.inf.isochrone.util.EnumContainer.CoverageMode; import it.unibz.inf.isochrone.util.EnumContainer.Dataset; import it.unibz.inf.isochrone.util.EnumContainer.Direction; import it.unibz.inf.isochrone.util.EnumContainer.Mode; @@ -9,47 +12,42 @@ import java.util.Calendar; import java.util.Collection; import javax.validation.constraints.NotNull; -import javax.validation.constraints.Pattern; import com.fasterxml.jackson.annotation.JsonProperty; public class RequestIsochrone implements IRequest { - private String algorithm; - private String coverageMode; - private String datasetString; + private Algorithm algorithm; + private CoverageMode coverageMode; + private Dataset dataset; private Calendar date; - private String directionString; + private Direction direction; private Long dmax; private Boolean expirationMode; - private String modeString; + private Mode mode; private Collection<QueryNode> queryNodes; private Double speed; // Constructor - public RequestIsochrone() { } + public RequestIsochrone() { + super(); + } // Getter @NotNull - @Pattern(regexp = "MDijkstra|MineX|MrneX") - public String getAlgorithm() { + public Algorithm getAlgorithm() { return algorithm; } @NotNull - @Pattern(regexp = "Buffer|Surface") - public String getCoverageMode() { + public CoverageMode getCoverageMode() { return coverageMode; } @NotNull public Dataset getDataset() { - if (datasetString == null) { - return null; - } - - return Dataset.valueOf(datasetString.toUpperCase()); + return dataset; } @NotNull @@ -59,11 +57,7 @@ public class RequestIsochrone implements IRequest { @NotNull public Direction getDirection() { - if (directionString == null) { - return null; - } - - return Direction.valueOf(directionString.toUpperCase()); + return direction; } @NotNull @@ -82,11 +76,7 @@ public class RequestIsochrone implements IRequest { @NotNull public Mode getMode() { - if (modeString == null) { - return null; - } - - return Mode.valueOf(modeString.toUpperCase()); + return mode; } @NotNull @@ -111,17 +101,17 @@ public class RequestIsochrone implements IRequest { @JsonProperty public void setAlgorithm(final String algorithm) { - this.algorithm = algorithm; + this.algorithm = EnumContainer.getByName(Algorithm.class, algorithm); } @JsonProperty public void setCoverageMode(final String coverageMode) { - this.coverageMode = coverageMode; + this.coverageMode = EnumContainer.getByName(CoverageMode.class, coverageMode); } - @JsonProperty(value = "dataset") - public void setDatasetString(final String datasetString) { - this.datasetString = datasetString; + @JsonProperty + public void setDataset(final String dataset) { + this.dataset = EnumContainer.getByName(Dataset.class, dataset); } @JsonProperty @@ -129,9 +119,9 @@ public class RequestIsochrone implements IRequest { this.date = date; } - @JsonProperty(value = "direction") - public void setDirectionString(final String directionString) { - this.directionString = directionString; + @JsonProperty + public void setDirection(final String direction) { + this.direction = EnumContainer.getByName(Direction.class, direction); } @JsonProperty @@ -144,9 +134,9 @@ public class RequestIsochrone implements IRequest { this.expirationMode = expirationMode; } - @JsonProperty(value = "mode") - public void setModeString(final String modeString) { - this.modeString = modeString; + @JsonProperty + public void setMode(final String mode) { + this.mode = EnumContainer.getByName(Mode.class, mode); } @JsonProperty @@ -158,4 +148,5 @@ public class RequestIsochrone implements IRequest { public void setSpeed(final Double speed) { this.speed = speed; } + } diff --git a/src/main/webapp/js/service/serviceIsochrone.js b/src/main/webapp/js/service/serviceIsochrone.js index a1fb127a..e707fff7 100644 --- a/src/main/webapp/js/service/serviceIsochrone.js +++ b/src/main/webapp/js/service/serviceIsochrone.js @@ -75,7 +75,7 @@ define(['jQuery', 'leaflet', 'console', 'spinner', 'isochrone/isochrone', 'util/ } if ((bBoxSize.x + bBoxSize.y) <= 0) { - logger.warn('Calculated empty isochrone... now showing anything on the map'); + logger.warn('Calculated empty isochrone... not showing anything on the map'); return; } -- GitLab