Add JobInfo::deserialize(), which replaces two sub-class deserialize() functions 66/133966/2
authorMu-Woong Lee <muwoong.lee@samsung.com>
Wed, 14 Jun 2017 06:06:26 +0000 (15:06 +0900)
committerMu-Woong Lee <muwoong.lee@samsung.com>
Wed, 14 Jun 2017 06:36:32 +0000 (15:36 +0900)
Change-Id: I6b2a905e3baed0e067cc60ff87aebcd9694c9d84
Signed-off-by: Mu-Woong Lee <muwoong.lee@samsung.com>
src/shared/JobInfo.cpp
src/shared/JobInfo.h

index 8e75261..bca38bf 100644 (file)
  */
 
 #include <json/json.h>
-#include <json/writer.h>
-#include <json/reader.h>
 #include "JobSchedulerTypesPrivate.h"
 #include "JobInfo.h"
 #include "JobContext.h"
 #include "JobAction.h"
 
+#define KEY_JOB_TYPE   "JobType"
 #define KEY_ONE_TIME   "OneTime"
 #define KEY_PERSISTENT "Persistent"
 #define KEY_REQ_TIMEOUT        "ReqTimeout"
@@ -148,6 +147,7 @@ const std::string& JobInfo::serialize()
 
 void JobInfo::toJson(Json::Value& jsonRoot)
 {
+       jsonRoot[KEY_JOB_TYPE] = static_cast<int>(getType());
        jsonRoot[KEY_ONE_TIME] = __oneTime;
        jsonRoot[KEY_PERSISTENT] = __persistent;
        jsonRoot[KEY_REQ_TIMEOUT] = __requirementTimeout;
@@ -195,6 +195,29 @@ JobInfo& JobInfo::setDisjunction(bool disjunction)
        return *this;
 }
 
+JobInfo* JobInfo::deserialize(const std::string& serializedStr)
+{
+       Json::Reader reader;
+       Json::Value jsonRoot;
+       JobInfo* job = NULL;
+
+       try {
+               if (reader.parse(serializedStr, jsonRoot)) {
+                       JobInfo::Type type = static_cast<JobInfo::Type>(jsonRoot[KEY_JOB_TYPE].asInt());
+                       if (type == JobInfo::Type::PERIODIC) {
+                               job = new PeriodicJobInfo(jsonRoot, serializedStr);
+                       } else if (type == JobInfo::Type::ON_DEMAND) {
+                               job = new OnDemandJobInfo(jsonRoot, serializedStr);
+                       }
+               }
+       } catch (const Json::Exception& e) {
+               _E("Exception: %s", e.what());
+               return NULL;
+       }
+
+       return job;
+}
+
 
 PeriodicJobInfo::PeriodicJobInfo(unsigned int intervalMin, time_t anchor) :
        __intervalMin(intervalMin),
@@ -218,24 +241,6 @@ JobInfo::Type PeriodicJobInfo::getType()
        return JobInfo::Type::PERIODIC;
 }
 
-PeriodicJobInfo* PeriodicJobInfo::deserialize(const std::string& serializedStr)
-{
-       Json::Reader reader;
-       Json::Value jsonRoot;
-       PeriodicJobInfo* job = NULL;
-
-       try {
-               if (reader.parse(serializedStr, jsonRoot)) {
-                       job = new PeriodicJobInfo(jsonRoot, serializedStr);
-               }
-       } catch (const Json::Exception& e) {
-               _E("Exception: %s", e.what());
-               return NULL;
-       }
-
-       return job;
-}
-
 void PeriodicJobInfo::__toJson(Json::Value& jsonRoot)
 {
        jsonRoot[KEY_INTERVAL] = __intervalMin;
@@ -266,24 +271,6 @@ JobInfo::Type OnDemandJobInfo::getType()
        return JobInfo::Type::ON_DEMAND;
 }
 
-OnDemandJobInfo* OnDemandJobInfo::deserialize(const std::string& serializedStr)
-{
-       Json::Reader reader;
-       Json::Value jsonRoot;
-       OnDemandJobInfo* job = NULL;
-
-       try {
-               if (reader.parse(serializedStr, jsonRoot)) {
-                       return new OnDemandJobInfo(jsonRoot, serializedStr);
-               }
-       } catch (const Json::Exception& e) {
-               _E("Exception: %s", e.what());
-               return NULL;
-       }
-
-       return job;
-}
-
 OnDemandJobInfo::~OnDemandJobInfo()
 {
 }
index c55d304..af32c31 100644 (file)
@@ -67,6 +67,8 @@ namespace ctx {
                /* Legacy support */
                JobInfo& setDisjunction(bool disjunction);
 
+               static JobInfo* deserialize(const std::string& serializedStr);
+
        protected:
                JobInfo();
                JobInfo(Json::Value& jsonRoot, const std::string& serializedStr);
@@ -93,16 +95,13 @@ namespace ctx {
        class PeriodicJobInfo : public JobInfo {
        public:
                PeriodicJobInfo(unsigned int intervalMin, time_t anchor);
+               PeriodicJobInfo(Json::Value& jsonRoot, const std::string& serializedStr);
 
                ~PeriodicJobInfo();
 
                JobInfo::Type getType();
 
-               static PeriodicJobInfo* deserialize(const std::string& serializedStr);
-
        private:
-               PeriodicJobInfo(Json::Value& jsonRoot, const std::string& serializedStr);
-
                void __toJson(Json::Value& jsonRoot);
 
                unsigned int __intervalMin;
@@ -113,6 +112,7 @@ namespace ctx {
        class OnDemandJobInfo : public JobInfo {
        public:
                OnDemandJobInfo();
+               OnDemandJobInfo(Json::Value& jsonRoot, const std::string& serializedStr);
 
                ~OnDemandJobInfo();
 
@@ -120,11 +120,7 @@ namespace ctx {
 
                OnDemandJobInfo& addTrigger(JobTrigger* trigger);
 
-               static OnDemandJobInfo* deserialize(const std::string& serializedStr);
-
        private:
-               OnDemandJobInfo(Json::Value& jsonRoot, const std::string& serializedStr);
-
                void __toJson(Json::Value& jsonRoot);
 
                std::list<JobTrigger*> __triggers;