6b54d37574dcddf0b2877e3f9db37793d2ffda28
[framework/web/wrt-plugins-common.git] / src / Commons / WrtWrapper / WrtWrappersMgr.cpp
1 /*
2  * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  *    Licensed under the Apache License, Version 2.0 (the "License");
5  *    you may not use this file except in compliance with the License.
6  *    You may obtain a copy of the License at
7  *
8  *        http://www.apache.org/licenses/LICENSE-2.0
9  *
10  *    Unless required by applicable law or agreed to in writing, software
11  *    distributed under the License is distributed on an "AS IS" BASIS,
12  *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *    See the License for the specific language governing permissions and
14  *    limitations under the License.
15  */
16 /*
17  * @author      Grzegorz Krawczyk (g.krawczyk@samsung.com)
18  * @version     0.1
19  * @brief
20  */
21
22 #include <dpl/log/log.h>
23 #include <Commons/Exception.h>
24 #include "WrtWrapper.h"
25 #include "WrtWrappersMgr.h"
26
27 namespace WrtDeviceApis {
28 namespace Commons {
29
30 WrtWrappersMgr::WrtWrappersMgr()
31 {
32     DPL::Log::LogSystemSingleton::Instance().SetTag("WRT_PLUGINS");
33 }
34
35 WrtWrappersMgr::~WrtWrappersMgr()
36 {
37 }
38
39 IWrtWrapperPtr WrtWrappersMgr::registerWrapper(
40         int widgetId,
41         JavaScriptContext context,
42         const engine_interface_t* interface)
43 {
44     LogDebug("entered");
45     if (!context || !interface) {
46         Throw(InvalidArgumentException);
47     }
48
49     if (isWrapperRegistered(context)) {
50         return getWrtWrapper(context);
51     }
52
53     LogDebug("creation wrapper for id: " << widgetId);
54     IWrtWrapperPtr wrapper(new WrtWrapper(widgetId, interface));
55
56     addWrapper(context, wrapper);
57
58     return wrapper;
59 }
60
61 void WrtWrappersMgr::removeWrapper(int widgetId)
62 {
63     LogDebug("entered");
64     RegisteredWrappersIterator it = m_wrappers.begin();
65
66     for (; it != m_wrappers.end(); ++it) {
67         if (it->second->getWidgetId() == widgetId) {
68             m_wrappers.erase(it);
69             return;
70         }
71     }
72     Throw(InvalidArgumentException);
73 }
74
75 void WrtWrappersMgr::removeWrapper(JavaScriptContext context)
76 {
77     LogDebug("entered");
78     RegisteredWrappersIterator it = m_wrappers.find(context);
79
80     if (it == m_wrappers.end()) {
81         Throw(InvalidArgumentException);
82     }
83
84     m_wrappers.erase(it);
85 }
86
87 WrtWrappersMgr& WrtWrappersMgr::getInstance()
88 {
89     LogDebug("entered");
90
91     static WrtWrappersMgr instance;
92     return instance;
93 }
94
95 IWrtWrapperPtr WrtWrappersMgr::getWrapper(const JavaScriptContext context)
96 const
97 {
98     LogDebug("entered");
99     RegisteredWrappersConstIterator it = m_wrappers.find(context);
100
101     if (it == m_wrappers.end()) {
102         Throw(OutOfRangeException);
103     }
104
105     return it->second;
106 }
107
108 IWrtWrapperPtr WrtWrappersMgr::getWrtWrapper(const JavaScriptContext context)
109 const
110 {
111     LogDebug("entered");
112
113     IWrtWrapperPtr wrapper;
114
115     Try {
116         wrapper = getWrapper(context);
117     }
118     Catch(OutOfRangeException){
119         Throw(InvalidArgumentException);
120     }
121
122     return wrapper;
123 }
124
125 void WrtWrappersMgr::addWrapper(JavaScriptContext context,
126         IWrtWrapperPtr wrapper)
127 {
128     LogDebug("entered");
129     m_wrappers.insert(std::make_pair(context, wrapper));
130 }
131
132 bool WrtWrappersMgr::isWrapperRegistered(JavaScriptContext context) const
133 {
134     LogDebug("entered");
135     RegisteredWrappersConstIterator it = m_wrappers.find(context);
136
137     if (it == m_wrappers.end()) {
138         return false;
139     }
140     return true;
141 }
142
143 }
144 } // WrtDeviceApisCommon