[Contact] - ContactExtension added
authorAndrzej Popowski <a.popowski@samsung.com>
Thu, 7 Jan 2016 12:51:52 +0000 (13:51 +0100)
committerAndrzej Popowski <a.popowski@samsung.com>
Wed, 13 Jan 2016 08:02:12 +0000 (09:02 +0100)
Change-Id: I3be65fce0c7dd8f5ebabf7286b52eb6bc8fef15f
Signed-off-by: Andrzej Popowski <a.popowski@samsung.com>
src/contact/contact_extension.cc
src/contact/contact_util.cc
src/contact/contact_util.h
src/contact/js/contact.js
src/contact/js/contact_data_structures.js

index 3746a00525e25d0c63c002f08bac8d55b7123c88..b7bad1e3691883ec97dea9e269db815640755506 100755 (executable)
@@ -32,7 +32,8 @@ ContactExtension::ContactExtension() {
       "tizen.ContactPhoneNumber",      "tizen.ContactEmailAddress",
       "tizen.ContactGroup",            "tizen.ContactRelationship",
       "tizen.ContactInstantMessenger", "tizen.Contact",
-      "tizen.AddressBook",             NULL};
+      "tizen.AddressBook",             "tizen.ContactExtension",
+      NULL};
   SetExtraJSEntryPoints(entry_points);
 }
 
index 3ce66d0b89726344c8098e67de23cb4ce44b4e04..d12d72a184c580e6aff4fa4ac33b564054b1eea7 100755 (executable)
@@ -1635,6 +1635,227 @@ PlatformResult ExportContactRelationshipToContactsRecord(
   return PlatformResult(ErrorCode::NO_ERROR);
 }
 
