[Contact] AddressBook.find implementation (without filters & sorting)
authorRafal Galka <r.galka@samsung.com>
Mon, 29 Dec 2014 08:42:45 +0000 (09:42 +0100)
committerRafal Galka <r.galka@samsung.com>
Mon, 29 Dec 2014 10:10:13 +0000 (19:10 +0900)
[Verification]
TCT test "AddressBook_find" should pass

Change-Id: Ibde12ed4351ed2d70e1279c209fd009a4f0ad02a
Signed-off-by: Wojciech Kosowicz <w.kosowicz@samsung.com>
src/contact/addressbook.cc
src/contact/addressbook.h
src/contact/contact_instance.cc

index 72e6aad..10a9b08 100644 (file)
@@ -268,11 +268,50 @@ void AddressBook_batchFunc(/*NativeFunction impl, */const char* single_arg_name,
   throw common::NotFoundException("Not implemented");
 }
 
-void AddressBook_find(const JsonObject& args, JsonObject&) {
+void AddressBook_find(const JsonObject& args, JsonArray& array) {
   ContactUtil::CheckDBConnection();
 
-  // @todo implement
-  throw common::NotFoundException("Not implemented");
+  // TODO implement contact filter and sorting.
+  const JsonObject& address_book = FromJson<JsonObject>(args, "addressBook");
+  long addressbook_id = common::stol(FromJson<std::string>(address_book, "id"));
+  // Read calendar by ID
+  int error_code = 0;
+
+  contacts_query_h query = nullptr;
+  contacts_filter_h filter = nullptr;
+  contacts_list_h list = nullptr;
+
+  error_code = contacts_query_create(_contacts_contact._uri, &query);
+  ContactUtil::ErrorChecker(error_code, "Failed contacts_query_create");
+  ContactUtil::ContactsQueryHPtr query_ptr(&query, ContactUtil::ContactsQueryDeleter);
+  error_code = contacts_filter_create(_contacts_contact._uri, &filter);
+  ContactUtil::ErrorChecker(error_code, "Failed contacts_filter_create");
+  ContactUtil::ContactsFilterPtr filter_ptr(filter, ContactUtil::ContactsFilterDeleter);
+  error_code = contacts_filter_add_int(filter, _contacts_contact.address_book_id,
+                                       CONTACTS_MATCH_EQUAL, addressbook_id);
+  ContactUtil::ErrorChecker(error_code, "Failed contacts_filter_add_int");
+  error_code = contacts_query_set_filter(query, filter);
+  ContactUtil::ErrorChecker(error_code, "Failed contacts_query_set_filter");
+  error_code = contacts_db_get_records_with_query(query, 0, 0, &list);
+  ContactUtil::ErrorChecker(error_code, "Failed contacts_db_get_records_with_query");
+  ContactUtil::ContactsListHPtr list_ptr(&list, ContactUtil::ContactsListDeleter);
+
+  int record_count = 0;
+  error_code = contacts_list_get_count(list, &record_count);
+
+  contacts_list_first(list);
+  for (unsigned int i = 0; i < record_count; i++) {
+    contacts_record_h record;
+    error_code = contacts_list_get_current_record_p(list, &record);
+    ContactUtil::ErrorChecker(error_code, "Failed contacts_list_get_current_record_p");
+
+    int id_value = 0;
+    error_code = contacts_record_get_int(record, _contacts_contact.id, &id_value);
+    ContactUtil::ErrorChecker(error_code, "Failed contacts_record_get_int");
+
+    array.push_back(JsonValue(static_cast<double>(id_value)));
+    contacts_list_next(list);
+  }
 }
 
 void AddressBook_addGroup(const JsonObject& args, JsonObject& out) {
index c5fe962..7b01ce1 100644 (file)
@@ -28,7 +28,7 @@ void AddressBook_get(const JsonObject& args, JsonObject& out);
 void AddressBook_add(const JsonObject& args, JsonObject& out);
 void AddressBook_update(const JsonObject& args, JsonObject& out);
 void AddressBook_remove(const JsonObject& args, JsonObject&);
-void AddressBook_find(const JsonObject& args, JsonObject&);
+void AddressBook_find(const JsonObject& args, JsonArray& array);
 void AddressBook_addGroup(const JsonObject& args, JsonObject& out);
 void AddressBook_getGroup(const JsonObject& args, JsonObject& out);
 void AddressBook_updateGroup(const JsonObject& args, JsonObject&);
index 911389a..f43209e 100644 (file)
@@ -52,7 +52,7 @@ ContactInstance::ContactInstance() {
   REGISTER_SYNC("AddressBook_add", AddressBook_add);
   REGISTER_SYNC("AddressBook_update", AddressBook_update);
   REGISTER_SYNC("AddressBook_remove", AddressBook_remove);
-  REGISTER_SYNC("AddressBook_find", AddressBook_find);
+  REGISTER_ASYNC("AddressBook_find", AddressBook_find);
   REGISTER_SYNC("AddressBook_addGroup", AddressBook_addGroup);
   REGISTER_SYNC("AddressBook_getGroup", AddressBook_getGroup);
   REGISTER_SYNC("AddressBook_updateGroup", AddressBook_updateGroup);
@@ -129,10 +129,30 @@ void ContactInstance::AddressBook_remove(const JsonValue& args,
 }
 
 void ContactInstance::AddressBook_find(const JsonValue& args, JsonObject& out) {
-  JsonValue val{JsonObject{}};
-  AddressBook::AddressBook_find(common::JsonCast<JsonObject>(args),
-                                val.get<JsonObject>());
-  ReportSuccess(out);
+  LoggerD("entered");
+  const double callback_id = args.get("callbackId").get<double>();
+
+  auto get = [=](const std::shared_ptr <JsonValue>& response) -> void {
+    try {
+      JsonValue result = JsonValue(JsonArray());
+      AddressBook::AddressBook_find(common::JsonCast<JsonObject>(args),
+          result.get<JsonArray>());
+      ReportSuccess(result, response->get<picojson::object>());
+    } catch (const PlatformException& e) {
+      ReportError(e, response->get<picojson::object>());
+    }
+  };
+
+  auto get_response = [this, callback_id](const std::shared_ptr <JsonValue>& response) {
+    picojson::object& obj = response->get<picojson::object>();
+    obj.insert(std::make_pair("callbackId", callback_id));
+    LoggerD("response is %s", response->serialize().c_str());
+    PostMessage(response->serialize().c_str());
+
+  };
+
+  TaskQueue::GetInstance().Queue<JsonValue>(get, get_response,
+      std::shared_ptr<JsonValue>(new JsonValue(JsonObject())));
 }
 
 void ContactInstance::AddressBook_addGroup(const JsonValue& args,