*/
#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"
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;
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),
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;
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()
{
}
/* Legacy support */
JobInfo& setDisjunction(bool disjunction);
+ static JobInfo* deserialize(const std::string& serializedStr);
+
protected:
JobInfo();
JobInfo(Json::Value& jsonRoot, const std::string& serializedStr);
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;
class OnDemandJobInfo : public JobInfo {
public:
OnDemandJobInfo();
+ OnDemandJobInfo(Json::Value& jsonRoot, const std::string& serializedStr);
~OnDemandJobInfo();
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;