[Archive] Allow to create multiple instances of ArchiveInstance class.
authorPawel Andruszkiewicz <p.andruszkie@samsung.com>
Wed, 8 Apr 2015 09:34:18 +0000 (11:34 +0200)
committerPawel Andruszkiewicz <p.andruszkie@samsung.com>
Tue, 14 Apr 2015 07:51:42 +0000 (16:51 +0900)
Change-Id: Ic40aa1763bd71166392c0477181859dced902849

src/archive/archive_callback_data.cc
src/archive/archive_callback_data.h
src/archive/archive_extension.cc
src/archive/archive_file.cc
src/archive/archive_instance.cc
src/archive/archive_instance.h

index a56fa29e19bc900f185fd0adeee46a845159892d..8e2f859d16e28e02f09a4638a74d7a66a9ec80c0 100755 (executable)
@@ -40,13 +40,14 @@ using namespace common;
 //OperationCallbackData
 //----------------------------------------------------------------------------------------
 
-OperationCallbackData::OperationCallbackData(ArchiveCallbackType callback_type) :
+OperationCallbackData::OperationCallbackData(ArchiveCallbackType callback_type, ArchiveInstance& instance) :
     m_callback_type(callback_type),
     m_op_id(-1),
     m_cid(-1),
     m_handle(-1),
     m_is_error(false),
-    m_is_canceled(false)
+    m_is_canceled(false),
+    instance_(instance)
 {
     LoggerD("Entered");
 }
@@ -119,6 +120,10 @@ void OperationCallbackData::setIsCanceled(bool canceled)
     m_is_canceled = canceled;
 }
 
