diff --git a/src/main/java/it/unibz/inf/isochrone/config/ConfigDataset.java b/src/main/java/it/unibz/inf/isochrone/config/ConfigDataset.java index aeccfacde78b234a07c1757cc2734924fbc23cf0..2a9085a65ca199158a94fb64835d601f67b822a9 100644 --- a/src/main/java/it/unibz/inf/isochrone/config/ConfigDataset.java +++ b/src/main/java/it/unibz/inf/isochrone/config/ConfigDataset.java @@ -10,18 +10,21 @@ import com.tngtech.configbuilder.annotation.typetransformer.TypeTransformer; import com.tngtech.configbuilder.annotation.typetransformer.TypeTransformers; import com.tngtech.configbuilder.annotation.valueextractor.PropertyValue; -import it.unibz.inf.isochrone.util.EnumContainer.Dataset; import it.unibz.inf.isochrone.util.EnumContainer.TableType; import it.unibz.inf.isochrone.util.Point; import it.unibz.inf.isoga.db.DatabaseWeb; import it.unibz.inf.isoga.db.TableEntry; import it.unibz.inf.isoga.geometry.BBox; +import java.io.File; +import java.net.URISyntaxException; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; +import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -29,6 +32,10 @@ import java.util.Set; import javax.validation.constraints.NotNull; +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * Configuration for individual datasets. * @@ -42,10 +49,10 @@ public class ConfigDataset { public static class CalendarTransformer extends TypeTransformer<String, Calendar> { public static final String DATE_FORMAT = "MM/dd/yyyy HH:mm"; - @Override - public Calendar transform(final String str) { - DateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT); - Calendar targetTime = Calendar.getInstance(); + @Override + public Calendar transform(final String str) { + DateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT); + Calendar targetTime = Calendar.getInstance(); try { targetTime.setTimeInMillis(dateFormat.parse(str).getTime()); } catch (ParseException e) { @@ -54,15 +61,22 @@ public class ConfigDataset { } return targetTime; - } - } + } + } + public static class PointTransformer extends TypeTransformer<String, Point> { - @Override - public Point transform(final String str) { - final String[] strProperty = str.split(","); - return new Point(Double.valueOf(strProperty[0]), Double.valueOf(strProperty[1])); - } - } + @Override + public Point transform(final String str) { + final String[] strProperty = str.split(","); + return new Point(Double.valueOf(strProperty[0]), Double.valueOf(strProperty[1])); + } + } + + private static Map<String, ConfigDataset> instanceMap = new HashMap<>(); + private static final Logger LOGGER = LoggerFactory.getLogger(ConfigDataset.class); + private static final Collection<String> ALL_DATASETS = initDatasets(); + private static final String[] DS_CONFIG_EXT_ARR = new String[] {"xml"}; + private static final String DS_CONFIG_PREFIX = "config_"; @PropertyValue("client.tArrival") @TypeTransformers(CalendarTransformer.class) @@ -153,31 +167,33 @@ public class ConfigDataset { @PropertyValue("tbl.vertex.density") private String tableVertexDensity; - // Non-configurable fields - private Dataset dataset; - private static Map<Dataset, ConfigDataset> instanceMap = new HashMap<>(); + private String datasetName; protected TableEntry areaBufferTableEntry; protected TableEntry edgeTableEntry; protected TableEntry vertexAnnotatedTableEntry; protected TableEntry vertexTableEntry; - public static ConfigDataset getInstance(final Dataset dataset) { + public static ConfigDataset getInstance(final String datasetName) { final List<String> propertyFiles = new ArrayList<>(1); - propertyFiles.add("config_" + dataset.toString().toLowerCase()); + propertyFiles.add("config_" + datasetName); - if (!instanceMap.containsKey(dataset)) { + if (!instanceMap.containsKey(datasetName)) { final ConfigDataset config = new ConfigBuilder<>(ConfigDataset.class).overridePropertiesFiles(propertyFiles).build(); - config.dataset = dataset; + config.datasetName = datasetName; config.initTableEntries(); - instanceMap.put(dataset, config); + instanceMap.put(datasetName, config); return config; } - return instanceMap.get(dataset); + return instanceMap.get(datasetName); + } + + public static Collection<String> getAllDatasets() { + return ALL_DATASETS; } - public static Set<Dataset> getInstantiatedDatasets() { + public static Set<String> getInstantiatedDatasets() { return instanceMap.keySet(); } @@ -208,7 +224,7 @@ public class ConfigDataset { tableSchedules = o.tableSchedules; tableVertex = o.tableVertex; tableVertexDensity = o.tableVertexDensity; - dataset = o.dataset; + datasetName = o.datasetName; areaBufferTableEntry = o.areaBufferTableEntry; edgeTableEntry = o.edgeTableEntry; vertexAnnotatedTableEntry = o.vertexAnnotatedTableEntry; @@ -241,8 +257,8 @@ public class ConfigDataset { } @JsonProperty(value = "name") - public Dataset getDataset() { - return dataset; + public String getDatasetName() { + return datasetName; } @JsonIgnore @@ -378,4 +394,34 @@ public class ConfigDataset { return new TableEntry(tblName.trim(), idxName.trim(), type); } + + private static Collection<String> initDatasets() { + File resourceDir = null; + try { + resourceDir = new File(ConfigDataset.class.getResource("/").toURI()); + } catch (URISyntaxException e) { + LOGGER.warn("Datasets could not be read. There might be no configured datasets available!"); + } + + if (resourceDir == null) { + return Collections.emptyList(); + } + + final Collection<File> fileCollection = FileUtils.listFiles(resourceDir, DS_CONFIG_EXT_ARR, false); + final List<String> dsConfigCollection = new ArrayList<>(fileCollection.size()); + + // TODO: Only add datasets that are also configured in the db + final int prefixLength = DS_CONFIG_PREFIX.length(); + for (File file : fileCollection) { + final String fileName = file.getName(); + if (fileName.startsWith(DS_CONFIG_PREFIX)) { + String datasetName = fileName.substring(prefixLength); + datasetName = datasetName.substring(0, datasetName.lastIndexOf(".")); + dsConfigCollection.add(datasetName); + } + } + + Collections.sort(dsConfigCollection); + return dsConfigCollection; + } } diff --git a/src/main/java/it/unibz/inf/isochrone/config/ConfigIsochrone.java b/src/main/java/it/unibz/inf/isochrone/config/ConfigIsochrone.java index f6605e3292ac06dab9c90b7ce05ece6ca86c5c2f..a20536aac0f265c5b2d610dea990ce1edf348003 100644 --- a/src/main/java/it/unibz/inf/isochrone/config/ConfigIsochrone.java +++ b/src/main/java/it/unibz/inf/isochrone/config/ConfigIsochrone.java @@ -12,7 +12,6 @@ import it.unibz.inf.isochrone.db.ConnectionFactory; import java.sql.Connection; import java.sql.SQLException; -import java.util.Collection; import javax.validation.constraints.NotNull; @@ -42,10 +41,6 @@ public final class ConfigIsochrone { @PropertyValue("cfg.clientSRID") private int clientSRID; - @NotNull - @PropertyValue("cfg.datasets") - private Collection<String> datasets; - @NotNull @PropertyValue("org.postgresql.database") private String database; @@ -116,10 +111,6 @@ public final class ConfigIsochrone { return null; } - public Collection<String> getDatasets() { - return datasets; - } - public String getDBName() { return database; } 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 8e4ebe8d03e19258241a4b9a057e2e3d49feb845..07cde781cd9d1436c55df4e1bc1cc00a66888805 100644 --- a/src/main/java/it/unibz/inf/isochrone/util/EnumContainer.java +++ b/src/main/java/it/unibz/inf/isochrone/util/EnumContainer.java @@ -14,13 +14,6 @@ public final class EnumContainer { MDIJKSTRA, MINEX, MRNEX } - /** - * Lists of all datasets available in the database. - */ - public enum Dataset { - BZ, SF, ST, IT - } - /** * The network can either be unimodal continuous links only or * multimodal and include discrete links. diff --git a/src/main/java/it/unibz/inf/isoga/config/ConfigClient.java b/src/main/java/it/unibz/inf/isoga/config/ConfigClient.java index 2564aacedcfd5336f859b3437ef235ba52c44a91..89b18d09f2de48d1ab2bb1e10d7aa0bc1ba80351 100644 --- a/src/main/java/it/unibz/inf/isoga/config/ConfigClient.java +++ b/src/main/java/it/unibz/inf/isoga/config/ConfigClient.java @@ -1,8 +1,10 @@ package it.unibz.inf.isoga.config; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; + import it.unibz.inf.isochrone.config.ConfigDataset; import it.unibz.inf.isochrone.config.ConfigIsochrone; -import it.unibz.inf.isochrone.util.EnumContainer.Dataset; import it.unibz.inf.isochrone.util.EnumContainer.TableType; import it.unibz.inf.isoga.db.TableEntry; @@ -13,15 +15,12 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; - /** * Configuration for individual datasets. */ public class ConfigClient extends ConfigDataset { private static final int NAME_MAX_LENGTH = 32; - private static final Map<String, Map<Dataset, ConfigClient>> ALL_CONFIGS; + private static final Map<String, Map<String, ConfigClient>> ALL_CONFIGS; private boolean registered = false; static { @@ -36,20 +35,20 @@ public class ConfigClient extends ConfigDataset { return Collections.emptyList(); } - public static ConfigClient getInstance(final String clientId, final Dataset ds) { - if (getAllConfigMap(clientId).containsKey(ds)) { - return ALL_CONFIGS.get(clientId).get(ds); + public static ConfigClient getInstance(final String clientId, final String datasetName) { + if (getAllConfigMap(clientId).containsKey(datasetName)) { + return ALL_CONFIGS.get(clientId).get(datasetName); } - final ConfigClient createdConfig = new ConfigClient(ConfigDataset.getInstance(ds), clientId); + final ConfigClient createdConfig = new ConfigClient(ConfigDataset.getInstance(datasetName), clientId); // configuration for client created ... now add it to the all_configs map if (!ALL_CONFIGS.containsKey(clientId)) { // client had no configuration before... init empty map - ALL_CONFIGS.put(clientId, new HashMap<Dataset, ConfigClient>()); + ALL_CONFIGS.put(clientId, new HashMap<String, ConfigClient>()); } // add created clientConfig to existing client configs (with different dataset) - ALL_CONFIGS.get(clientId).put(ds, createdConfig); + ALL_CONFIGS.get(clientId).put(datasetName, createdConfig); return createdConfig; } @@ -114,7 +113,7 @@ public class ConfigClient extends ConfigDataset { // Private static methods - private static Map<Dataset, ConfigClient> getAllConfigMap(final String clientId) { + private static Map<String, ConfigClient> getAllConfigMap(final String clientId) { if (ALL_CONFIGS.containsKey(clientId)) { return ALL_CONFIGS.get(clientId); } 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 56a98569d66fa3de21a111e44d5537a7bacd33d0..1b3542e0278e7480d9b574b2d198ec879fc9205f 100644 --- a/src/main/java/it/unibz/inf/isoga/service/ServiceConfiguration.java +++ b/src/main/java/it/unibz/inf/isoga/service/ServiceConfiguration.java @@ -3,7 +3,6 @@ package it.unibz.inf.isoga.service; import it.unibz.inf.isochrone.config.ConfigDataset; import it.unibz.inf.isochrone.config.ConfigIsochrone; -import it.unibz.inf.isochrone.util.EnumContainer.Dataset; import it.unibz.inf.isoga.config.ConfigClient; import it.unibz.inf.isoga.service.dto.RequestConfiguration; import it.unibz.inf.isoga.service.dto.ResponseConfiguration; @@ -19,7 +18,7 @@ import javax.websocket.Session; * @author Nikolaus Krismer */ public class ServiceConfiguration extends AbstractService<RequestConfiguration, ResponseConfiguration> { - private static final Dataset[] PREREGISTERING_DATASETS = new Dataset[] {Dataset.BZ}; + private static final String[] PREREGISTERING_DATASETS = new String[] {"bz"}; // Constructor @@ -50,9 +49,9 @@ public class ServiceConfiguration extends AbstractService<RequestConfiguration, // Private methods private Collection<ConfigDataset> initClientConfigurations(final String clientId) { - final Set<Dataset> instantiatedDatasets = ConfigDataset.getInstantiatedDatasets(); + final Set<String> instantiatedDatasets = ConfigDataset.getInstantiatedDatasets(); final Collection<ConfigDataset> createConfigs = new ArrayList<ConfigDataset>(instantiatedDatasets.size()); - for (final Dataset dataset : instantiatedDatasets) { + for (final String dataset : instantiatedDatasets) { final ConfigClient configClient = ConfigClient.getInstance(clientId, dataset); createConfigs.add(configClient); } @@ -63,7 +62,7 @@ public class ServiceConfiguration extends AbstractService<RequestConfiguration, private void preregisterClients(final String clientId) { final Connection connection = ConfigIsochrone.getInstance().getConnection(); - for (Dataset dataset : PREREGISTERING_DATASETS) { + for (String dataset : PREREGISTERING_DATASETS) { final ConfigClient configClient = ConfigClient.getInstance(clientId, dataset); registerTableAndLayers(connection, configClient); } diff --git a/src/main/java/it/unibz/inf/isoga/service/ServiceFeatureInfo.java b/src/main/java/it/unibz/inf/isoga/service/ServiceFeatureInfo.java index d74542e2c559b2b6ab5bbb153dfed934139f39a5..b98c0297c1382472175e96b7091ff4d1f616a6ec 100644 --- a/src/main/java/it/unibz/inf/isoga/service/ServiceFeatureInfo.java +++ b/src/main/java/it/unibz/inf/isoga/service/ServiceFeatureInfo.java @@ -1,7 +1,6 @@ package it.unibz.inf.isoga.service; -import it.unibz.inf.isochrone.util.EnumContainer.Dataset; import it.unibz.inf.isochrone.util.EnumContainer.Direction; import it.unibz.inf.isoga.config.ConfigClient; import it.unibz.inf.isoga.db.DbUtility; @@ -29,7 +28,7 @@ public class ServiceFeatureInfo extends AbstractService<RequestFeatureInfo, Resp @Override public ResponseFeatureInfo onJsonMessage(final Session session, final RequestFeatureInfo request) { final int stopId = request.getStopId(); - final Dataset ds = request.getDataset(); + final String ds = request.getDataset(); final Direction direction = request.getDirection(); final String clientId = session.getId(); 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 650be3e843fa8be33d2b63a4ad94d03eccdf6ed2..fabbefdc73aa16eae321a8734a2d918da4002cec 100644 --- a/src/main/java/it/unibz/inf/isoga/service/ServiceIsochrone.java +++ b/src/main/java/it/unibz/inf/isoga/service/ServiceIsochrone.java @@ -11,7 +11,6 @@ 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; @@ -50,7 +49,7 @@ public class ServiceIsochrone extends AbstractService<RequestIsochrone, Response final long startRequestTiming = System.currentTimeMillis(); final String clientId = session.getId(); final Direction direction = request.getDirection(); - final Dataset dataset = request.getDataset(); + final String dataset = request.getDataset(); if (dataset == null) { throw new IllegalArgumentException("Invalid dataset specified!"); } diff --git a/src/main/java/it/unibz/inf/isoga/service/ServicePoiFeature.java b/src/main/java/it/unibz/inf/isoga/service/ServicePoiFeature.java index 74e3b02d03da8a095d0cbfc4984f0d360e5ef95d..06701581161b156fb53964ac6160cda681a5a76f 100644 --- a/src/main/java/it/unibz/inf/isoga/service/ServicePoiFeature.java +++ b/src/main/java/it/unibz/inf/isoga/service/ServicePoiFeature.java @@ -2,7 +2,6 @@ package it.unibz.inf.isoga.service; import it.unibz.inf.isochrone.config.ConfigIsochrone; -import it.unibz.inf.isochrone.util.EnumContainer.Dataset; import it.unibz.inf.isoga.config.ConfigClient; import it.unibz.inf.isoga.db.DbUtility; import it.unibz.inf.isoga.service.dto.RequestPoiFeature; @@ -25,8 +24,7 @@ public class ServicePoiFeature extends AbstractService<RequestPoiFeature, Respon @Override public ResponsePoiFeature onJsonMessage(final Session session, final RequestPoiFeature request) { - final Dataset ds = request.getDataset(); - + final String ds = request.getDataset(); final String clientId = session.getId(); final ConfigClient config = ConfigClient.getInstance(clientId, ds); final int clientSRID = ConfigIsochrone.getInstance().getClientSRID(); diff --git a/src/main/java/it/unibz/inf/isoga/service/ServiceWps.java b/src/main/java/it/unibz/inf/isoga/service/ServiceWps.java index eb463f34419039f3bd01ae5d0757046aa728bd24..f2d7b08ead6d4594d85c90967bd6b30087e72b69 100644 --- a/src/main/java/it/unibz/inf/isoga/service/ServiceWps.java +++ b/src/main/java/it/unibz/inf/isoga/service/ServiceWps.java @@ -1,7 +1,6 @@ package it.unibz.inf.isoga.service; -import it.unibz.inf.isochrone.util.EnumContainer.Dataset; import it.unibz.inf.isochrone.util.EnumContainer.QueryType; import it.unibz.inf.isoga.config.ConfigClient; import it.unibz.inf.isoga.db.DbUtility; @@ -22,7 +21,7 @@ public class ServiceWps extends AbstractService<RequestWps, ResponseWps> { @Override public ResponseWps onJsonMessage(final Session session, final RequestWps request) { - final Dataset ds = request.getDataset(); + final String ds = request.getDataset(); final String sqlMessage = request.getSqlQuery(); final String coverageTable = request.getCoverageTable(); final String spatialPredicate = request.getSpatialPredicate(); diff --git a/src/main/java/it/unibz/inf/isoga/service/dto/RequestFeatureInfo.java b/src/main/java/it/unibz/inf/isoga/service/dto/RequestFeatureInfo.java index 34bb583a3ce8f6d5e438222c604e311696ace9c1..2aba349ae45358c80dbfbf981209738e2976405a 100644 --- a/src/main/java/it/unibz/inf/isoga/service/dto/RequestFeatureInfo.java +++ b/src/main/java/it/unibz/inf/isoga/service/dto/RequestFeatureInfo.java @@ -1,14 +1,13 @@ package it.unibz.inf.isoga.service.dto; -import it.unibz.inf.isochrone.util.EnumContainer.Dataset; +import com.fasterxml.jackson.annotation.JsonProperty; + import it.unibz.inf.isochrone.util.EnumContainer.Direction; import javax.validation.constraints.NotNull; -import com.fasterxml.jackson.annotation.JsonProperty; - public class RequestFeatureInfo implements IRequest { - private String datasetString; + private String dataset; private String directionString; private int stopId; @@ -19,12 +18,8 @@ public class RequestFeatureInfo implements IRequest { // Getter @NotNull - public Dataset getDataset() { - if (datasetString == null) { - return null; - } - - return Dataset.valueOf(datasetString.toUpperCase()); + public String getDataset() { + return dataset; } @NotNull @@ -51,9 +46,9 @@ public class RequestFeatureInfo implements IRequest { } } - @JsonProperty(value = "dataset") - public void setDatasetString(final String datasetString) { - this.datasetString = datasetString; + @JsonProperty + public void setDataset(final String dataset) { + this.dataset = dataset; } @JsonProperty(value = "direction") 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 1cb3e831fa70f9530713d63d4ed770d731b6d29c..6816767e6c0ee3b69924ca779b20a7c54123c79f 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,9 +1,10 @@ package it.unibz.inf.isoga.service.dto; +import com.fasterxml.jackson.annotation.JsonProperty; + 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; import it.unibz.inf.isoga.network.QueryNode; @@ -13,12 +14,10 @@ import java.util.Collection; import javax.validation.constraints.NotNull; -import com.fasterxml.jackson.annotation.JsonProperty; - public class RequestIsochrone implements IRequest { private Algorithm algorithm; private CoverageMode coverageMode; - private Dataset dataset; + private String dataset; private Calendar date; private Direction direction; private Long dmax; @@ -46,7 +45,7 @@ public class RequestIsochrone implements IRequest { } @NotNull - public Dataset getDataset() { + public String getDataset() { return dataset; } @@ -111,7 +110,7 @@ public class RequestIsochrone implements IRequest { @JsonProperty public void setDataset(final String dataset) { - this.dataset = EnumContainer.getByName(Dataset.class, dataset); + this.dataset = dataset; } @JsonProperty diff --git a/src/main/java/it/unibz/inf/isoga/service/dto/RequestPoiFeature.java b/src/main/java/it/unibz/inf/isoga/service/dto/RequestPoiFeature.java index a5c39545d3dd815988516feab5d0382b7598dac6..1c188cfdf5abdf0e79b46d2983386e786a819592 100644 --- a/src/main/java/it/unibz/inf/isoga/service/dto/RequestPoiFeature.java +++ b/src/main/java/it/unibz/inf/isoga/service/dto/RequestPoiFeature.java @@ -1,14 +1,12 @@ package it.unibz.inf.isoga.service.dto; -import it.unibz.inf.isochrone.util.EnumContainer.Dataset; +import com.fasterxml.jackson.annotation.JsonProperty; import javax.validation.constraints.NotNull; -import com.fasterxml.jackson.annotation.JsonProperty; - public class RequestPoiFeature implements IRequest { - private String datasetString; + private String dataset; private String query; // Constructors @@ -18,12 +16,8 @@ public class RequestPoiFeature implements IRequest { // Getter @NotNull - public Dataset getDataset() { - if (datasetString == null) { - return null; - } - - return Dataset.valueOf(datasetString.toUpperCase()); + public String getDataset() { + return dataset; } @NotNull @@ -45,9 +39,9 @@ public class RequestPoiFeature implements IRequest { } } - @JsonProperty(value = "dataset") - public void setDatasetString(final String datasetString) { - this.datasetString = datasetString; + @JsonProperty + public void setDataset(final String dataset) { + this.dataset = dataset; } @JsonProperty diff --git a/src/main/java/it/unibz/inf/isoga/service/dto/RequestWps.java b/src/main/java/it/unibz/inf/isoga/service/dto/RequestWps.java index 1e31ab5200afec100c32643c9c618ee8e36dda65..9b888ec0503d6846b190e1f868a1520f9fca67de 100644 --- a/src/main/java/it/unibz/inf/isoga/service/dto/RequestWps.java +++ b/src/main/java/it/unibz/inf/isoga/service/dto/RequestWps.java @@ -1,14 +1,12 @@ package it.unibz.inf.isoga.service.dto; -import it.unibz.inf.isochrone.util.EnumContainer.Dataset; +import com.fasterxml.jackson.annotation.JsonProperty; import javax.validation.constraints.NotNull; -import com.fasterxml.jackson.annotation.JsonProperty; - public class RequestWps implements IRequest { private String coverageTable; - private String datasetString; + private String dataset; private String spatialPredicate; private String sqlQuery; @@ -28,12 +26,8 @@ public class RequestWps implements IRequest { } @NotNull - public Dataset getDataset() { - if (datasetString == null) { - return null; - } - - return Dataset.valueOf(datasetString.toUpperCase()); + public String getDataset() { + return dataset; } @NotNull @@ -69,9 +63,9 @@ public class RequestWps implements IRequest { this.coverageTable = coverageTable; } - @JsonProperty(value = "dataset") - public void setDatasetString(final String datasetString) { - this.datasetString = datasetString; + @JsonProperty + public void setDataset(final String dataset) { + this.dataset = dataset; } @JsonProperty 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 81291f8e44e6949befee43b19658760a640f8b98..963e50694a665128d1e2c9fd40fc256159b388b6 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,5 +1,7 @@ package it.unibz.inf.isoga.service.dto; +import com.fasterxml.jackson.annotation.JsonProperty; + import it.unibz.inf.isochrone.config.ConfigDataset; import it.unibz.inf.isoga.config.ConfigGeoserver; import it.unibz.inf.isoga.service.ServiceConfiguration; @@ -12,8 +14,6 @@ import java.util.List; import org.apache.commons.httpclient.HttpStatus; -import com.fasterxml.jackson.annotation.JsonProperty; - public class ResponseConfiguration implements IResponse { private final String mapserverUrl; private final List<ConfigDataset> defaultDatasets; @@ -44,7 +44,7 @@ public class ResponseConfiguration implements IResponse { Collections.sort(defaultDatasets, new Comparator<ConfigDataset>() { @Override public int compare(final ConfigDataset o1, final ConfigDataset o2) { - return o1.getDataset().toString().compareTo(o2.getDataset().toString()); + return o1.getDatasetName().compareTo(o2.getDatasetName()); } }); diff --git a/src/main/java/it/unibz/inf/isoga/web/StartupListener.java b/src/main/java/it/unibz/inf/isoga/web/StartupListener.java index bf4507e525f95b2b3975ff64c4c8ae8d03864af3..ba660cc14cf60b7733f9e2f42bd10b3f5dd21b87 100644 --- a/src/main/java/it/unibz/inf/isoga/web/StartupListener.java +++ b/src/main/java/it/unibz/inf/isoga/web/StartupListener.java @@ -2,10 +2,10 @@ package it.unibz.inf.isoga.web; import it.unibz.inf.isochrone.config.ConfigDataset; import it.unibz.inf.isochrone.config.ConfigIsochrone; -import it.unibz.inf.isochrone.util.EnumContainer.Dataset; import it.unibz.inf.isoga.db.DbUtility; import java.sql.Connection; +import java.util.Collection; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; @@ -40,8 +40,8 @@ public class StartupListener implements ServletContextListener { private void initializeDatasetConfigs() { LOGGER.info("Initializing dataset configuration files"); - final Dataset[] allDatasets = Dataset.values(); - for (final Dataset dataset : allDatasets) { + final Collection<String> allDatasets = ConfigDataset.getAllDatasets(); + for (final String dataset : allDatasets) { ConfigDataset.getInstance(dataset); } } diff --git a/src/main/resources/config.xml b/src/main/resources/config.xml index 25626cc48bb5dce1ba8c554866dcaf1c400f56d6..9acb4d33471082929f2f78c07246d8724552e5d7 100644 --- a/src/main/resources/config.xml +++ b/src/main/resources/config.xml @@ -21,6 +21,5 @@ <!-- Configuration parameters --> <entry key="cfg.clientSRID">3857</entry> - <entry key="cfg.datasets">bz,it,sf,st</entry> <entry key="cfg.clientPrefix"></entry> </properties> diff --git a/src/test/java/it/unibz/inf/isochrone/config/ConfigDatasetTest.java b/src/test/java/it/unibz/inf/isochrone/config/ConfigDatasetTest.java new file mode 100644 index 0000000000000000000000000000000000000000..0d381af52dd19ef12ec559e17ed2f7a5092640a0 --- /dev/null +++ b/src/test/java/it/unibz/inf/isochrone/config/ConfigDatasetTest.java @@ -0,0 +1,27 @@ +package it.unibz.inf.isochrone.config; + +import java.net.URISyntaxException; +import java.util.Collection; + +import org.testng.Assert; +import org.testng.annotations.Test; + +public class ConfigDatasetTest { + private static final int EXPECTED_NUM_DATASETS = 4; + private static final String[] EXPECTED_DATASETS = new String[] {"bz", "it", "sf", "st"}; + + @Test + public void testDatasetCount() throws URISyntaxException { + final Collection<String> datasetCollection = ConfigDataset.getAllDatasets(); + Assert.assertEquals(datasetCollection.size(), EXPECTED_NUM_DATASETS, "Unexpected number of configured datasets"); + } + + @Test + public void testDatasetNames() throws URISyntaxException { + final Collection<String> datasetCollection = ConfigDataset.getAllDatasets(); + + for (String dsName : EXPECTED_DATASETS) { + Assert.assertTrue(datasetCollection.contains(dsName), "Dataset of " + dsName + " unconfigured"); + } + } +} diff --git a/src/test/java/it/unibz/inf/isochrone/config/ConfigTest.java b/src/test/java/it/unibz/inf/isochrone/config/ConfigIsochroneTest.java similarity index 96% rename from src/test/java/it/unibz/inf/isochrone/config/ConfigTest.java rename to src/test/java/it/unibz/inf/isochrone/config/ConfigIsochroneTest.java index 58a6001cb10f5ccdcfebe4ae0eb0d0fa71558741..3561f984014ce1753b0c27061b15c25eb837017a 100644 --- a/src/test/java/it/unibz/inf/isochrone/config/ConfigTest.java +++ b/src/test/java/it/unibz/inf/isochrone/config/ConfigIsochroneTest.java @@ -7,11 +7,17 @@ import org.testng.annotations.Test; * @author Nikolaus Krismer * @version 3 */ -public class ConfigTest { +public class ConfigIsochroneTest { private static final int EXPECTED_MAX_CONNECTION = 50; private static final int EXPECTED_BACTH_SIZE = 250; private static final int EXPECTED_PORT = 5432; + @Test + public void testDbName() { + final ConfigIsochrone config = ConfigIsochrone.getInstance(); + Assert.assertEquals(config.getDBName(), "isochrone", "Property database name"); + } + @Test public void testGetMaxConnection() { final ConfigIsochrone config = ConfigIsochrone.getInstance(); @@ -29,10 +35,4 @@ public class ConfigTest { final ConfigIsochrone config = ConfigIsochrone.getInstance(); Assert.assertEquals(config.getDBPort(), EXPECTED_PORT, "Property org.postgresql.servername"); } - - @Test - public void testDbName() { - final ConfigIsochrone config = ConfigIsochrone.getInstance(); - Assert.assertEquals(config.getDBName(), "isochrone", "Property database name"); - } } 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 313df499f63c7d6882dbf313d856a06aee6ac50c..971b77f73b94ab12f3c5339a7fd57d51046fec6e 100644 --- a/src/test/java/it/unibz/inf/isochrone/db/DatabaseTest.java +++ b/src/test/java/it/unibz/inf/isochrone/db/DatabaseTest.java @@ -3,7 +3,6 @@ package it.unibz.inf.isochrone.db; import it.unibz.inf.isochrone.config.ConfigDataset; import it.unibz.inf.isochrone.network.Link; import it.unibz.inf.isochrone.network.Node; -import it.unibz.inf.isochrone.util.EnumContainer.Dataset; import it.unibz.inf.isochrone.util.EnumContainer.Direction; import it.unibz.inf.isochrone.util.EnumContainer.Mode; @@ -23,6 +22,7 @@ public class DatabaseTest { private static final int EXPECTED_NODE_COUNT = 2687; private static final int LINK_ID = 1846; private static final int NODE_ID = 5013; + private static final String TEST_DATASET = "bz"; private Map<Integer, Node> nodes; private Map<Integer, Link> links; @@ -43,7 +43,7 @@ public class DatabaseTest { @Test public void testCreateDatabaseObject() { - final ConfigDataset config = ConfigDataset.getInstance(Dataset.BZ); + final ConfigDataset config = ConfigDataset.getInstance(TEST_DATASET); final Database<ConfigDataset> db = new Database<>(config, Mode.MULTIMODAL, Direction.INCOMING); Assert.assertNotNull(db, "Database object could not be created!"); } @@ -74,7 +74,7 @@ public class DatabaseTest { // Private methods private Database<ConfigDataset> initDb() { - final ConfigDataset config = ConfigDataset.getInstance(Dataset.BZ); + final ConfigDataset config = ConfigDataset.getInstance(TEST_DATASET); final Database<ConfigDataset> db = new Database<>(config, Mode.MULTIMODAL, Direction.INCOMING); db.readNetwork(nodes, links); diff --git a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmTest.java b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmTest.java index 563dfc5ccc113a22f56a8b0d13ffb78cc63ad8d3..54e2feb2d98a4ebbccd9ec1c5c99af17d66d1af2 100644 --- a/src/test/java/it/unibz/inf/isochrone/network/AlgorithmTest.java +++ b/src/test/java/it/unibz/inf/isochrone/network/AlgorithmTest.java @@ -3,7 +3,6 @@ package it.unibz.inf.isochrone.network; import it.unibz.inf.isochrone.algorithm.MDijkstra; import it.unibz.inf.isochrone.algorithm.MineX; import it.unibz.inf.isochrone.algorithm.MrneX; -import it.unibz.inf.isochrone.util.EnumContainer.Dataset; import it.unibz.inf.isochrone.util.EnumContainer.Direction; import it.unibz.inf.isochrone.util.EnumContainer.Mode; @@ -13,7 +12,7 @@ import java.util.GregorianCalendar; import org.testng.annotations.Test; public class AlgorithmTest { - private static final Dataset TEST_DATASET = Dataset.BZ; + private static final String TEST_DATASET = "bz"; private static final Double WALKING_SPEED = 1.0; private static final int DURATION = 50; private static final Calendar TIME = new GregorianCalendar(2011, 6, 1, 12, 0, 0); diff --git a/src/test/java/it/unibz/inf/isochrone/network/ComparisonTest.java b/src/test/java/it/unibz/inf/isochrone/network/ComparisonTest.java index 1f971e61b36212511352f0c0365c8f051c6671c2..02398ced1f9e373bc595cd098dfe184f70687688 100644 --- a/src/test/java/it/unibz/inf/isochrone/network/ComparisonTest.java +++ b/src/test/java/it/unibz/inf/isochrone/network/ComparisonTest.java @@ -6,7 +6,6 @@ import it.unibz.inf.isochrone.algorithm.MDijkstra; import it.unibz.inf.isochrone.algorithm.MineX; import it.unibz.inf.isochrone.algorithm.MrneX; import it.unibz.inf.isochrone.config.ConfigDataset; -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.Query; @@ -18,7 +17,7 @@ import org.testng.Assert; import org.testng.annotations.Test; public class ComparisonTest { - private static final Dataset TEST_DATASET = Dataset.BZ; + private static final String TEST_DATASET = "bz"; private static final Double WALKING_SPEED = 1.0; private static final int DURATION = 50; private static final Calendar TIME = new GregorianCalendar(2011, 6, 1, 12, 0, 0); diff --git a/src/test/java/it/unibz/inf/isochrone/network/RuntimeComplex.java b/src/test/java/it/unibz/inf/isochrone/network/RuntimeComplex.java index 4cd07e7c380d97933c4e90f355ab3e5b4f615c80..6027fc9c28b37a807a834b17a0ca9a049f011cee 100644 --- a/src/test/java/it/unibz/inf/isochrone/network/RuntimeComplex.java +++ b/src/test/java/it/unibz/inf/isochrone/network/RuntimeComplex.java @@ -4,7 +4,6 @@ import it.unibz.inf.isochrone.algorithm.Isochrone; import it.unibz.inf.isochrone.algorithm.MDijkstra; import it.unibz.inf.isochrone.algorithm.MineX; import it.unibz.inf.isochrone.algorithm.MrneX; -import it.unibz.inf.isochrone.util.EnumContainer.Dataset; import it.unibz.inf.isochrone.util.EnumContainer.Direction; import it.unibz.inf.isochrone.util.EnumContainer.Mode; @@ -112,7 +111,7 @@ public final class RuntimeComplex { private static void addDatasetBZ(final Set<Integer> times) { int i = 0; for (final Integer time : times) { - datasets.put(i++, new TestParameters(1.0, time, BZ_TIME, Mode.MULTIMODAL, BZ_NODE_ID, Dataset.BZ, Integer.MAX_VALUE, Direction.INCOMING)); + datasets.put(i++, new TestParameters(1.0, time, BZ_TIME, Mode.MULTIMODAL, BZ_NODE_ID, "bz", Integer.MAX_VALUE, Direction.INCOMING)); } } @@ -120,7 +119,7 @@ public final class RuntimeComplex { private static void addDatasetIT(final Set<Integer> times) { int i = 0; for (final Integer time : times) { - datasets.put(i++, new TestParameters(1.0, time, IT_TIME, Mode.MULTIMODAL, IT_NODE_ID, Dataset.IT, Integer.MAX_VALUE, Direction.INCOMING)); + datasets.put(i++, new TestParameters(1.0, time, IT_TIME, Mode.MULTIMODAL, IT_NODE_ID, "it", Integer.MAX_VALUE, Direction.INCOMING)); } } @@ -128,7 +127,7 @@ public final class RuntimeComplex { private static void addDatasetSF(final Set<Integer> times) { int i = 0; for (final Integer time : times) { - datasets.put(i++, new TestParameters(1.0, time, SF_TIME, Mode.MULTIMODAL, SF_NODE_ID, Dataset.SF, Integer.MAX_VALUE, Direction.INCOMING)); + datasets.put(i++, new TestParameters(1.0, time, SF_TIME, Mode.MULTIMODAL, SF_NODE_ID, "sf", Integer.MAX_VALUE, Direction.INCOMING)); } } @@ -136,7 +135,7 @@ public final class RuntimeComplex { private static void addDatasetST(final Set<Integer> times) { int i = 0; for (final Integer time : times) { - datasets.put(i++, new TestParameters(1.0, time, ST_TIME, Mode.MULTIMODAL, ST_NODE_ID, Dataset.ST, Integer.MAX_VALUE, Direction.INCOMING)); + datasets.put(i++, new TestParameters(1.0, time, ST_TIME, Mode.MULTIMODAL, ST_NODE_ID, "st", Integer.MAX_VALUE, Direction.INCOMING)); } } diff --git a/src/test/java/it/unibz/inf/isochrone/network/TestParameters.java b/src/test/java/it/unibz/inf/isochrone/network/TestParameters.java index 6b928f2a1a23af2a38fc0b75a9b11d86ed3081a8..42a3fa4c0ccb480f2232c02520a0c832e94fb843 100644 --- a/src/test/java/it/unibz/inf/isochrone/network/TestParameters.java +++ b/src/test/java/it/unibz/inf/isochrone/network/TestParameters.java @@ -1,6 +1,5 @@ package it.unibz.inf.isochrone.network; -import it.unibz.inf.isochrone.util.EnumContainer.Dataset; import it.unibz.inf.isochrone.util.EnumContainer.Direction; import it.unibz.inf.isochrone.util.EnumContainer.Mode; @@ -17,7 +16,7 @@ final class TestParameters { private static final Calendar DEFAULT_DATE = new GregorianCalendar(2011, 9, 20, 15, 0, 0); private static final Mode DEFAULT_MODE = Mode.MULTIMODAL; private static final int DEFAULT_NODE_ID = 2000500; - private static final Dataset DEFAULT_DATASET = Dataset.BZ; + private static final String DEFAULT_DATASET = "bz"; private static final int DEFAULT_MAX_MEMORY = Integer.MAX_VALUE; private static final Direction DEFAULT_DIRECTION = Direction.INCOMING; @@ -26,7 +25,7 @@ final class TestParameters { private final Calendar date; private final Mode mode; private final int nodeId; - private final Dataset dataset; + private final String dataset; private final int maxMemory; private final Direction direction; @@ -42,7 +41,7 @@ final class TestParameters { } // CHECKSTYLE:OFF ParameterNumber - public TestParameters(final double walkingSpeed, final int runtime, final Calendar date, final Mode mode, final int nodeId, final Dataset dataset, final int maxMemory, final Direction direction) { + public TestParameters(final double walkingSpeed, final int runtime, final Calendar date, final Mode mode, final int nodeId, final String dataset, final int maxMemory, final Direction direction) { this.walkingSpeed = walkingSpeed; this.runtime = runtime; this.date = date; @@ -54,7 +53,7 @@ final class TestParameters { } // CHECKSTYLE:ON ParameterNumber - public Dataset getDataset() { + public String getDataset() { return dataset; }