Create & update widget interface database
authorJihoon Chung <jihoon.chung@samsaung.com>
Fri, 9 Aug 2013 13:51:51 +0000 (22:51 +0900)
committerGerrit Code Review <gerrit@gerrit.vlan144.tizendev.org>
Wed, 14 Aug 2013 01:33:43 +0000 (01:33 +0000)
[Issue#] N/A
[Problem] N/A
[Cause] N/A
[Solution] To implement update widget interface key & value, database
should create in install time. Also this commit support update widget
interface data.
[SCMRequest] must be imported with wrt-commons
https://review.tizendev.org/gerrit/#/c/86092/

Change-Id: I575ae2ec2f9880d8e26fd6ede3f23549e9134d23

packaging/wrt-installer.spec
src/CMakeLists.txt
src/jobs/widget_install/task_database.cpp
src/jobs/widget_install/task_database.h
src/jobs/widget_install/task_remove_backup.cpp
src/jobs/widget_install/task_remove_backup.h

index ce1a02c..a2e6bbc 100644 (file)
@@ -20,6 +20,7 @@ BuildRequires:  pkgconfig(dpl-utils-efl)
 BuildRequires:  pkgconfig(dpl-wrt-dao-ro)
 BuildRequires:  pkgconfig(dpl-wrt-dao-rw)
 BuildRequires:  pkgconfig(wrt-commons-i18n-dao-ro)
+BuildRequires:  pkgconfig(wrt-commons-widget-interface-dao)
 BuildRequires:  pkgconfig(security-install)
 BuildRequires:  pkgconfig(ecore-x)
 BuildRequires:  pkgconfig(xmlsec1)
index 6192474..cb7e367 100644 (file)
@@ -121,6 +121,7 @@ PKG_CHECK_MODULES(INSTALLER_STATIC_DEP
     dpl-wrt-dao-rw
     wrt-commons-custom-handler-dao-rw
     wrt-commons-security-origin-dao
+    wrt-commons-widget-interface-dao
     wrt-plugins-types
     pkgmgr-installer
     pkgmgr-parser
index 49020fc..90ac7c9 100644 (file)
@@ -22,6 +22,7 @@
  * update
  */
 #include <unistd.h>
+#include <cstdio>
 #include <time.h>
 #include <sys/stat.h>
 #include <widget_install/task_database.h>
@@ -35,6 +36,8 @@
 #include <dpl/log/log.h>
 #include <dpl/assert.h>
 #include <wrt-commons/security-origin-dao/security_origin_dao.h>
+#include <wrt-commons/widget-interface-dao/widget_interface_dao.h>
+#include <dpl/wrt-dao-ro/global_config.h>
 #include <dpl/wrt-dao-ro/widget_dao_types.h>
 #include <string>
 #include <sstream>
@@ -59,12 +62,14 @@ TaskDatabase::TaskDatabase(InstallerContext& context) :
     AddStep(&TaskDatabase::StepWrtDBInsert);
     AddStep(&TaskDatabase::StepAceDBInsert);
     AddStep(&TaskDatabase::StepSecurityOriginDBInsert);
+    AddStep(&TaskDatabase::StepWidgetInterfaceDBInsert);
     AddStep(&TaskDatabase::StepRemoveExternalFiles);
     AddStep(&TaskDatabase::StepLiveboxDBInsert);
     AddStep(&TaskDatabase::EndStep);
 
     AddAbortStep(&TaskDatabase::StepAbortDBInsert);
     AddAbortStep(&TaskDatabase::StepAbortAceDBInsert);
+    AddAbortStep(&TaskDatabase::StepAbortWidgetInterfaceDBInsert);
 }
 
 void TaskDatabase::StepWrtDBInsert()
@@ -180,6 +185,41 @@ void TaskDatabase::StepSecurityOriginDBInsert()
     }
 }
 
+void TaskDatabase::StepWidgetInterfaceDBInsert()
+{
+    LogDebug("Create Widget Interface database");
+    using namespace WidgetInterfaceDB;
+    using namespace WrtDB;
+
+    DbWidgetHandle handle =
+        WidgetDAOReadOnly::getHandle(m_context.widgetConfig.tzAppid);
+
+    // backup database
+    if (m_context.isUpdateMode) {
+        std::string dbPath = WidgetInterfaceDAO::databaseFileName(handle);
+        std::string backupDbPath = dbPath;
+        backupDbPath += GlobalConfig::GetBackupDatabaseSuffix();
+        LogDebug("\"" << dbPath << "\" to \"" << backupDbPath << "\"");
+        if (0 != std::rename(dbPath.c_str(), backupDbPath.c_str())) {
+            LogError("widget interface database backup failed");
+            ThrowMsg(Exceptions::UpdateFailed,
+                     "widget interface database backup failed");
+        }
+    }
+
+    Try
+    {
+        // automatically create widget interface database
+        WidgetInterfaceDAO dao(handle);
+    }
+    Catch(WidgetInterfaceDAO::Exception::DatabaseError)
+    {
+        LogError("widget interface database create failed");
+        ThrowMsg(Exceptions::UpdateFailed,
+                 "widget interface database create failed");
+    }
+}
+
 void TaskDatabase::StepRegisterExternalFiles()
 {
     WrtDB::ExternalLocationList externalLocationsUpdate =
@@ -282,6 +322,32 @@ void TaskDatabase::StepAbortAceDBInsert()
     LogDebug("Ace data inserted");
 }
 