+void OperationCallbackData::PostMessage(const char* msg) {
+  instance_.PostMessage(msg);
+}
+
 const ErrorCode& OperationCallbackData::getErrorCode() const
 {
     LoggerD("Entered");
@@ -151,8 +156,8 @@ void OperationCallbackData::setArchiveFile(ArchiveFilePtr caller)
 //OpenCallbackData
 //----------------------------------------------------------------------------------------
 
-OpenCallbackData::OpenCallbackData(ArchiveCallbackType callback_type):
-    OperationCallbackData(callback_type)
+OpenCallbackData::OpenCallbackData(ArchiveInstance& instance):
+    OperationCallbackData(OPEN_CALLBACK_DATA, instance)
 {
     LoggerD("Entered");
 }
@@ -224,8 +229,8 @@ PlatformResult OpenCallbackData::executeOperation(ArchiveFilePtr archive_file_pt
 //GetEntriesCallbackData
 //----------------------------------------------------------------------------------------
 
-GetEntriesCallbackData::GetEntriesCallbackData(ArchiveCallbackType callback_type):
-    OperationCallbackData(callback_type)
+GetEntriesCallbackData::GetEntriesCallbackData(ArchiveInstance& instance):
+    OperationCallbackData(GET_ENTRIES_CALLBACK_DATA, instance)
 {
     LoggerD("Entered");
 }
@@ -263,8 +268,8 @@ PlatformResult GetEntriesCallbackData::executeOperation(ArchiveFilePtr archive_f
 //GetEntryByNameCallbackData
 //----------------------------------------------------------------------------------------
 
-GetEntryByNameCallbackData::GetEntryByNameCallbackData(ArchiveCallbackType callback_type):
-    OperationCallbackData(callback_type)
+GetEntryByNameCallbackData::GetEntryByNameCallbackData(ArchiveInstance& instance):
+    OperationCallbackData(GET_ENTRY_BY_NAME_CALLBACK_DATA, instance)
 {
     LoggerD("Entered");
 }
@@ -332,8 +337,8 @@ PlatformResult GetEntryByNameCallbackData::executeOperation(ArchiveFilePtr archi
 //BaseProgressCallback
 //----------------------------------------------------------------------------------------
 
-BaseProgressCallback::BaseProgressCallback(ArchiveCallbackType callback_type):
-    OperationCallbackData(callback_type),
+BaseProgressCallback::BaseProgressCallback(ArchiveCallbackType callback_type, ArchiveInstance& instance):
+    OperationCallbackData(callback_type, instance),
     m_overwrite(false)
 {
     LoggerD("Entered");
@@ -397,7 +402,7 @@ gboolean BaseProgressCallback::callSuccessCallbackCB(void* data)
 
         LoggerD("%s", val.serialize().c_str());
 
-        ArchiveInstance::getInstance().PostMessage(val.serialize().c_str());
+        callback->instance_.PostMessage(val.serialize().c_str());
     } else {
         LoggerW("Not calling error callback in such case");
     }
@@ -430,7 +435,7 @@ void BaseProgressCallback::callProgressCallback(long operationId,
 
     LoggerD("%s", val.serialize().c_str());
 
-    ArchiveInstance::getInstance().PostMessage(val.serialize().c_str());
+    instance_.PostMessage(val.serialize().c_str());
 }
 
 void BaseProgressCallback::callProgressCallbackOnMainThread(const double progress,
@@ -484,8 +489,8 @@ gboolean BaseProgressCallback::callProgressCallbackCB(void* data)
 //AddProgressCallback
 //----------------------------------------------------------------------------------------
 
-AddProgressCallback::AddProgressCallback(ArchiveCallbackType callback_type):
-    BaseProgressCallback(callback_type)
+AddProgressCallback::AddProgressCallback(ArchiveInstance& instance):
+    BaseProgressCallback(ADD_PROGRESS_CALLBACK, instance)
 {
     LoggerD("Entered");
 }
@@ -586,8 +591,8 @@ PlatformResult AddProgressCallback::executeOperation(ArchiveFilePtr archive_file
 //ExtractAllProgressCallback
 //----------------------------------------------------------------------------------------
 
-ExtractAllProgressCallback::ExtractAllProgressCallback(ArchiveCallbackType callback_type):
-    BaseProgressCallback(callback_type),
+ExtractAllProgressCallback::ExtractAllProgressCallback(ArchiveInstance& instance):
+    BaseProgressCallback(EXTRACT_ALL_PROGRESS_CALLBACK, instance),
     m_files_to_extract(0),
     m_expected_decompressed_size(0),
     m_files_extracted(0),
@@ -705,8 +710,8 @@ OperationCanceledException::OperationCanceledException(const char* message)
 //ExtractEntryProgressCallback
 //----------------------------------------------------------------------------------------
 
-ExtractEntryProgressCallback::ExtractEntryProgressCallback():
-        ExtractAllProgressCallback(),
+ExtractEntryProgressCallback::ExtractEntryProgressCallback(ArchiveInstance& instance):
+        ExtractAllProgressCallback(instance),
         m_strip_name(false)
 {
     LoggerD("Entered");
index 440275721e26ade8959d5cafe7c6150781c97e9b..14a7418e0b843b03630b3b4602c0b97085de475d 100644 (file)
@@ -53,10 +53,12 @@ enum ArchiveCallbackType {
 class ArchiveFile;
 typedef std::shared_ptr<ArchiveFile> ArchiveFilePtr;
 
+class ArchiveInstance;
+
 class OperationCallbackData
 {
 public:
-    OperationCallbackData(ArchiveCallbackType callback_type);
+    OperationCallbackData(ArchiveCallbackType callback_type, ArchiveInstance& instance);
     virtual ~OperationCallbackData();
 
     void setError(const ErrorCode &err_code,
@@ -82,11 +84,14 @@ public:
     bool isCanceled() const;
     void setIsCanceled(bool canceled);
 
+    void PostMessage(const char* msg);
+
 protected:
     ArchiveCallbackType m_callback_type;
     long m_op_id;
     double m_cid;
     long m_handle;
+    ArchiveInstance& instance_;
 
 private:
     bool m_is_error;
@@ -100,7 +105,7 @@ private:
 class OpenCallbackData : public OperationCallbackData
 {
 public:
-    OpenCallbackData(ArchiveCallbackType callback_type = OPEN_CALLBACK_DATA);
+    explicit OpenCallbackData(ArchiveInstance& instance);
     virtual ~OpenCallbackData();
 
     virtual PlatformResult executeOperation(ArchiveFilePtr archive_file_ptr);
@@ -112,7 +117,7 @@ private:
 class GetEntriesCallbackData : public OperationCallbackData
 {
 public:
-    GetEntriesCallbackData(ArchiveCallbackType callback_type = GET_ENTRIES_CALLBACK_DATA);
+    explicit GetEntriesCallbackData(ArchiveInstance& instance);
     virtual ~GetEntriesCallbackData();
 
     ArchiveFileEntryPtrMapPtr getEntries() const;
@@ -127,7 +132,7 @@ private:
 class GetEntryByNameCallbackData : public OperationCallbackData
 {
 public:
-    GetEntryByNameCallbackData(ArchiveCallbackType callback_type = GET_ENTRY_BY_NAME_CALLBACK_DATA);
+    explicit GetEntryByNameCallbackData(ArchiveInstance& instance);
     virtual ~GetEntryByNameCallbackData();
 
     const std::string& getName() const;
@@ -146,7 +151,7 @@ private:
 class BaseProgressCallback : public OperationCallbackData
 {
 public:
-    BaseProgressCallback(ArchiveCallbackType callback_type = BASE_PROGRESS_CALLBACK);
+    BaseProgressCallback(ArchiveCallbackType callback_type, ArchiveInstance& instance);
     virtual ~BaseProgressCallback();
 
     bool getOverwrite() const;
@@ -174,7 +179,7 @@ private:
 class AddProgressCallback : public BaseProgressCallback
 {
 public:
-    AddProgressCallback(ArchiveCallbackType callback_type = ADD_PROGRESS_CALLBACK);
+    explicit AddProgressCallback(ArchiveInstance& instance);
     virtual ~AddProgressCallback();
 
     virtual PlatformResult executeOperation(ArchiveFilePtr archive_file_ptr);
@@ -196,7 +201,7 @@ private:
 class ExtractAllProgressCallback : public BaseProgressCallback
 {
 public:
-    ExtractAllProgressCallback(ArchiveCallbackType callback_type = EXTRACT_ALL_PROGRESS_CALLBACK);
+    explicit ExtractAllProgressCallback(ArchiveInstance& instance);
     virtual ~ExtractAllProgressCallback();
 
     filesystem::FilePtr getDirectory() const;
@@ -243,7 +248,7 @@ private:
 class ExtractEntryProgressCallback : public ExtractAllProgressCallback
 {
 public:
-    ExtractEntryProgressCallback();
+    explicit ExtractEntryProgressCallback(ArchiveInstance& instance);
     virtual ~ExtractEntryProgressCallback();
 
     ArchiveFileEntryPtr getArchiveFileEntry();
index e045825a15cb3b75e55d885416fa0818aca52b81..c774b933ff65e5890694d31b7b80a221dbad66e6 100644 (file)
@@ -25,5 +25,5 @@ ArchiveExtension::~ArchiveExtension()
 
 common::Instance* ArchiveExtension::CreateInstance()
 {
-    return &extension::archive::ArchiveInstance::getInstance();
+    return new extension::archive::ArchiveInstance();
 }
index f3088d5db6a2047b0a5f5b2cc2102775e3d924f3..e9251cba0e648efbbec2cc2c6ce5484df21c6a7e 100644 (file)
@@ -127,7 +127,7 @@ gboolean ArchiveFile::openTaskCompleteCB(void *data)
 
     LoggerD("%s", val.serialize().c_str());
 
-    ArchiveInstance::getInstance().PostMessage(val.serialize().c_str());
+    callback->PostMessage(val.serialize().c_str());
 
     delete callback;
     callback = NULL;
@@ -163,7 +163,7 @@ gboolean ArchiveFile::callErrorCallback(void* data)
 
     LoggerD("%s", val.serialize().c_str());
 
-    ArchiveInstance::getInstance().PostMessage(val.serialize().c_str());
+    callback->PostMessage(val.serialize().c_str());
 
     delete callback;
     callback = NULL;
@@ -390,7 +390,7 @@ gboolean ArchiveFile::getEntriesTaskCompleteCB(void *data)
 
     LoggerD("%s", val.serialize().c_str());
 
-    ArchiveInstance::getInstance().PostMessage(val.serialize().c_str());
+    callback->PostMessage(val.serialize().c_str());
 
     delete callback;
     callback = NULL;
@@ -523,7 +523,7 @@ gboolean ArchiveFile::getEntryByNameTaskCompleteCB(void *data)
 
     LoggerD("%s", val.serialize().c_str());
 
-    ArchiveInstance::getInstance().PostMessage(val.serialize().c_str());
+    callback->PostMessage(val.serialize().c_str());
 
     delete callback;
     callback = NULL;
index fb9874c6d93066c60ea090410213a1fdde2a02d8..eb94912fd403cecc450b5767ddb8d0d58b6bb8f2 100644 (file)
@@ -27,12 +27,6 @@ const std::string kPrivilegeFilesystemRead  = "http://tizen.org/privilege/filesy
 const std::string kPrivilegeFilesystemWrite  = "http://tizen.org/privilege/filesystem.write";
 } // namespace
 
-ArchiveInstance& ArchiveInstance::getInstance()
-{
-    static ArchiveInstance instance;
-    return instance;
-}
-
 ArchiveInstance::ArchiveInstance() {
     LoggerD("Entered");
 
@@ -77,7 +71,7 @@ void ArchiveInstance::PostError(const PlatformResult& e, double callback_id) {
     args[ERROR_CALLBACK_CODE] = picojson::value(static_cast<double>(e.error_code()));
     args[ERROR_CALLBACK_MESSAGE] = picojson::value(e.message());
 
-    ArchiveInstance::getInstance().PostMessage(val.serialize().c_str());
+    PostMessage(val.serialize().c_str());
 }
 
 void ArchiveInstance::Open(const picojson::value& args, picojson::object& out) {
@@ -102,7 +96,7 @@ void ArchiveInstance::Open(const picojson::value& args, picojson::object& out) {
         return;
     }
 
-    OpenCallbackData *callback = new OpenCallbackData();
+    OpenCallbackData *callback = new OpenCallbackData(*this);
 
     FilePtr file_ptr;
 
@@ -240,7 +234,7 @@ void ArchiveInstance::Add(const picojson::value& args, picojson::object& out)
     const long operationId = static_cast<long>(v_op_id.get<double>());
     const long handle = static_cast<long>(v_handle.get<double>());
 
-    AddProgressCallback *callback = new AddProgressCallback();
+    AddProgressCallback *callback = new AddProgressCallback(*this);
 
     NodePtr node;
     PlatformResult result = Node::resolve(Path::create(v_source.get<std::string>()), &node);
@@ -305,7 +299,7 @@ void ArchiveInstance::ExtractAll(const picojson::value& args, picojson::object&
     const long operationId = static_cast<long>(v_op_id.get<double>());
     const long handle = static_cast<long>(v_handle.get<double>());
 
-    ExtractAllProgressCallback *callback = new ExtractAllProgressCallback();
+    ExtractAllProgressCallback *callback = new ExtractAllProgressCallback(*this);
 
     NodePtr node;
     PlatformResult result = Node::resolve(Path::create(v_dest_dir.get<std::string>()), &node);
@@ -367,7 +361,7 @@ void ArchiveInstance::GetEntries(const picojson::value& args, picojson::object&
     const long operationId = static_cast<long>(v_op_id.get<double>());
     const long handle = static_cast<long>(v_handle.get<double>());
 
-    GetEntriesCallbackData *callback = new GetEntriesCallbackData();
+    GetEntriesCallbackData *callback = new GetEntriesCallbackData(*this);
 
     callback->setOperationId(operationId);
     callback->setCallbackId(callbackId);
@@ -414,7 +408,7 @@ void ArchiveInstance::GetEntryByName(const picojson::value& args, picojson::obje
     const long operationId = static_cast<long>(v_op_id.get<double>());
     const long handle = static_cast<long>(v_handle.get<double>());
 
-    GetEntryByNameCallbackData *callback = new GetEntryByNameCallbackData();
+    GetEntryByNameCallbackData *callback = new GetEntryByNameCallbackData(*this);
 
     callback->setOperationId(operationId);
     callback->setCallbackId(callbackId);
@@ -488,7 +482,7 @@ void ArchiveInstance::Extract(const picojson::value& args, picojson::object& out
     const long operationId = static_cast<long>(v_op_id.get<double>());
     const long handle = static_cast<long>(v_handle.get<double>());
 
-    ExtractEntryProgressCallback *callback = new ExtractEntryProgressCallback();
+    ExtractEntryProgressCallback *callback = new ExtractEntryProgressCallback(*this);
 
     NodePtr node;
     PlatformResult result = Node::resolve(Path::create(v_dest_dir.get<std::string>()), &node);
index 635a4070aac3a1ea8262d3d0d367717d4de4ad1f..2cdfeb77da45bf3f0fa4b49ab52eda9666cdd442 100644 (file)
@@ -14,13 +14,12 @@ namespace archive {
 
 class ArchiveInstance: public common::ParsedInstance {
 public:
-    static ArchiveInstance& getInstance();
+    ArchiveInstance();
+    virtual ~ArchiveInstance();
 
 private:
-    ArchiveInstance();
     ArchiveInstance(ArchiveInstance const&);
     void operator=(ArchiveInstance const&);
-    virtual ~ArchiveInstance();
 
     /* ArchiveManager methods */
     void Open(const picojson::value& args, picojson::object& out);