Add initSession step in PluginLogic.
authorTaejeong Lee <taejeong.lee@samsung.com>
Wed, 9 Jan 2013 04:29:42 +0000 (13:29 +0900)
committerTaejeong Lee <taejeong.lee@samsung.com>
Wed, 9 Jan 2013 07:43:08 +0000 (16:43 +0900)
 * This step supports to perform PluginLogic initialization and Plugin so file preloading.

[Issue#] N/A
[Problem] N/A
[Cause] N/A
[Solution] Add initSession step in PluginLogic.

Change-Id: I8363bda15f2313f0ccec4dfe3e51d67c98b7dcfd

src/plugin-loading/plugin_container_support.cpp
src/plugin-loading/plugin_container_support.h
src/plugin-loading/plugin_logic.cpp
src/plugin-loading/plugin_logic.h

index 6bc1d31..4518b0f 100644 (file)
@@ -54,6 +54,15 @@ PluginContainerSupport::~PluginContainerSupport()
     m_standardFeatureList.clear();
 }
 
+void PluginContainerSupport::Initialize(int widgetHandle)
+{
+    if (isInitialized() == false)
+    {
+        readAllowedPlugins(widgetHandle);
+        readRootPlugins(widgetHandle);
+    }
+}
+
 std::list<std::string> PluginContainerSupport::getAllowedFeatures(int widgetHandle) const
 {
     //TODO it has to return LIST NOT SET!!!
@@ -280,6 +289,21 @@ PluginContainerSupport::getStandardPlugins() const
     return plugins;
 }
 
+PluginContainerSupport::PluginsList
+PluginContainerSupport::getPluginsList() const
+{
+    LogDebug("");
+
+    PluginsList plugins;
+
+    FOREACH(it, m_pluginModels)
+    {
+        plugins.push_back(*it);
+    }
+
+    return plugins;
+}
+
 PluginModelPtr
 PluginContainerSupport::getPluginForFeature(const std::string& featureName)
 {
index 9186e70..8bd361e 100644 (file)
@@ -71,12 +71,14 @@ public:
     PluginContainerSupport();
 
     bool isInitialized() { return m_initialized; }
+    void Initialize(int widgetHandle);
     void registerPluginModel(WrtDB::DbPluginHandle handle);
     std::list<std::string> getAllowedFeatures(int widgetHandle) const;
     void readAllowedPlugins(int widgetHandle);
     void readRootPlugins(int widgetHandle);
     FeaturesList getStandardFeatures() const;
     PluginsList  getStandardPlugins() const;
+    PluginsList  getPluginsList() const;
 
     PluginModelPtr getPluginForFeature(const std::string& featureName);
 
index dbb45b7..5fb5d70 100644 (file)
@@ -83,6 +83,7 @@ class PluginLogic::Impl
     ~Impl();
 
     // Widget session
+    void initSession(int widgetHandle);
     void startSession(int widgetHandle,
                       JSGlobalContextRef context,
                       double scaleFactor,
@@ -151,6 +152,10 @@ PluginLogic::Impl::~Impl()
     LogDebug("Deinitializing plugin Logic...");
 }
 
+void PluginLogic::initSession(int widgetHandle)
+{
+    m_impl->initSession(widgetHandle);
+}
 
 void PluginLogic::startSession(int widgetHandle,
                                JSGlobalContextRef ctx,
@@ -230,6 +235,50 @@ PluginLogic::~PluginLogic()
 {
 }
 
+void PluginLogic::Impl::initSession(int widgetHandle)
+{
+    LogInfo("init pluginLogic...");
+
+    m_pluginsSupport->Initialize(widgetHandle);
+
+    //add standard objects
+    LogDebug("Preload plugins so file");
+
+    PluginContainerSupport::PluginsList pluginList =
+                                          m_pluginsSupport->getPluginsList();
+
+    FOREACH(it, pluginList)
+    {
+        PluginModelPtr& pluginModel = *it;
+        PluginPtr pluginLib = pluginModel->LibraryInstance.Get();
+
+        if (!pluginLib)
+        {
+            std::string path = pluginModel->LibraryPath.Get() +
+                               std::string(LIBRARY_PATH_SEPARATOR) +
+                               pluginModel->LibraryName.Get();
+
+            pluginLib = Plugin::LoadFromFile(path);
+
+            if (!pluginLib)
+            {
+                LogError("Loading library failed");
+            } else
+            {
+                pluginModel->LibraryInstance.Set(pluginLib);
+
+                LogDebug("pluginModel->LibraryInstance.Set() : " << pluginLib->GetFileName());
+            }
+        }
+        else
+        {
+            LogDebug("Already loaded");
+        }
+    }
+
+    LogDebug("Preload plugins so file_done");
+}
+
 void PluginLogic::Impl::startSession(int widgetHandle,
                                      JSGlobalContextRef context,
                                      double scaleFactor,
@@ -238,9 +287,9 @@ void PluginLogic::Impl::startSession(int widgetHandle,
 {
     LogInfo("Starting widget session...");
 
-    if (!m_pluginsSupport->isInitialized()) {
-        m_pluginsSupport->readRootPlugins(widgetHandle);
-        m_pluginsSupport->readAllowedPlugins(widgetHandle);
+    if (!m_pluginsSupport->isInitialized())
+    {
+        m_pluginsSupport->Initialize(widgetHandle);
     }
     auto sessionIt = m_sessions.find(context);
 
index bccc865..e524ec0 100644 (file)
@@ -43,6 +43,7 @@ class PluginLogic : DPL::Noncopyable
 {
   public:
     // Widget session
+    void initSession(int widgetHandle);
     void startSession(int widgetHandle,
                       JSGlobalContextRef view,
                       double scaleFactor,