Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 28 additions & 18 deletions src/main/java/iudx/connector/ngsild/QueryMapper.java
Original file line number Diff line number Diff line change
@@ -1,25 +1,27 @@
package iudx.connector.ngsild;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import java.util.stream.Collectors;

import io.vertx.core.MultiMap;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;

public class QueryMapper {


private static final Logger logger=Logger.getLogger(QueryMapper.class.getName());

public JsonObject getIUDXQuery(MultiMap paramsMap) {
logger.info("query mapper function parameters received : \n"+paramsMap);
JsonObject rootNode = new JsonObject();
paramsMap.forEach(entry -> {
if (entry.getKey().equals("q"))
if (entry.getKey().equals("q") || entry.getKey().equalsIgnoreCase("geoproperty") || entry.getKey().equalsIgnoreCase("maxDistance"))
return;
logger.info("entry name => key : "+entry.getKey()+" value : "+entry.getValue() );
rootNode.put(NGSI2IUDXMapping.valueOf(entry.getKey()).getValue(),
this.mapperDataTypeHelper(entry.getKey(), entry));
});
Expand All @@ -37,11 +39,9 @@ public JsonObject getIUDXQuery(MultiMap paramsMap) {

if (paramsMap.contains("q")) {
String qFilter = paramsMap.get("q");
System.out.println("qFilter " + qFilter);
String[] options = qFilter.split(";");
System.out.println("options " + options);
//System.out.println("options " + options);
Arrays.stream(options).forEach(e -> {
System.out.println(e);
List<String> queryTerms = getQueryTerms(e);
rootNode.put("attribute-name", queryTerms.get(0));
rootNode.put("attribute-value", queryTerms.get(2));
Expand All @@ -51,8 +51,7 @@ public JsonObject getIUDXQuery(MultiMap paramsMap) {
}

if (paramsMap.contains("geometry") && paramsMap.contains("coordinates") && paramsMap.contains("georel")) {
String coordinates = paramsMap.get("coordinates").replaceAll("\\[|\\]",
"");
String coordinates = rootNode.getString("coordinates").replaceAll("\\[|\\]","");
String geomType = paramsMap.get("geometry");
String georel = paramsMap.get("georel");
if (geomType.equalsIgnoreCase("polygon")) {
Expand All @@ -68,7 +67,24 @@ else if (geomType.equalsIgnoreCase("LineString")
}
else if (geomType.equalsIgnoreCase("point")) {
//handle probable circle geom here.
String radius = null;
if(paramsMap.contains("maxDistance") || paramsMap.contains("maxdistance"))
radius=paramsMap.get("maxDistance").substring(1);
String[] lat_lon=coordinates.replaceAll("\\[|\\]","").split(",");
String lon=lat_lon[0];
String lat=lat_lon[1];


rootNode.put("radius", radius);
rootNode.put("lon", lon);
rootNode.put("lat", lat);

rootNode.remove("relation");// remove relation node from final json
rootNode.remove("geometry");// remove geometry node as it is not required in circle case.
rootNode.remove("options");
}
rootNode.remove("coordinates");//remove coordinates from final json object -> translated to geometry;
rootNode.remove("georel");//remove georel from final jsonobject;
}
return rootNode;
}
Expand Down Expand Up @@ -106,6 +122,7 @@ private List<String> getQueryTerms(String queryTerms) {
}

private Object mapperDataTypeHelper(String key, Map.Entry<String, String> entry) {
logger.info("inside mapperDataTypeHelper : key ::: "+ key+ " entry :: "+entry);
if (key.equalsIgnoreCase("id")) {
return entry.getValue();
}
Expand All @@ -120,14 +137,7 @@ else if (key.equalsIgnoreCase("geometry")) {
return entry.getValue();
}
else if (key.equalsIgnoreCase("coordinates")) {
try {
return URLDecoder.decode(entry.getValue(),
StandardCharsets.UTF_8.toString());
}
catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return "";
return entry.getValue();
}
else if (key.equals("timerel")) {
return entry.getValue().toString();
Expand Down