[Calendar] Allow to create multiple instances of CalendarInstance class.
authorPawel Andruszkiewicz <p.andruszkie@samsung.com>
Wed, 8 Apr 2015 12:09:20 +0000 (14:09 +0200)
committerPawel Andruszkiewicz <p.andruszkie@samsung.com>
Tue, 14 Apr 2015 08:02:06 +0000 (17:02 +0900)
Change-Id: Ia5cdc66235cb4dd7fc09626f7af00068ae7c39d4

src/calendar/calendar.cc
src/calendar/calendar.h
src/calendar/calendar_extension.cc
src/calendar/calendar_instance.cc
src/calendar/calendar_instance.h

index 7e12f84e2ccdafefccbcdcc085e3e16840c361a1..dcbd2339e832aa9b1528c5c9f52dd075759f29a5 100644 (file)
@@ -40,12 +40,9 @@ void CalendarFilterDeleter(calendar_filter_h calendar_filter) {
 
 using namespace common;
 
-int Calendar::current_db_version_ = 0;
-std::map<std::string, std::string> Calendar::listeners_registered_;
-
-Calendar& Calendar::GetInstance() {
-  static Calendar instance;
-  return instance;
+Calendar::Calendar(CalendarInstance& instance)
+    : current_db_version_(0),
+      instance_(instance) {
 }
 
 Calendar::~Calendar() {
@@ -944,7 +941,7 @@ PlatformResult Calendar::AddChangeListener(const picojson::object& args,
     PlatformResult status = CalendarRecord::TypeToUri(type, &view_uri);
     if (status.IsError()) return status;
 
-    ret = calendar_db_add_changed_cb(view_uri.c_str(), ChangeCallback, nullptr);
+    ret = calendar_db_add_changed_cb(view_uri.c_str(), ChangeCallback, this);
     if (CALENDAR_ERROR_NONE != ret) {
       LoggerE("Add calendar change callback error for type %s", type.c_str());
       return PlatformResult(ErrorCode::UNKNOWN_ERR,
@@ -979,8 +976,7 @@ PlatformResult Calendar::RemoveChangeListener(const picojson::object& args,
     PlatformResult status = CalendarRecord::TypeToUri(type, &view_uri);
     if (status.IsError()) return status;
 
-    ret = calendar_db_remove_changed_cb(view_uri.c_str(), ChangeCallback,
-                                        nullptr);
+    ret = calendar_db_remove_changed_cb(view_uri.c_str(), ChangeCallback, this);
     if (CALENDAR_ERROR_NONE != ret) {
       LoggerE("Remove calendar change callback error for type %s",
               type.c_str());
@@ -993,13 +989,15 @@ PlatformResult Calendar::RemoveChangeListener(const picojson::object& args,
   return PlatformResult(ErrorCode::NO_ERROR);
 }
 
-void Calendar::ChangeCallback(const char* view_uri, void*) {
+void Calendar::ChangeCallback(const char* view_uri, void* user_data) {
   LoggerD("enter");
 
+  Calendar* c = static_cast<Calendar*>(user_data);
+
   calendar_list_h list = nullptr;
   int ret, updated_version;
   ret = calendar_db_get_changes_by_version(view_uri, CALENDAR_BOOK_FILTER_ALL,
-                                           current_db_version_, &list,
+                                           c->current_db_version_, &list,
                                            &updated_version);
   if (CALENDAR_ERROR_NONE != ret) {
     LoggerE("Can't get the changed item list");
@@ -1025,12 +1023,12 @@ void Calendar::ChangeCallback(const char* view_uri, void*) {
   // prepare response object
   picojson::value response = picojson::value(picojson::object());
   picojson::object& response_obj = response.get<picojson::object>();
-  if (listeners_registered_.find("EVENT") != listeners_registered_.end())
+  if (c->listeners_registered_.find("EVENT") != c->listeners_registered_.end())
     response_obj.insert(
-        std::make_pair("listenerId", picojson::value(listeners_registered_["EVENT"])));
+        std::make_pair("listenerId", picojson::value(c->listeners_registered_["EVENT"])));
   else
     response_obj.insert(
-        std::make_pair("listenerId", picojson::value(listeners_registered_["TASK"])));
+        std::make_pair("listenerId", picojson::value(c->listeners_registered_["TASK"])));
 
   picojson::array& added =
       response_obj.insert(std::make_pair("added", picojson::value(picojson::array())))
@@ -1114,8 +1112,8 @@ void Calendar::ChangeCallback(const char* view_uri, void*) {
     LoggerE("Can't get new version");
     return;
   }
-  current_db_version_ = updated_version;
-  CalendarInstance::GetInstance().PostMessage(response.serialize().c_str());
+  c->current_db_version_ = updated_version;
+  c->instance_.PostMessage(response.serialize().c_str());
 }
 
 PlatformResult Calendar::ErrorChecker(int errorCode) {
index 8ec483b4111ba2f216b2f656fd4130c67414fa07..d34a7191be40e8dfd64e9570d3f69309708fc0fd 100644 (file)
@@ -32,8 +32,11 @@ typedef std::string JsonString;
 
 typedef std::shared_ptr<JsonValue> JsonValuePtr;
 
+class CalendarInstance;
+
 class Calendar {
  public:
+  explicit Calendar(CalendarInstance& instance);
   ~Calendar();
 
   /**
@@ -175,11 +178,11 @@ class Calendar {
   common::PlatformResult RemoveChangeListener(const JsonObject& args,
                                               JsonObject& out);
 
-  static Calendar& GetInstance();
-
  private:
-  static std::map<std::string, std::string> listeners_registered_;
-  static int current_db_version_;
+  std::map<std::string, std::string> listeners_registered_;
+  int current_db_version_;
+  CalendarInstance& instance_;
+
   static void ChangeCallback(const char* view_uri, void* user_data);
   common::PlatformResult ErrorChecker(int errorCode);
 };
index 993345ed97c04abfa82d412ea7df2d345ad60ffc..11a141688681530ac5b140dea320862497cd3162 100644 (file)
@@ -32,5 +32,5 @@ CalendarExtension::CalendarExtension() {
 CalendarExtension::~CalendarExtension() {}
 
 common::Instance* CalendarExtension::CreateInstance() {
-  return &extension::calendar::CalendarInstance::GetInstance();
+  return new extension::calendar::CalendarInstance();
 }
index 86aec2ea4a87c24b01aa40f5ff1e50b6b1f589c9..5f59f0396c77719f42bbb258b01ba353cf2013d1 100644 (file)
@@ -26,12 +26,8 @@ const std::string kPrivilegeCalendarWrite = "http://tizen.org/privilege/calendar
 using namespace common;
 using namespace extension::calendar;
 
-CalendarInstance& CalendarInstance::GetInstance() {
-  static CalendarInstance instance;
-  return instance;
-}
-
-CalendarInstance::CalendarInstance() {
+CalendarInstance::CalendarInstance()
+    : calendar_(*this) {
   using std::placeholders::_1;
   using std::placeholders::_2;
 
@@ -70,8 +66,8 @@ void CalendarInstance::CalendarGet(const JsonValue& args, JsonObject& out) {
   CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarRead, &out);
   JsonValue val{JsonObject{}};
 
-  PlatformResult status = Calendar::GetInstance().Get(
-      common::JsonCast<JsonObject>(args), val.get<JsonObject>());
+  PlatformResult status = calendar_.Get(common::JsonCast<JsonObject>(args),
+                                        val.get<JsonObject>());
 
   if (status.IsSuccess())
     ReportSuccess(val, out);
@@ -83,8 +79,8 @@ void CalendarInstance::CalendarAdd(const JsonValue& args, JsonObject& out) {
   CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarWrite, &out);
   JsonValue val{JsonObject{}};
 
-  PlatformResult status = Calendar::GetInstance().Add(
-      common::JsonCast<JsonObject>(args), val.get<JsonObject>());
+  PlatformResult status = calendar_.Add(common::JsonCast<JsonObject>(args),
+                                        val.get<JsonObject>());
 
   if (status.IsSuccess())
     ReportSuccess(val, out);
@@ -98,7 +94,7 @@ void CalendarInstance::CalendarAddBatch(const JsonValue& args,
   const double callback_id = args.get("callbackId").get<double>();
   auto get = [=](const std::shared_ptr<JsonValue>& response) -> void {
     JsonValue result = JsonValue(JsonArray());
-    PlatformResult status = Calendar::GetInstance().AddBatch(
+    PlatformResult status = calendar_.AddBatch(
         common::JsonCast<JsonObject>(args), result.get<JsonArray>());
 
     if (status.IsSuccess())
@@ -124,8 +120,8 @@ void CalendarInstance::CalendarUpdate(const JsonValue& args, JsonObject& out) {
   CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarWrite, &out);
   JsonValue val{JsonObject{}};
 
-  PlatformResult status = Calendar::GetInstance().Update(
-      common::JsonCast<JsonObject>(args), val.get<JsonObject>());
+  PlatformResult status = calendar_.Update(common::JsonCast<JsonObject>(args),
+                                           val.get<JsonObject>());
 
   if (status.IsSuccess())
     ReportSuccess(val, out);
@@ -139,7 +135,7 @@ void CalendarInstance::CalendarUpdateBatch(const JsonValue& args,
   const double callback_id = args.get("callbackId").get<double>();
   auto get = [=](const std::shared_ptr<JsonValue>& response) -> void {
     JsonValue result = JsonValue(JsonArray());
-    PlatformResult status = Calendar::GetInstance().UpdateBatch(
+    PlatformResult status = calendar_.UpdateBatch(
         common::JsonCast<JsonObject>(args), result.get<JsonArray>());
 
     if (status.IsSuccess())
@@ -165,8 +161,8 @@ void CalendarInstance::CalendarRemove(const JsonValue& args, JsonObject& out) {
   CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarWrite, &out);
   JsonValue val{JsonObject{}};
 
-  PlatformResult status = Calendar::GetInstance().Remove(
-      common::JsonCast<JsonObject>(args), val.get<JsonObject>());
+  PlatformResult status = calendar_.Remove(common::JsonCast<JsonObject>(args),
+                                           val.get<JsonObject>());
 
   if (status.IsSuccess())
     ReportSuccess(out);
@@ -180,7 +176,7 @@ void CalendarInstance::CalendarRemoveBatch(const JsonValue& args,
   const double callback_id = args.get("callbackId").get<double>();
   auto get = [=](const std::shared_ptr<JsonValue>& response) -> void {
     JsonValue result = JsonValue(JsonArray());
-    PlatformResult status = Calendar::GetInstance().RemoveBatch(
+    PlatformResult status = calendar_.RemoveBatch(
         common::JsonCast<JsonObject>(args), result.get<JsonArray>());
 
     if (status.IsSuccess())
@@ -207,7 +203,7 @@ void CalendarInstance::CalendarFind(const JsonValue& args, JsonObject& out) {
   const double callback_id = args.get("callbackId").get<double>();
   auto get = [=](const std::shared_ptr<JsonValue>& response) -> void {
     JsonValue result = JsonValue(JsonArray());
-    PlatformResult status = Calendar::GetInstance().Find(
+    PlatformResult status = calendar_.Find(
         common::JsonCast<JsonObject>(args), result.get<JsonArray>());
 
     if (status.IsSuccess())
@@ -234,7 +230,7 @@ void CalendarInstance::CalendarAddChangeListener(const JsonValue& args,
   CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarRead, &out);
   JsonValue val{JsonObject{}};
 
-  PlatformResult status = Calendar::GetInstance().AddChangeListener(
+  PlatformResult status = calendar_.AddChangeListener(
       common::JsonCast<JsonObject>(args), val.get<JsonObject>());
 
   if (status.IsSuccess())
@@ -248,7 +244,7 @@ void CalendarInstance::CalendarRemoveChangeListener(const JsonValue& args,
   CHECK_PRIVILEGE_ACCESS(kPrivilegeCalendarRead, &out);
   JsonValue val{JsonObject{}};
 
-  PlatformResult status = Calendar::GetInstance().RemoveChangeListener(
+  PlatformResult status = calendar_.RemoveChangeListener(
       common::JsonCast<JsonObject>(args), val.get<JsonObject>());
 
   if (status.IsSuccess())
index 025072c8a4f5bcbbe4bfe46335bd97672ac2678c..7d4d0de8cc5db3c53a904fc5c5bd9a81a809c579 100644 (file)
@@ -8,6 +8,8 @@
 #include "common/extension.h"
 #include "common/picojson.h"
 
+#include "calendar/calendar.h"
+
 namespace extension {
 namespace calendar {
 
@@ -15,7 +17,6 @@ class CalendarInstance : public common::ParsedInstance {
  public:
   CalendarInstance();
   virtual ~CalendarInstance();
-  static CalendarInstance& GetInstance();
 
  private:
   void CalendarGet(const picojson::value& args, picojson::object& out);
@@ -34,6 +35,7 @@ class CalendarInstance : public common::ParsedInstance {
   void CalendarManagerGetCalendars(const picojson::value& args, picojson::object& out);
   void CalendarManagerRemoveCalendar(const picojson::value& args, picojson::object& out);
 
+  Calendar calendar_;
 };
 
 } // namespace calendar