+void TaskDatabase::StepAbortWidgetInterfaceDBInsert()
+{
+    LogDebug("[DB Update Task] Widget interface Aborting...");
+    using namespace WidgetInterfaceDB;
+    using namespace WrtDB;
+
+    DbWidgetHandle handle =
+        WidgetDAOReadOnly::getHandle(m_context.widgetConfig.tzAppid);
+    std::string dbPath = WidgetInterfaceDAO::databaseFileName(handle);
+
+    // remove database
+    if (remove(dbPath.c_str()) != 0) {
+        LogWarning("Fail to remove");
+    }
+
+    // rollback database
+    if (m_context.isUpdateMode) {
+        std::string backupDbPath = dbPath;
+        backupDbPath += GlobalConfig::GetBackupDatabaseSuffix();
+        LogDebug("\"" << dbPath << "\" to \"" << backupDbPath << "\"");
+        if (0 != std::rename(backupDbPath.c_str(), dbPath.c_str())) {
+            LogWarning("Fail to rollback");
+        }
+    }
+}
+
 void TaskDatabase::StepLiveboxDBInsert()
 {
     if (m_context.widgetConfig.configInfo.m_livebox.size() <= 0) {
index 79d19f5..1291c36 100644 (file)
@@ -49,11 +49,13 @@ class TaskDatabase :
     void StepWrtDBInsert();
     void StepAceDBInsert();
     void StepSecurityOriginDBInsert();
+    void StepWidgetInterfaceDBInsert();
     void StepRemoveExternalFiles();
     void StepLiveboxDBInsert();
 
     void StepAbortDBInsert();
     void StepAbortAceDBInsert();
+    void StepAbortWidgetInterfaceDBInsert();
 
     void StartStep();
     void EndStep();
index 3a69e6c..e424ceb 100644 (file)
@@ -33,6 +33,7 @@
 #include <widget_install/job_widget_install.h>
 #include <widget_install/widget_install_errors.h>
 #include <widget_install/widget_install_context.h>
+#include <wrt-commons/widget-interface-dao/widget_interface_dao.h>
 
 using namespace WrtDB;
 
@@ -48,6 +49,7 @@ TaskRemoveBackupFiles::TaskRemoveBackupFiles(InstallerContext& context) :
         AddStep(&TaskRemoveBackupFiles::StepRemoveBackupFiles);
     }
     AddStep(&TaskRemoveBackupFiles::StepDeleteBackupDB);
+    AddStep(&TaskRemoveBackupFiles::StepDeleteBackupWidgetInterfaceDB);
     AddStep(&TaskRemoveBackupFiles::EndStep);
 }
 
@@ -88,6 +90,23 @@ void TaskRemoveBackupFiles::StepDeleteBackupDB()
     }
 }
 
+void TaskRemoveBackupFiles::StepDeleteBackupWidgetInterfaceDB()
+{
+    LogDebug("StepDeleteBackupWidgetInterfaceDB");
+    using namespace WidgetInterfaceDB;
+    using namespace WrtDB;
+
+    DbWidgetHandle handle =
+        WidgetDAOReadOnly::getHandle(m_context.widgetConfig.tzAppid);
+    std::string backupDbPath = WidgetInterfaceDAO::databaseFileName(handle);
+    backupDbPath += GlobalConfig::GetBackupDatabaseSuffix();
+
+    // remove backup database
+    if (remove(backupDbPath.c_str()) != 0) {
+        LogWarning("Fail to remove");
+    }
+}
+
 void TaskRemoveBackupFiles::StartStep()
 {
     LogDebug("--------- <TaskRemoveBackupFiles> : START ----------");
index 9c12794..1dcdf5b 100644 (file)
@@ -36,6 +36,7 @@ class TaskRemoveBackupFiles :
 
     void StepRemoveBackupFiles();
     void StepDeleteBackupDB();
+    void StepDeleteBackupWidgetInterfaceDB();
 
     void StartStep();
     void EndStep();