From: Jee Hyeok Kim Date: Wed, 27 Jul 2016 01:46:46 +0000 (+0900) Subject: Add DI based resource search through /oic/res X-Git-Tag: 1.2.0+RC1~70^2~31 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e66ea78221f4f14565c8bc61078810b9ebefd48b;p=platform%2Fupstream%2Fiotivity.git Add DI based resource search through /oic/res Implement di based resource search. Previously, RT or IF required Change-Id: Id6b0c21e7abcc597f5ce532d876fbe0e3ca7872a Signed-off-by: Jee Hyeok Kim Reviewed-on: https://gerrit.iotivity.org/gerrit/9743 Tested-by: jenkins-iotivity Reviewed-by: Eunok Shin --- diff --git a/cloud/account/src/main/java/org/iotivity/cloud/accountserver/resources/account/device/DeviceResource.java b/cloud/account/src/main/java/org/iotivity/cloud/accountserver/resources/account/device/DeviceResource.java index 8d5a600..2f96301 100644 --- a/cloud/account/src/main/java/org/iotivity/cloud/accountserver/resources/account/device/DeviceResource.java +++ b/cloud/account/src/main/java/org/iotivity/cloud/accountserver/resources/account/device/DeviceResource.java @@ -96,9 +96,8 @@ public class DeviceResource extends Resource { ArrayList deviceList = mAsManager.requestAccountDevices(userId); - if (request.getUriQueryMap().get("di") != null) { - String di = request.getUriQueryMap().get("di").get(0); - if (deviceList.contains(di)) { + if (request.getUriQueryMap().get("di") != null) { + if (deviceList.containsAll(request.getUriQueryMap().get("di"))) { return MessageBuilder.createResponse(request, ResponseStatus.VALID); } else { diff --git a/cloud/interface/src/main/java/org/iotivity/cloud/ciserver/resources/proxy/ResourceFind.java b/cloud/interface/src/main/java/org/iotivity/cloud/ciserver/resources/proxy/ResourceFind.java index dcee4ba..7ec2ad0 100644 --- a/cloud/interface/src/main/java/org/iotivity/cloud/ciserver/resources/proxy/ResourceFind.java +++ b/cloud/interface/src/main/java/org/iotivity/cloud/ciserver/resources/proxy/ResourceFind.java @@ -119,8 +119,7 @@ public class ResourceFind extends Resource { uriQuery.append(coapDevice.getAccessToken()); if (request.getUriQueryMap().get("di") != null) { - String di = request.getUriQueryMap().get("di").get(0); - if (di != null) { + for(String di : request.getUriQueryMap().get("di")){ uriQuery.append("&"); uriQuery.append("di" + "="); uriQuery.append(di); diff --git a/cloud/resourcedirectory/src/main/java/org/iotivity/cloud/rdserver/db/DBManager.java b/cloud/resourcedirectory/src/main/java/org/iotivity/cloud/rdserver/db/DBManager.java index 655fec2..aefb1bb 100644 --- a/cloud/resourcedirectory/src/main/java/org/iotivity/cloud/rdserver/db/DBManager.java +++ b/cloud/resourcedirectory/src/main/java/org/iotivity/cloud/rdserver/db/DBManager.java @@ -52,9 +52,13 @@ public class DBManager { return mMongoDB.createRDResource(pubResourceList, Constants.RD_TABLE); } - public ArrayList> findResourceAboutDi(String di, + public ArrayList> findResourceAboutDi(String di) { + return mMongoDB.readResourceAboutDid(di, Constants.RD_TABLE); + } + + public ArrayList> findResourceAboutDiAndFilter(String di, String key, String value) { - return mMongoDB.readResourceAboutDid(di, key, value, + return mMongoDB.readResourceAboutDidAndFilter(di, key, value, Constants.RD_TABLE); } diff --git a/cloud/resourcedirectory/src/main/java/org/iotivity/cloud/rdserver/db/MongoDB.java b/cloud/resourcedirectory/src/main/java/org/iotivity/cloud/rdserver/db/MongoDB.java index eb820d9..cd0dacd 100644 --- a/cloud/resourcedirectory/src/main/java/org/iotivity/cloud/rdserver/db/MongoDB.java +++ b/cloud/resourcedirectory/src/main/java/org/iotivity/cloud/rdserver/db/MongoDB.java @@ -247,6 +247,28 @@ public class MongoDB { return deviceState; } + public ArrayList> readResourceAboutDid(String di, String tableName) { + MongoCollection collection = db.getCollection(tableName); + ArrayList> resList = null; + MongoCursor cursor = collection + .find(Filters.eq(Constants.DEVICE_ID, di)) + .iterator(); + + if (cursor.hasNext()) { + resList = new ArrayList<>(); + try { + while (cursor.hasNext()) { + Document doc = cursor.next(); + resList.add(convertDocumentToHashMap(doc)); + } + } finally { + cursor.close(); + } + } + + return resList; + } + /** * API for finding resources matched filterValue of filterKey and a * particular device ID in collection @@ -262,7 +284,7 @@ public class MongoDB { * @return ArrayList - array list of resource * information */ - public ArrayList> readResourceAboutDid(String di, + public ArrayList> readResourceAboutDidAndFilter(String di, String filterKey, String filterValue, String tableName) { MongoCollection collection = db.getCollection(tableName); ArrayList> resList = null; @@ -273,14 +295,14 @@ public class MongoDB { if (cursor.hasNext()) { resList = new ArrayList<>(); - } - try { - while (cursor.hasNext()) { - Document doc = cursor.next(); - resList.add(convertDocumentToHashMap(doc)); + try { + while (cursor.hasNext()) { + Document doc = cursor.next(); + resList.add(convertDocumentToHashMap(doc)); + } + } finally { + cursor.close(); } - } finally { - cursor.close(); } return resList; diff --git a/cloud/resourcedirectory/src/main/java/org/iotivity/cloud/rdserver/resources/directory/res/DiscoveryResource.java b/cloud/resourcedirectory/src/main/java/org/iotivity/cloud/rdserver/resources/directory/res/DiscoveryResource.java index 1236c43..ef91fb5 100644 --- a/cloud/resourcedirectory/src/main/java/org/iotivity/cloud/rdserver/resources/directory/res/DiscoveryResource.java +++ b/cloud/resourcedirectory/src/main/java/org/iotivity/cloud/rdserver/resources/directory/res/DiscoveryResource.java @@ -90,7 +90,7 @@ public class DiscoveryResource extends Resource { List listRT = queryMap.get(Constants.RESOURCE_TYPE); List listITF = queryMap.get(Constants.INTERFACE); - String key, value = null; + String key = null, value = null; ArrayList> foundResList = null; // TODO: Multiple RT or ITF support required @@ -100,14 +100,16 @@ public class DiscoveryResource extends Resource { } else if (listITF != null) { key = Constants.INTERFACE; value = listITF.get(0); - } else { - throw new PreconditionFailedException( - "rt or if property is not included"); } - for (String deviceId : deviceList) { - foundResList = DBManager.getInstance().findResourceAboutDi(deviceId, - key, value); + for (String deviceId : deviceList) { + if(key != null && value != null){ + foundResList = DBManager.getInstance().findResourceAboutDiAndFilter(deviceId, + key, value); + } else { + foundResList = DBManager.getInstance().findResourceAboutDi(deviceId); + } + if (foundResList != null) { resourceList.add(makeDiscoveryPayloadSegment(foundResList)); }