[Release] wrt_0.8.274
[platform/framework/web/wrt.git] / src / api_new / core_module.cpp
index cca5328..d5c07de 100644 (file)
@@ -16,6 +16,7 @@
 /**
  * @file    core_module.cpp
  * @author  Przemyslaw Ciezkowski (p.ciezkowski@samsung.com)
+ * @author  Andrzej Surdej (a.surdej@samsung.com)
  * @version 1.0
  * @brief   File contains definitions of wrt core module.
  */
 #include "runnable_widget_object.h"
 #include <string>
 #include <main_thread.h>
-#include <global_context.h>
 #include <dpl/log/log.h>
 #include <dpl/assert.h>
 #include <dpl/exception.h>
-#include <dpl/popup/popup_controller.h>
-#include <libxml/parser.h>
+#include <dpl/singleton_impl.h>
+#include <dpl/optional_typedefs.h>
 #include "localization_setting.h"
 #include <dpl/wrt-dao-ro/global_config.h>
 #include <profiling_util.h>
 #include <widget_deserialize_model.h>
 #include <dpl/wrt-dao-ro/widget_dao_read_only.h>
+#include <dpl/wrt-dao-ro/global_dao_read_only.h>
 
-namespace { //Anonymous
+IMPLEMENT_SINGLETON(WRT::CoreModule)
+
+namespace {
+const char* const TEXT_DOMAIN = "wrt";
+const char* const TEXT_LOCALE_PATH = "/usr/share/wrt-engine/locale";
 
 std::string cutOffFileName(const std::string& path)
 {
@@ -65,111 +70,147 @@ bool checkPaths()
 
     bool if_ok = true;
     if_ok &= (isDir(cutOffFileName(GetWrtDatabaseFilePath())));
-    if (!if_ok) {
-        LogError("Path <" << GetWrtDatabaseFilePath() << "> does not exist.");
-    }
-
     if_ok &= (isDir(GetDevicePluginPath()));
-    if (!if_ok) {
-        LogError("Path <" << GetDevicePluginPath() << "> does not exist.");
+    if_ok &= (isDir(GetUserInstalledWidgetPath()));
+    return if_ok;
+}
+} // namespace anonymous
+
+namespace WRT {
+class CoreModuleImpl
+{
+  public:
+
+    CoreModuleImpl() : m_initialized(false)
+    {
+        LogDebug("enter");
     }
 
-    if_ok &= (isDir(GetFactoryInstalledWidgetPath()));
-    if (!if_ok) {
-        LogError("Path <" << GetFactoryInstalledWidgetPath() <<
-            "> does not exist.");
+    ~CoreModuleImpl()
+    {
+        LogDebug("Core module implementation destroyed");
     }
 
-    if_ok &= (isDir(GetUserInstalledWidgetPath()));
-    if (!if_ok) {
-        LogError("Path <" << GetUserInstalledWidgetPath() <<
-            "> does not exist.");
+    bool Init()
+    {
+        if (!m_initialized) {
+            ADD_PROFILING_POINT("CoreModule::Init", "point");
+            DPL::Log::LogSystemSingleton::Instance().SetTag("WRT");
+            LogDebug("Initialize");
+            if (!checkPaths()) {
+                LogError("Required path does not exist");
+                return false;
+            }
+            Try
+            {
+                ADD_PROFILING_POINT("attach databases", "start");
+                MainThreadSingleton::Instance().AttachDatabases();
+                ADD_PROFILING_POINT("attach databases", "stop");
+                LogDebug("Initialize finished");
+            } catch (const DPL::Exception& ex) {
+                LogError("Internal Error during screen preparation:");
+                DPL::Exception::DisplayKnownException(ex);
+                /* TODO:
+                 * Do deinitialization: check on which step exception occured
+                 * and deinitialize only initialized parts.
+                 */
+                return false;
+            }
+            bindtextdomain(TEXT_DOMAIN, TEXT_LOCALE_PATH);
+            m_initialized = true;
+        }
+        return true;
     }
-    return if_ok;
-}
-}// namespace anonymous
 
-namespace WRT {
+    void Terminate()
+    {
+        MainThreadSingleton::Instance().DetachDatabases();
+        m_initialized = false;
+    }
 
-namespace CoreModule {
+    RunnableWidgetObjectPtr getRunnableWidgetObject(
+        const std::string& tizenId)
+    {
+        try {
+            RunnableWidgetObjectPtr runnable;
+            WidgetModelPtr model =
+                Domain::deserializeWidgetModel(tizenId);
+            if (!!model) {
+                runnable.reset(new RunnableWidgetObject(model));
+            }
+            return runnable;
+        } catch (WrtDB::WidgetDAOReadOnly::Exception::WidgetNotExist) {
+            LogDebug("Widget not found.");
+            return RunnableWidgetObjectPtr();
+        }
+    }
 
-bool Init()
-{
-    DPL::Log::LogSystemSingleton::Instance().SetTag("WRT");
-    LogDebug("Initialize");
-    if (!checkPaths()) {
-        LogError("Required path does not exist");
-        return false;
+    CoreModule::NetworkAccessMode homeNetworkAccess()
+    {
+        switch (WrtDB::GlobalDAOReadOnly::GetHomeNetworkDataUsage()) {
+        case WrtDB::GlobalDAOReadOnly::NEVER_CONNECT:
+            return CoreModule::NEVER_CONNECT;
+        case WrtDB::GlobalDAOReadOnly::ALWAYS_ASK:
+            return CoreModule::ALWAYS_ASK;
+        case WrtDB::GlobalDAOReadOnly::CONNECT_AUTOMATICALLY:
+            return CoreModule::CONNECT_AUTOMATICALLY;
+        default:
+            break;
+        }
+        LogWarning("using default value");
+        return CoreModule::ALWAYS_ASK;
     }
-    Try
+
+    CoreModule::NetworkAccessMode roamingNetworkAccess()
     {
-        GlobalContext::TouchArchitecture();
-
-        ADD_PROFILING_POINT("attach databases", "start");
-        MainThreadSingleton::Instance().AttachDatabases();
-        ADD_PROFILING_POINT("attach databases", "stop");
-
-        ADD_PROFILING_POINT("xml_parser_init", "start");
-        xmlInitParser();
-        ADD_PROFILING_POINT("xml_parser_init", "stop");
-
-        // Initialize popup manager
-        ADD_PROFILING_POINT("popup_manager_init", "start");
-        DPL::Popup::PopupManagerSingleton::Instance().Initialize(
-            DPL::Popup::PopupRendererPtr(new DPL::Popup::PopupRenderer));
-        ADD_PROFILING_POINT("popup_manager_init", "stop");
-
-        // Initialize Language Subtag registry
-        ADD_PROFILING_POINT("language_rst_init", "start");
-        LocalizationSetting::Initialize();
-        ADD_PROFILING_POINT("language_rst_init", "stop");
-
-        LogDebug("Initialize finished");
-    } catch (const DPL::Exception& ex) {
-        LogError("Internal Error during screen preparation:");
-        DPL::Exception::DisplayKnownException(ex);
-        /* TODO:
-         * Do deinitialization: check on which step exception occured
-         * and deinitialize only initialized parts.
-        */
-        return false;
+        switch (WrtDB::GlobalDAOReadOnly::GetRoamingDataUsage()) {
+        case WrtDB::GlobalDAOReadOnly::NEVER_CONNECT:
+            return CoreModule::NEVER_CONNECT;
+        case WrtDB::GlobalDAOReadOnly::ALWAYS_ASK:
+            return CoreModule::ALWAYS_ASK;
+        case WrtDB::GlobalDAOReadOnly::CONNECT_AUTOMATICALLY:
+            return CoreModule::CONNECT_AUTOMATICALLY;
+        default:
+            break;
+        }
+        LogWarning("using default value");
+        return CoreModule::ALWAYS_ASK;
     }
-    return true;
-}
 
-void Terminate()
+  private:
+    bool m_initialized;
+};
+
+CoreModule::CoreModule() : m_impl(new CoreModuleImpl())
+{}
+
+CoreModule::~CoreModule()
+{}
+
+bool CoreModule::Init()
 {
-    MainThreadSingleton::Instance().DetachDatabases();
-    // Deinitialize popup manager
-    DPL::Popup::PopupManagerSingleton::Instance().Deinitialize();
+    return m_impl->Init();
+}
 
-    LogInfo("Cleanup libxml2 global values.");
-    xmlCleanupParser();
+void CoreModule::Terminate()
+{
+    return m_impl->Terminate();
 }
 
-RunnableWidgetObjectPtr getRunnableWidgetObject(
-    const WidgetHandle& handle)
+RunnableWidgetObjectPtr CoreModule::getRunnableWidgetObject(
+    const std::string& tizenId)
 {
-    RunnableWidgetObjectPtr runnable;
-    WidgetModelPtr model = Domain::deserializeWidgetModel(handle);
-    if (!!model) {
-        runnable.reset(new RunnableWidgetObject(model));
-    }
-    return runnable;
+    return m_impl->getRunnableWidgetObject(tizenId);
 }
 
-RunnableWidgetObjectPtr getRunnableWidgetObject(const std::string& packageName)
+CoreModule::NetworkAccessMode CoreModule::homeNetworkAccess()
 {
-    DPL::OptionalString pkgName(DPL::FromUTF8String(packageName));
-    try {
-        return CoreModule::getRunnableWidgetObject(
-                WrtDB::WidgetDAOReadOnly::getHandle(pkgName));
-    } catch (WrtDB::WidgetDAOReadOnly::Exception::WidgetNotExist) {
-        LogDebug("Widget not found.");
-        return RunnableWidgetObjectPtr();
-    }
+    return m_impl->homeNetworkAccess();
 }
 
-} //namespace CoreModule
+CoreModule::NetworkAccessMode CoreModule::roamingNetworkAccess()
+{
+    return m_impl->roamingNetworkAccess();
+}
 
 } /* namespace WRT */