diff --git a/modules/CouplingCommunication.java b/modules/CouplingCommunication.java index 76a30a1f89aa77d9aadb392bfca8f81618cafac9..150ae199837041dd1b31ab61b09359ff977bcff2 100644 --- a/modules/CouplingCommunication.java +++ b/modules/CouplingCommunication.java @@ -39,6 +39,7 @@ import java.net.Socket; import org.json.JSONObject; import org.json.JSONArray; +import jams.JAMSException; /** * @@ -298,8 +299,27 @@ public class CouplingCommunication extends JAMSComponent { return result; } - public String getAttribAllHruList(List<String> attributes) { + public String getAttribAllHruList(List<String> attributes, List<Long> requestedIds) { Iterator<Attribute.Entity> hruIterator = hrus.getEntities().iterator(); + List<Attribute.Entity> requestedEntities = new ArrayList(); // used only if some entities are requested + long id; + if (!requestedIds.isEmpty()){ + Iterator<Long> idsIterator = requestedIds.iterator(); + while(idsIterator.hasNext()) { + Attribute.Entity selectedEntity; + id = idsIterator.next(); + selectedEntity = hrus.getEntity(id); + try{ + if(selectedEntity == null){ + throw new JAMSException("Hru nb "+id+" not found in Hrus"); + } + } catch(Exception e) { + return("Hru nb "+id+" not found in Hrus"); + } + requestedEntities.add(selectedEntity); + } + hruIterator = requestedEntities.iterator(); + } Attribute.Entity hru; Double value; Double hruId; @@ -328,8 +348,27 @@ public class CouplingCommunication extends JAMSComponent { return result; } - public String getAttribAllReachList(List<String> attributes) { + public String getAttribAllReachList(List<String> attributes, List<Long> requestedIds) { Iterator<Attribute.Entity> reachIterator = reachs.getEntities().iterator(); + List<Attribute.Entity> requestedEntities = new ArrayList(); // used only if some entities are requested + long id; + if (!requestedIds.isEmpty()){ + Iterator<Long> idsIterator = requestedIds.iterator(); + while(idsIterator.hasNext()) { + Attribute.Entity selectedEntity; + id = idsIterator.next(); + selectedEntity = reachs.getEntity(id); + try{ + if(selectedEntity == null){ + throw new JAMSException("Reach nb "+id+" not found in reachs"); + } + } catch(Exception e) { + return("Reach nb "+id+" not found in reachs"); + } + requestedEntities.add(selectedEntity); + } + reachIterator = requestedEntities.iterator(); + } Attribute.Entity reach; Double value; Double reachId; @@ -751,12 +790,19 @@ public class CouplingCommunication extends JAMSComponent { commandIsGet = true; if (jsonPayload.has("keys") && !jsonPayload.isNull("keys")) { JSONArray jsonArray = jsonPayload.getJSONArray("keys"); - List<String> keys = new ArrayList(); - for (int i = 0; i < jsonArray.length();i++){ - keys.add(jsonArray.getString(i)); - //log("an attribute name:" + jsonArray.getString(i)); - }; - out.print(getAttribAllHruList(keys)); + List<String> keys = new ArrayList(); + for (int i = 0; i < jsonArray.length();i++){ + keys.add(jsonArray.getString(i)); + //log("an attribute name:" + jsonArray.getString(i)); + }; + List<Long> ids = new ArrayList(); + if (jsonPayload.has("ids") && !jsonPayload.isNull("ids")) { + jsonArray = jsonPayload.getJSONArray("ids"); + for (int i = 0; i < jsonArray.length();i++){ + ids.add(jsonArray.getLong(i)); + }; + } + out.print(getAttribAllHruList(keys, ids)); } sAcceptConnection.release(); } else if (command.equals("getReach")) { @@ -765,10 +811,17 @@ public class CouplingCommunication extends JAMSComponent { JSONArray jsonArray = jsonPayload.getJSONArray("keys"); List<String> keys = new ArrayList(); for (int i = 0; i < jsonArray.length();i++){ - keys.add(jsonArray.getString(i)); - //log("an attribute name:" + jsonArray.getString(i)); - }; - out.print(getAttribAllReachList(keys)); + keys.add(jsonArray.getString(i)); + //log("an attribute name:" + jsonArray.getString(i)); + }; + List<Long> ids = new ArrayList(); + if (jsonPayload.has("ids") && !jsonPayload.isNull("ids")) { + jsonArray = jsonPayload.getJSONArray("ids"); + for (int i = 0; i < jsonArray.length();i++){ + ids.add(jsonArray.getLong(i)); + }; + } + out.print(getAttribAllReachList(keys, ids)); } sAcceptConnection.release(); } else if (command.equals("getHruSum")) {