1 //******************************************************************
3 // Copyright 2014 Samsung Electronics All Rights Reserved.
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
11 // http://www.apache.org/licenses/LICENSE-2.0
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
21 /// @file PluginManagerImpl.cpp
25 #include "PluginManagerImpl.h"
29 PluginManagerImpl *PluginManagerImpl::s_pinstance = nullptr;
31 extern "C" PluginManagerImpl *create_object()
33 PluginManagerImpl *newobj;
34 newobj = new PluginManagerImpl;
38 extern "C" void destroy_object( PluginManagerImpl *object )
43 PluginManagerImpl::PluginManagerImpl()
45 cppm = CpluffAdapter::Getinstance();
46 javappm = FelixAdapter::Getinstance();
50 PluginManagerImpl::~PluginManagerImpl()
55 int PluginManagerImpl::registerPlugin(std::string path)
58 flag = cppm->registerPlugin(path);
59 flag = javappm->registerPlugin(path);
64 int PluginManagerImpl::registerAllPlugin(std::string path)
67 flag = cppm->registerAllPlugin(path);
68 flag = javappm->registerAllPlugin(path);
73 int PluginManagerImpl::unregisterPlugin(std::string id)
77 for (unsigned int i = 0 ; i < m_plugins.size(); i++)
79 if (!m_plugins[i].getID().compare(id))
81 if (!m_plugins[i].getValueByAttribute("Language").compare("CPP"))
83 if ((flag = cppm->unregisterPlugin(&m_plugins[i])))
85 m_plugins.erase(m_plugins.begin() + i);
88 else if (!m_plugins[i].getValueByAttribute("Language").compare("JAVA"))
90 if ((flag = javappm->unregisterPlugin(&m_plugins[i])))
92 m_plugins.erase(m_plugins.begin() + i);
101 int PluginManagerImpl::unregisterAllPlugin()
104 flag = cppm->unregisterAllPlugin();
105 flag = javappm->unregisterAllPlugin();
110 int PluginManagerImpl::rescanPlugin()
112 Config *config = Config::Getinstance();
113 std::string pluginpath = config->getPluginPath();
114 if (pluginpath != "")
116 printf("Current path is %s\n", pluginpath.c_str());
120 fprintf(stderr, "Pluing path does not exist\n");
123 int result = registerAllPlugin(pluginpath);
128 std::vector<Plugin> &PluginManagerImpl::getAllPlugins(void)
133 std::vector<Plugin> *PluginManagerImpl::findPlugins(const std::string key,
134 const std::string value)
136 std::vector<Plugin> *re_plugins;
137 re_plugins = new std::vector<Plugin>;
138 for (unsigned int i = 0; i < m_plugins.size(); i++)
140 if (!m_plugins[i].getValueByAttribute(key).compare(value))
142 re_plugins->push_back(m_plugins[i]);
149 Plugin *PluginManagerImpl::getPlugin(const std::string pluginID)
151 for (unsigned int i = 0; i < m_plugins.size(); i++)
153 if (!(m_plugins[i].getID().compare(pluginID)))
155 return &(m_plugins[i]);
161 int PluginManagerImpl::startPlugins(const std::string key, const std::string value)
164 std::string resourcetype = "";
165 int size = value.size();
167 //Parsing Resource_Type
168 for (int i = size - 1; i > -1 ; i--)
170 if (value.at(i) == '.' && value.at(i) == '/')
174 resourcetype += value.at(i);
177 //Reverse string(Resource value)
178 reverse(resourcetype.begin(), resourcetype.end());
181 std::vector<Plugin> *resource_plugin = findPlugins(key, resourcetype);
184 std::vector<Plugin>::iterator it;
185 for (it = resource_plugin->begin(); it != resource_plugin->end(); it++)
187 if (!isStarted(&(*it))) // started : 1, stop : 0
189 flag = startPlugins(&(*it));//TODO PASS the OCPlatform
192 delete(resource_plugin);
193 resource_plugin = nullptr;
197 int PluginManagerImpl::startPlugins(Plugin *const plugin)
202 flag = startbyPlatform(plugin, arg);
207 int PluginManagerImpl::stopPlugins(const std::string key, const std::string value)
210 std::string resourcetype = "";
211 int size = value.size();
213 //Parsing Resource_Type
214 for (int i = size - 1; i > -1 ; i--)
216 if (value.at(i) == '.' && value.at(i) == '/')
220 resourcetype += value.at(i);
223 //Reverse string(Resource value)
225 reverse(resourcetype.begin(), resourcetype.end());
227 // printf("resource value = %s\n", resourcetype.c_str());
230 std::vector<Plugin> *resource_plugin = findPlugins(key, resourcetype);
233 std::vector<Plugin>::iterator it;
234 for (it = resource_plugin->begin(); it != resource_plugin->end(); it++)
236 if (isStarted(&(*it))) // started : 1, stop : 0
238 flag = stopPlugins(&(*it));//TODO PASS the OCPlatform
241 delete(resource_plugin);
242 resource_plugin = nullptr;
246 int PluginManagerImpl::stopPlugins(Plugin *const plugin)
250 flag = stopbyPlatform(plugin);
255 int PluginManagerImpl::startbyPlatform(Plugin *const plugin, void *const arg)
259 for (unsigned int i = 0 ; i < m_plugins.size(); i++)
261 if (!m_plugins[i].getID().compare(plugin->getID()))
263 if (!m_plugins[i].getValueByAttribute("Language").compare("CPP"))
265 flag = cppm->start(plugin, arg);
267 else if (!m_plugins[i].getValueByAttribute("Language").compare("JAVA"))
269 flag = javappm->start(plugin, arg);
281 int PluginManagerImpl::stopbyPlatform(Plugin *const plugin)
285 for (unsigned int i = 0 ; i < m_plugins.size(); i++)
287 if (!m_plugins[i].getID().compare(plugin->getID()))
289 if (!m_plugins[i].getValueByAttribute("Language").compare("CPP"))
291 flag = cppm->stop(plugin);
293 else if (!m_plugins[i].getValueByAttribute("Language").compare("JAVA"))
295 flag = javappm->stop(plugin);
307 bool PluginManagerImpl::isStarted(Plugin *plugin)
310 if (cppm->isStarted(plugin))
316 if (javappm->isStarted(plugin))
324 std::string PluginManagerImpl::getState(std::string plugID)
326 std::string str = "";
328 for (unsigned int i = 0 ; i < m_plugins.size(); i++)
330 if (!m_plugins[i].getID().compare(plugID))
332 if (!m_plugins[i].getValueByAttribute("Language").compare("CPP"))
334 str = cppm->getState(plugID);
336 else if (!m_plugins[i].getValueByAttribute("Language").compare("JAVA"))
338 str = javappm->getState(plugID);
346 std::vector<Plugin> PluginManagerImpl::refreshPluginInfo()
349 m_plugins = cppm->getAllPlugins();
351 std::vector<Plugin> java_plugins = javappm->getAllPlugins();
352 int size = java_plugins.size();
354 for (int i = 0 ; i < size ; i++)
356 m_plugins.push_back(java_plugins[i]);