+PlatformResult ImportContactExtensionFromContactsRecord(
+    contacts_record_h contacts_record, unsigned int index,
+    JsonObject* out_ptr) {
+  LoggerD("Enter");
+  // contacts_record is protected by unique_ptr and its ownership is not passed
+  // here
+  if (!contacts_record) {
+    return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Contacts record is null");
+  }
+
+  contacts_record_h child_record = nullptr;
+  int err = contacts_record_get_child_record_at_p(
+      contacts_record, _contacts_contact.extension, index, &child_record);
+  if (CONTACTS_ERROR_NONE != err && CONTACTS_ERROR_NO_DATA != err) {
+    return PlatformResult(ErrorCode::NO_ERROR);
+  }
+
+  int data1 = 0;
+  PlatformResult status = ContactUtil::GetIntFromRecord(child_record,
+                                                        _contacts_extension.data1, &data1);
+  if (status.IsError()) {
+    LoggerE("Error: %s", status.message().c_str());
+    return status;
+  }
+  out_ptr->insert(std::make_pair(std::string("data1"),
+             picojson::value(data1 ? JsonValue{static_cast<double>(data1)} : JsonValue{})));
+
+  auto insert_data = [&](unsigned int id, const std::string& label) {
+    char* data = nullptr;
+    status = ContactUtil::GetStrFromRecord(child_record, id, &data);
+    if (status && data) {
+      out_ptr->insert(std::make_pair(std::string(label),
+                              picojson::value(JsonString{data})));
+    }
+  };
+
+  insert_data(_contacts_extension.data2, "data2");
+  if (!status) {
+    LoggerE("Error: %s", status.message().c_str());
+    return status;
+  }
+
+  insert_data(_contacts_extension.data3, "data3");
+  if (!status) {
+    LoggerE("Error: %s", status.message().c_str());
+    return status;
+  }
+
+  insert_data(_contacts_extension.data4, "data4");
+  if (!status) {
+    LoggerE("Error: %s", status.message().c_str());
+    return status;
+  }
+
+  insert_data(_contacts_extension.data5, "data5");
+  if (!status) {
+    LoggerE("Error: %s", status.message().c_str());
+    return status;
+  }
+
+  insert_data(_contacts_extension.data6, "data6");
+  if (!status) {
+    LoggerE("Error: %s", status.message().c_str());
+    return status;
+  }
+
+  insert_data(_contacts_extension.data7, "data7");
+  if (!status) {
+    LoggerE("Error: %s", status.message().c_str());
+    return status;
+  }
+
+  insert_data(_contacts_extension.data8, "data8");
+  if (!status) {
+    LoggerE("Error: %s", status.message().c_str());
+    return status;
+  }
+
+  insert_data(_contacts_extension.data9, "data9");
+  if (!status) {
+    LoggerE("Error: %s", status.message().c_str());
+    return status;
+  }
+
+  insert_data(_contacts_extension.data10, "data10");
+  if (!status) {
+    LoggerE("Error: %s", status.message().c_str());
+    return status;
+  }
+
+  insert_data(_contacts_extension.data11, "data11");
+  if (!status) {
+    LoggerE("Error: %s", status.message().c_str());
+    return status;
+  }
+
+  insert_data(_contacts_extension.data12, "data12");
+  if (!status) {
+    LoggerE("Error: %s", status.message().c_str());
+    return status;
+  }
+
+  return PlatformResult(ErrorCode::NO_ERROR);
+}
+
+PlatformResult ExportContactExtensionToContactsRecord(
+    contacts_record_h contacts_record, const JsonObject& in) {
+  LoggerD("Enter");
+  // contacts_record is protected by unique_ptr and its ownership is not passed
+  // here
+
+  if (!contacts_record) {
+    return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Contacts record is null");
+  }
+
+  contacts_record_h child_record = nullptr;
+  int err = contacts_record_create(_contacts_extension._uri, &child_record);
+  PlatformResult status =
+      ContactUtil::ErrorChecker(err, "Fail to create child_record in database");
+  if (status.IsError()) {
+    LoggerE("Error: %s", status.message().c_str());
+    return status;
+  }
+
+  ContactsRecordHPtr record(&child_record, ContactsDeleter);
+
+  status = ContactUtil::SetIntInRecord(
+      child_record, _contacts_extension.data1, static_cast<int>(FromJson<double>(in, "data1")));
+  if (status.IsError()) {
+    LoggerE("Error: %s", status.message().c_str());
+    return status;
+  }
+
+  auto set_data = [&](int id, const char* label) {
+    if (!IsNull(in, label)) {
+      status = ContactUtil::SetStrInRecord(
+          child_record, id,
+          FromJson<JsonString>(in, label).c_str());
+    }
+  };
+
+  set_data(_contacts_extension.data2, "data2");
+  if (status.IsError()) {
+    LoggerE("Error: %s", status.message().c_str());
+    return status;
+  }
+
+  set_data(_contacts_extension.data3, "data3");
+  if (status.IsError()) {
+    LoggerE("Error: %s", status.message().c_str());
+    return status;
+  }
+
+  set_data(_contacts_extension.data4, "data4");
+  if (status.IsError()) {
+    LoggerE("Error: %s", status.message().c_str());
+    return status;
+  }
+
+  set_data(_contacts_extension.data5, "data5");
+  if (status.IsError()) {
+    LoggerE("Error: %s", status.message().c_str());
+    return status;
+  }
+
+  set_data(_contacts_extension.data6, "data6");
+  if (status.IsError()) {
+    LoggerE("Error: %s", status.message().c_str());
+    return status;
+  }
+
+  set_data(_contacts_extension.data7, "data7");
+  if (status.IsError()) {
+    LoggerE("Error: %s", status.message().c_str());
+    return status;
+  }
+
+  set_data(_contacts_extension.data8, "data8");
+  if (status.IsError()) {
+    LoggerE("Error: %s", status.message().c_str());
+    return status;
+  }
+
+  set_data(_contacts_extension.data9, "data9");
+  if (status.IsError()) {
+    LoggerE("Error: %s", status.message().c_str());
+    return status;
+  }
+
+  set_data(_contacts_extension.data10, "data10");
+  if (status.IsError()) {
+    LoggerE("Error: %s", status.message().c_str());
+    return status;
+  }
+
+  set_data(_contacts_extension.data11, "data11");
+  if (status.IsError()) {
+    LoggerE("Error: %s", status.message().c_str());
+    return status;
+  }
+
+  set_data(_contacts_extension.data12, "data12");
+  if (status.IsError()) {
+    LoggerE("Error: %s", status.message().c_str());
+    return status;
+  }
+
+  err = contacts_record_add_child_record(
+      contacts_record, _contacts_contact.extension, child_record);
+  status = ContactUtil::ErrorChecker(
+      err, "Fail to set number value to child_record");
+  if (status.IsError()) {
+    LoggerE("Error: %s", status.message().c_str());
+    return status;
+  }
+
+  record.release();
+
+  return PlatformResult(ErrorCode::NO_ERROR);
+}
+
 PlatformResult ImportContactInstantMessengerFromContactsRecord(
     contacts_record_h contacts_record, unsigned int index,
     JsonObject* out_ptr) {
@@ -2242,6 +2463,8 @@ PlatformResult ImportContactFromContactsRecord(
           ImportContactInstantMessengerFromContactsRecord},
       {"relationships", _contacts_contact.relationship,
           ImportContactRelationshipFromContactsRecord},
+      {"extensions", _contacts_contact.extension,
+          ImportContactExtensionFromContactsRecord}
   };
 
   for (auto& data : imports) {
@@ -2415,6 +2638,8 @@ PlatformResult ExportContactToContactsRecord(contacts_record_h contacts_record,
           ExportContactInstantMessengerToContactsRecord},
       {_contacts_contact.relationship, "relationships",
           ExportContactRelationshipToContactsRecord},
+      {_contacts_contact.extension, "extensions",
+          ExportContactExtensionToContactsRecord},
   };
 
   for (auto& data : exports) {
index ed806575f719c57851cebd8e60b7e1113663e0fb..2089693f4d9c6048795171ba65d86f7511558a55 100644 (file)
@@ -119,6 +119,10 @@ common::PlatformResult ImportContactRelationshipFromContactsRecord(
     contacts_record_h contacts_record, unsigned int index, JsonObject *out);
 common::PlatformResult ExportContactRelationshipToContactsRecord(
     contacts_record_h contacts_record, const JsonObject &in);
+common::PlatformResult ImportContactExtensionFromContactsRecord(
+    contacts_record_h contacts_record, unsigned int index, JsonObject *out);
+common::PlatformResult ExportContactExtensionToContactsRecord(
+    contacts_record_h contacts_record, const JsonObject &in);
 common::PlatformResult ImportContactInstantMessengerFromContactsRecord(
     contacts_record_h contacts_record, unsigned int index, JsonObject *out);
 common::PlatformResult ExportContactInstantMessengerToContactsRecord(
index edf09d37c324e7d3183e91e5097e1f9be789b85a..1db49ffd5936b84aef58c2d8dd9a91d4c7e426c9 100755 (executable)
@@ -53,6 +53,7 @@ var Contact = function(data) {
   var _emails = [];
   var _messengers = [];
   var _relationships = [];
+  var _extensions = [];
   var _birthday = null;
   var _anniversaries = [];
   var _organizations = [];
@@ -210,6 +211,15 @@ var Contact = function(data) {
       },
       enumerable: true
     },
+    extensions: {
+      get: function() {
+        return _extensions;
+      },
+      set: function(v) {
+        _extensions = _sanitizeArray(v, ContactExtension, _extensions);
+      },
+      enumerable: true
+    },
     birthday: {
       get: function() {
         return _birthday;
@@ -479,6 +489,41 @@ var _contactRelationshipsToString = function(obj) {
   return str;
 };
 
+// Convert extension to string
+// Format:
+// X-EXTENSION:<data1>;<data2>;...;<data12>
+var _contactExtensionsToString = function(obj) {
+  var str = '';
+  var label = null;
+
+  if (obj.extensions === null || !type_.isArray(obj.extensions)) {
+    return '';
+  }
+  for (var i = 0; i < obj.extensions.length; i++) {
+    if (!obj.extensions[i] instanceof ContactExtension) {
+      return '';
+    }
+    str += 'X-EXTENSION:';
+
+    if (obj.extensions[i].data1 === null) {
+      str += '0';
+    } else {
+      str += String(obj.extensions[i].data1);
+    }
+
+    for (var j = 2; j <= 12; j++) {
+      str += ';';
+      label = 'data' + j;
+      if (obj.extensions[i][label] && obj.extensions[i][label].length > 0) {
+        str += obj.extensions[i][label];
+      }
+    }
+
+    str += '\n';
+  }
+  return str;
+};
+
 // Convert messengers to string
 var _contactInstantMessengeToString = function(obj) {
   if (obj.messengers.length === 0 || !obj.messengers[0] instanceof ContactInstantMessenger) {
@@ -554,6 +599,9 @@ Contact.prototype.convertToString = function(format) {
   // set relationship
   str += _contactRelationshipsToString(this);
 
+  // set extension
+  str += _contactExtensionsToString(this);
+
   // set emails
   str += _contactEmailToString(this);
 
@@ -579,9 +627,11 @@ Contact.prototype.convertToString = function(format) {
   str += _contactInstantMessengeToString(this);
 
   // set last revision
-  str += 'REV:' + this.lastUpdated.getYear() + '-' + this.lastUpdated.getMonth() +
-  '-' + this.lastUpdated.getDay() + 'T' + this.lastUpdated.getHours() + ':' +
-  this.lastUpdated.getMinutes() + ':' + this.lastUpdated.getSeconds() + 'Z\n';
+  if (this.lastUpdated) {
+    str += 'REV:' + this.lastUpdated.getYear() + '-' + this.lastUpdated.getMonth() +
+    '-' + this.lastUpdated.getDay() + 'T' + this.lastUpdated.getHours() + ':' +
+    this.lastUpdated.getMinutes() + ':' + this.lastUpdated.getSeconds() + 'Z\n';
+  }
 
   str += 'END:VCARD\n';
 
index 433f2e579f1684f4c2a3125f2d7eb2eb7a288473..62fed526db0d1736aad278b7bdfa04344cf85d5b 100755 (executable)
@@ -699,6 +699,87 @@ var ContactRelationship = function(relativeName, type) {
   });
 };
 
+var ContactExtension = function(data) {
+  validator_.isConstructorCall(this, ContactExtension);
+
+  var _data1 = 0;
+
+  Object.defineProperties(this, {
+    data1: {
+      get: function () {
+        return _data1;
+      },
+      set: function (v) {
+        _data1 = converter_.toLong(v, false);
+      },
+      enumerable: true
+    },
+    data2: {
+      value: null,
+      writable: true,
+      enumerable: true
+    },
+    data3: {
+      value: null,
+      writable: true,
+      enumerable: true
+    },
+    data4: {
+      value: null,
+      writable: true,
+      enumerable: true
+    },
+    data5: {
+      value: null,
+      writable: true,
+      enumerable: true
+    },
+    data6: {
+      value: null,
+      writable: true,
+      enumerable: true
+    },
+    data7: {
+      value: null,
+      writable: true,
+      enumerable: true
+    },
+    data8: {
+      value: null,
+      writable: true,
+      enumerable: true
+    },
+    data9: {
+      value: null,
+      writable: true,
+      enumerable: true
+    },
+    data10: {
+      value: null,
+      writable: true,
+      enumerable: true
+    },
+    data11: {
+      value: null,
+      writable: true,
+      enumerable: true
+    },
+    data12: {
+      value: null,
+      writable: true,
+      enumerable: true
+    }
+  });
+
+  if (type_.isObject(data)) {
+    for (var prop in data) {
+      if (this.hasOwnProperty(prop)) {
+        this[prop] = data[prop];
+      }
+    }
+  }
+};
+
 var ContactInstantMessenger = function(imAddress, type) {
   validator_.isConstructorCall(this, ContactInstantMessenger);
 
@@ -752,4 +833,5 @@ tizen.ContactPhoneNumber = ContactPhoneNumber;
 tizen.ContactEmailAddress = ContactEmailAddress;
 tizen.ContactGroup = ContactGroup;
 tizen.ContactRelationship = ContactRelationship;
+tizen.ContactExtension = ContactExtension;
 tizen.ContactInstantMessenger = ContactInstantMessenger;