Implement di based resource search.
Previously, RT or IF required
Change-Id: Id6b0c21e7abcc597f5ce532d876fbe0e3ca7872a
Signed-off-by: Jee Hyeok Kim <jihyeok13.kim@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/9743
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Eunok Shin <eunok.shin@samsung.com>
ArrayList<String> 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 {
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);
return mMongoDB.createRDResource(pubResourceList, Constants.RD_TABLE);
}
- public ArrayList<HashMap<Object, Object>> findResourceAboutDi(String di,
+ public ArrayList<HashMap<Object, Object>> findResourceAboutDi(String di) {
+ return mMongoDB.readResourceAboutDid(di, Constants.RD_TABLE);
+ }
+
+ public ArrayList<HashMap<Object, Object>> findResourceAboutDiAndFilter(String di,
String key, String value) {
- return mMongoDB.readResourceAboutDid(di, key, value,
+ return mMongoDB.readResourceAboutDidAndFilter(di, key, value,
Constants.RD_TABLE);
}
return deviceState;
}
+ public ArrayList<HashMap<Object, Object>> readResourceAboutDid(String di, String tableName) {
+ MongoCollection<Document> collection = db.getCollection(tableName);
+ ArrayList<HashMap<Object, Object>> resList = null;
+ MongoCursor<Document> 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
* @return ArrayList<PublishPayloadFormat> - array list of resource
* information
*/
- public ArrayList<HashMap<Object, Object>> readResourceAboutDid(String di,
+ public ArrayList<HashMap<Object, Object>> readResourceAboutDidAndFilter(String di,
String filterKey, String filterValue, String tableName) {
MongoCollection<Document> collection = db.getCollection(tableName);
ArrayList<HashMap<Object, Object>> resList = null;
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;
List<String> listRT = queryMap.get(Constants.RESOURCE_TYPE);
List<String> listITF = queryMap.get(Constants.INTERFACE);
- String key, value = null;
+ String key = null, value = null;
ArrayList<HashMap<Object, Object>> foundResList = null;
// TODO: Multiple RT or ITF support required
} 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));
}