Przeglądaj źródła

Repaired filter, edited readme

Lukas Cerny 5 lat temu
rodzic
commit
db65dfb8aa

+ 5 - 7
README.md

@@ -13,24 +13,22 @@ format for communication with external systems). This project was created as a p
 
 Requirements: *Gradle*
 
-To build the project run following command.
-
 `./gradle build`
 
 ### Run
 
 Requirements: *Java 8+*
 
-To run the connector run following command.
-
 `java -cp "bin/libs/*" io.connector.Main -cf config/ogc2afc.yaml -p <port>`
 
 ### Build docker image
 
-Requirements: *Docker*
-
 `docker build -t <image_custom_name> --build-arg config_file=<yaml_file> --build-arg port=<server_port> -f ./docker/Dockerfile .`
 
 ### Run docker image
 
-`docker run --name <container_name> -p <host_port>:<server_port> <image>`
+`docker run --name <container_name> -p <host_port>:<server_port> <image>`
+
+### Usage
+
+`http://www.<domain>:<port>/api/AFarCloud/OGCSensorThings/Things`

+ 2 - 3
connector-model/src/main/java/io/connector/model/sensorthings/Filter.java

@@ -50,7 +50,7 @@ public class Filter {
 
         String [] cmp = filterString.split("\\s(and)\\s");
         if (cmp.length != 2) { // supported only 'and'
-            return emptyFilter(); // TODO exception
+            throw new RuntimeException("Filter supports only the logical operator 'and'.");
         }
 
         final Pattern pattern = Pattern.compile("^(?<attribute>[a-zA-Z]+)\\s*(?<operator>(gt|lt))\\s*(?<date>\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z)");
@@ -65,8 +65,7 @@ public class Filter {
                         matcher.group("attribute"), matcher.group("operator"), matcher.group("date"))
                 );
             } else {
-                // TODO exception
-                return emptyFilter();
+                throw new RuntimeException("Filter does not accept this operation.");
             }
         }
 

+ 1 - 1
connector-module-afarcloud/src/main/java/io/connector/module/afarcloud/AFCHttpClient.java

@@ -83,7 +83,7 @@ public class AFCHttpClient {
 
         URLBuilder urlBuilder = URLBuilder.newBuilder(host.getDomain(), host.getPath());
 
-        if (filter.startTime != null) {
+        if (filter.startTime == null) {
             throw new RuntimeException("Parameter 'startTime' is required.");
         }
         urlBuilder.addParam("start_time", filter.startTime());

+ 24 - 3
connector-module-afarcloud/src/main/java/io/connector/module/afarcloud/gateway/OGCSensorThingsGateway.java

@@ -231,7 +231,14 @@ public class OGCSensorThingsGateway extends AbstractGateway {
             RequestUriComponent uriComponent = parseUriToComponents(ctx.request());
             String id = ctx.pathParam("id"); // resourceUrn + observedProperty
             String filterParam = ctx.request().getParam("filter");
-            io.connector.model.sensorthings.Filter filter = io.connector.model.sensorthings.Filter.parse(filterParam);
+
+            io.connector.model.sensorthings.Filter filter = null;
+            try {
+                filter = io.connector.model.sensorthings.Filter.parse(filterParam);
+            } catch (RuntimeException e) {
+                ctx.response().setStatusCode(501).end(new JsonObject()
+                        .put("message", e.getMessage()).encode()); return;
+            }
 
             String [] idCmp = Converter.disassemblyId(id);
             String resourceUrn = idCmp[0], observedProperty = idCmp[1];
@@ -370,7 +377,14 @@ public class OGCSensorThingsGateway extends AbstractGateway {
             RequestUriComponent uriComponent = parseUriToComponents(ctx.request());
             String resourceUrn = ctx.pathParam("id"); // resourceUrn
             String filterParam = ctx.request().getParam("filter");
-            io.connector.model.sensorthings.Filter filter = io.connector.model.sensorthings.Filter.parse(filterParam);
+
+            io.connector.model.sensorthings.Filter filter = null;
+            try {
+                filter = io.connector.model.sensorthings.Filter.parse(filterParam);
+            } catch (RuntimeException e) {
+                ctx.response().setStatusCode(501).end(new JsonObject()
+                        .put("message", e.getMessage()).encode()); return;
+            }
 
             MultiSensor afcMultiSensor = client.getSensorByResourceUrn(resourceUrn);
             List<ResourceMeasurement> afcMeasurements;
@@ -407,7 +421,14 @@ public class OGCSensorThingsGateway extends AbstractGateway {
             RequestUriComponent uriComponent = parseUriToComponents(ctx.request());
             String id = ctx.pathParam("id"); // resourceUrn + observedProperty + time
             String filterParam = ctx.request().getParam("filter");
-            io.connector.model.sensorthings.Filter filter = io.connector.model.sensorthings.Filter.parse(filterParam);
+
+            io.connector.model.sensorthings.Filter filter = null;
+            try {
+                filter = io.connector.model.sensorthings.Filter.parse(filterParam);
+            } catch (RuntimeException e) {
+                ctx.response().setStatusCode(501).end(new JsonObject()
+                        .put("message", e.getMessage()).encode()); return;
+            }
 
             String [] idCmp = Converter.disassemblyId(id);
             String resourceUrn = idCmp[0], observedProperty = idCmp[1], time = idCmp[2];