diff --git a/src/main/java/iudx/connector/ngsild/QueryMapper.java b/src/main/java/iudx/connector/ngsild/QueryMapper.java index baadfb4..03ed56b 100644 --- a/src/main/java/iudx/connector/ngsild/QueryMapper.java +++ b/src/main/java/iudx/connector/ngsild/QueryMapper.java @@ -1,12 +1,10 @@ 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; @@ -14,12 +12,16 @@ 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)); }); @@ -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 queryTerms = getQueryTerms(e); rootNode.put("attribute-name", queryTerms.get(0)); rootNode.put("attribute-value", queryTerms.get(2)); @@ -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")) { @@ -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; } @@ -106,6 +122,7 @@ private List getQueryTerms(String queryTerms) { } private Object mapperDataTypeHelper(String key, Map.Entry entry) { + logger.info("inside mapperDataTypeHelper : key ::: "+ key+ " entry :: "+entry); if (key.equalsIgnoreCase("id")) { return entry.getValue(); } @@ -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();