[iotcon] Implementation of Resource.addResourceTypes()/addResourceInterfaces().
authorPawel Andruszkiewicz <p.andruszkie@samsung.com>
Wed, 10 Feb 2016 13:17:57 +0000 (14:17 +0100)
committerPawel Andruszkiewicz <p.andruszkie@samsung.com>
Mon, 15 Feb 2016 13:52:54 +0000 (22:52 +0900)
Change-Id: If653e1422b88dfdbc07c69ac3413af82a5b95ded
Signed-off-by: Pawel Andruszkiewicz <p.andruszkie@samsung.com>
src/iotcon/iotcon_api.js
src/iotcon/iotcon_instance.cc
src/iotcon/iotcon_instance.h

index e51b588..f51d369 100644 (file)
@@ -338,43 +338,46 @@ Resource.prototype.notify = function() {
   }
 };
 
-Resource.prototype.addResourceTypes = function() {
+Resource.prototype.addResourceType = function() {
   var args = validator.validateMethod(arguments, [{
-    name: 'types',
-    type: types.ARRAY,
-    values: types.STRING,
-    optional: false,
-    nullable: false
+    name: 'type',
+    type: types.STRING
   }]);
 
   var callArgs = {};
   callArgs.id = this[kIdKey];
-  callArgs.types = args.types;
+  callArgs.type = args.type;
 
-  var result = native.call('IotconResource_addResourceTypes', callArgs);
+  var result = native.callSync('IotconResource_addResourceType', callArgs);
 
   if (native.isFailure(result)) {
     throw native.getErrorObject(result);
+  } else {
+    var t = this.resourceTypes;
+    t.push(args.type);
+    updateWithInternalData({ resourceTypes: t }, this);
   }
 };
 
-Resource.prototype.addResourceInterfaces = function() {
+Resource.prototype.addResourceInterface = function() {
   var args = validator.validateMethod(arguments, [{
-    name: 'interfaces',
-    type: types.ARRAY,
-    values: ResourceInterface,
-    optional: false,
-    nullable: false
+    name: 'iface',
+    type: types.ENUM,
+    values: T.getValues(ResourceInterface)
   }]);
 
   var callArgs = {};
   callArgs.id = this[kIdKey];
-  callArgs.interfaces = args.interfaces;
+  callArgs.iface = args.iface;
 
-  var result = native.call('IotconResource_addResourceInterfaces', callArgs);
+  var result = native.callSync('IotconResource_addResourceInterface', callArgs);
 
   if (native.isFailure(result)) {
     throw native.getErrorObject(result);
+  } else {
+    var interfaces = this.resourceInterfaces;
+    interfaces.push(args.iface);
+    updateWithInternalData({ resourceInterfaces: interfaces }, this);
   }
 };
 
index 1fac061..a065718 100644 (file)
@@ -59,6 +59,8 @@ const common::ListenerToken kResourceRequestListenerToken{"ResourceRequestListen
 const std::string kObserverIds = "observerIds";
 const std::string kQos = "qos";
 const std::string kChildId = "childId";
+const std::string kType = "type";
+const std::string kInterface = "iface";
 
 }  // namespace
 
@@ -73,6 +75,8 @@ IotconInstance::IotconInstance() {
 
   REGISTER_SYNC("IotconResource_getObserverIds", ResourceGetObserverIds);
   REGISTER_SYNC("IotconResource_notify", ResourceNotify);
+  REGISTER_SYNC("IotconResource_addResourceType", ResourceAddResourceType);
+  REGISTER_SYNC("IotconResource_addResourceInterface", ResourceAddResourceInterface);
   REGISTER_SYNC("IotconResource_addChildResource", ResourceAddChildResource);
   REGISTER_SYNC("IotconResource_removeChildResource", ResourceRemoveChildResource);
   REGISTER_SYNC("IotconResource_setRequestListener", ResourceSetRequestListener);
@@ -97,8 +101,6 @@ IotconInstance::IotconInstance() {
 #define REGISTER_ASYNC(c, x) \
   RegisterHandler(c, std::bind(&IotconInstance::x, this, _1, _2));
 
-  REGISTER_ASYNC("IotconResource_addResourceTypes", ResourceAddResourceTypes);
-  REGISTER_ASYNC("IotconResource_addResourceInterfaces", ResourceAddResourceInterfaces);
   REGISTER_ASYNC("IotconRemoteResource_methodGet", RemoteResourceMethodGet);
   REGISTER_ASYNC("IotconRemoteResource_methodPut", RemoteResourceMethodPut);
   REGISTER_ASYNC("IotconRemoteResource_methodPost", RemoteResourceMethodPost);
@@ -252,16 +254,44 @@ common::TizenResult IotconInstance::ResourceNotify(const picojson::object& args)
   return common::TizenSuccess();
 }
 
-common::TizenResult IotconInstance::ResourceAddResourceTypes(const picojson::object& args,
-                                                             const common::AsyncToken& token) {
+common::TizenResult IotconInstance::ResourceAddResourceType(const picojson::object& args) {
   ScopeLogger();
-  return common::UnknownError("Not implemented");
+
+  CHECK_EXIST(args, kId);
+  CHECK_EXIST(args, kType);
+
+  ResourceInfoPtr resource;
+  auto result = IotconServerManager::GetInstance().GetResourceById(GetId(args), &resource);
+  if (!result) {
+    LogAndReturnTizenError(result, ("GetResourceById() failed"));
+  }
+
+  result = IotconUtils::ConvertIotconError(iotcon_resource_bind_type(resource->handle, GetArg(args, kType).get<std::string>().c_str()));
+  if (!result) {
+    LogAndReturnTizenError(result, ("iotcon_resource_bind_type() failed"));
+  }
+
+  return common::TizenSuccess();
 }
 
-common::TizenResult IotconInstance::ResourceAddResourceInterfaces(const picojson::object& args,
-                                                                  const common::AsyncToken& token) {
+common::TizenResult IotconInstance::ResourceAddResourceInterface(const picojson::object& args) {
   ScopeLogger();
-  return common::UnknownError("Not implemented");
+
+  CHECK_EXIST(args, kId);
+  CHECK_EXIST(args, kInterface);
+
+  ResourceInfoPtr resource;
+  auto result = IotconServerManager::GetInstance().GetResourceById(GetId(args), &resource);
+  if (!result) {
+    LogAndReturnTizenError(result, ("GetResourceById() failed"));
+  }
+
+  result = IotconUtils::ConvertIotconError(iotcon_resource_bind_interface(resource->handle, IotconUtils::ToInterface(GetArg(args, kInterface).get<std::string>())));
+  if (!result) {
+    LogAndReturnTizenError(result, ("iotcon_resource_bind_interface() failed"));
+  }
+
+  return common::TizenSuccess();
 }
 
 common::TizenResult IotconInstance::ResourceAddChildResource(const picojson::object& args) {
index 960ba49..abcc198 100644 (file)
@@ -33,10 +33,8 @@ class IotconInstance : public common::TizenInstance {
 
   common::TizenResult ResourceGetObserverIds(const picojson::object& args);
   common::TizenResult ResourceNotify(const picojson::object& args);
-  common::TizenResult ResourceAddResourceTypes(const picojson::object& args,
-                                               const common::AsyncToken& token);
-  common::TizenResult ResourceAddResourceInterfaces(const picojson::object& args,
-                                                    const common::AsyncToken& token);
+  common::TizenResult ResourceAddResourceType(const picojson::object& args);
+  common::TizenResult ResourceAddResourceInterface(const picojson::object& args);
   common::TizenResult ResourceAddChildResource(const picojson::object& args);
   common::TizenResult ResourceRemoveChildResource(const picojson::object& args);
   common::TizenResult ResourceSetRequestListener(const picojson::object& args);