2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 #include <dpl/log/log.h>
18 #include <CommonsJavaScript/JSUtils.h>
19 #include <CommonsJavaScript/Validator.h>
20 #include <CommonsJavaScript/ScopedJSStringRef.h>
21 #include <Commons/RegexUtils.h>
22 #include <Commons/Exception.h>
24 #include "ApplicationConverter.h"
25 #include "JSApplicationInformation.h"
26 #include "JSApplicationInformationArray.h"
27 #include "JSApplicationServiceExtraDataArray.h"
28 #include "JSApplicationServiceExtraData.h"
29 #include "JSApplicationServiceRequest.h"
30 #include "JSApplicationServiceReply.h"
33 const char* APPLICATOIN_ATTRIBUTE_NAME = "name";
34 const char* APPLICATOIN_ATTRIBUTE_PACKAGE_NAME = "packageName";
35 const char* APPLICATOIN_ATTRIBUTE_ICONF_PATH = "iconPath";
36 const char* APPLICATOIN_ATTRIBUTE_VERSION = "version";
37 const char* APPLICATOIN_ATTRIBUTE_EXTRA_KEY = "key";
38 const char* APPLICATOIN_ATTRIBUTE_EXTRA_VALUE = "value";
39 const char* APPLICATOIN_ATTRIBUTE_OPERATION = "operation";
40 const char* APPLICATOIN_ATTRIBUTE_URI = "uri";
41 const char* APPLICATOIN_ATTRIBUTE_MIME = "mime";
42 const char* APPLICATOIN_ATTRIBUTE_EXTRADATA = "extraData";
47 namespace Application {
49 using namespace WrtDeviceApis;
50 using namespace WrtDeviceApis::CommonsJavaScript;
51 using namespace Api::Application;
53 std::vector<std::string> ApplicationConverter::m_allowedApplicationInformation;
54 std::vector<std::string> ApplicationConverter::m_allowedApplicationServiceRequest;
55 std::vector<std::string> ApplicationConverter::m_allowedApplicationServiceReply;
56 std::vector<std::string> ApplicationConverter::m_allowedApplicationServiceExtraData;
58 ApplicationConverter::ApplicationConverter(JSContextRef context) : Converter(context)
60 static bool init = initializeAllowedProperties();
64 ApplicationConverter::~ApplicationConverter()
68 JSValueRef ApplicationConverter::toJSValueRef(const ApplicationInformationPtr &arg)
72 Throw(Commons::InvalidArgumentException);
74 return CommonsJavaScript::JSUtils::makeObject(m_context, JSApplicationInformation::getClassRef(), arg);
77 ApplicationInformationPtr ApplicationConverter::toApplicationInformation(const JSValueRef &jsValue)
79 if(JSApplicationInformation::isObjectOfClass(m_context, jsValue))
80 return JSApplicationInformation::getApplicationInformation(m_context, jsValue);
82 CommonsJavaScript::Validator validator(m_context);
83 if (!validator.checkArrayKeys(m_allowedApplicationInformation, jsValue)) {
84 LogError("invalid properties in contact object");
85 ThrowMsg(Commons::ConversionException, "Wrong attribute");
88 const ScopedJSStringRef nameStr(JSStringCreateWithUTF8CString(APPLICATOIN_ATTRIBUTE_NAME));
89 const ScopedJSStringRef packageStr(JSStringCreateWithUTF8CString(APPLICATOIN_ATTRIBUTE_PACKAGE_NAME));
90 const ScopedJSStringRef iconPathStr(JSStringCreateWithUTF8CString(APPLICATOIN_ATTRIBUTE_ICONF_PATH));
91 const ScopedJSStringRef versionStr(JSStringCreateWithUTF8CString(APPLICATOIN_ATTRIBUTE_VERSION));
93 JSObjectRef jsObject = toJSObjectRef(jsValue);
95 JSValueRef nameData = JSObjectGetProperty(m_context, jsObject, nameStr.get(), NULL);
96 JSValueRef packageData = JSObjectGetProperty(m_context, jsObject, packageStr.get(), NULL);
97 JSValueRef iconPathData = JSObjectGetProperty(m_context, jsObject, iconPathStr.get(), NULL);
98 JSValueRef versionData = JSObjectGetProperty(m_context, jsObject, versionStr.get(), NULL);
102 std::string iconPath;
105 ApplicationInformationPtr result(new ApplicationInformation());
107 Throw(Commons::ConversionException);
110 if (!JSValueIsUndefined(m_context, nameData)) {
111 name = toString(nameData);
112 result->setName(name);
114 if (!JSValueIsUndefined(m_context, packageData)) {
115 package = toString(packageData);
116 result->setPackage(package);
118 if (!JSValueIsUndefined(m_context, iconPathData)) {
119 iconPath = toString(iconPathData);
120 result->setIconPath(iconPath);
122 if (!JSValueIsUndefined(m_context, versionData)) {
123 version = toString(versionData);
124 result->setVersion(version);
130 JSValueRef ApplicationConverter::toJSValueRef(const ApplicationInformationArrayPtr &arg)
134 Throw(Commons::InvalidArgumentException);
136 return CommonsJavaScript::JSUtils::makeObject(m_context, JSApplicationInformationArray::getClassRef(), arg);
139 ApplicationInformationArrayPtr ApplicationConverter::toApplicationInformationArray(const JSValueRef &jsValue)
141 if(JSApplicationInformationArray::isObjectOfClass(m_context, jsValue))
142 return JSApplicationInformationArray::getApplicationInformationArray(m_context, jsValue);
144 ApplicationInformationArrayPtr result(new ApplicationInformationArray());
146 JSObjectRef jsObject = toJSObjectRef(jsValue);
147 for (std::size_t i = 0; i < JSGetArrayLength(m_context, jsObject); ++i) {
148 JSValueRef element = JSGetArrayElement(m_context, jsObject, i);
149 result->push_back(toApplicationInformation(element));
154 JSValueRef ApplicationConverter::toJSValueRef(const ApplicationServiceRequestPtr &arg)
157 return CommonsJavaScript::JSUtils::makeObject(m_context, JSApplicationServiceRequest::getClassRef(), arg);
160 ApplicationServiceRequestPtr ApplicationConverter::toApplicationServiceRequest(const JSValueRef &jsValue)
162 if(JSApplicationServiceRequest::isObjectOfClass(m_context, jsValue))
163 return JSApplicationServiceRequest::getApplicationServiceRequest(m_context, jsValue);
165 CommonsJavaScript::Validator validator(m_context);
166 if (!validator.checkArrayKeys(m_allowedApplicationServiceRequest, jsValue)) {
167 LogError("invalid properties in ApplicationServiceRequest object");
168 ThrowMsg(Commons::ConversionException, "Wrong attribute");
171 const ScopedJSStringRef operationStr(JSStringCreateWithUTF8CString(APPLICATOIN_ATTRIBUTE_OPERATION));
172 const ScopedJSStringRef uriStr(JSStringCreateWithUTF8CString(APPLICATOIN_ATTRIBUTE_URI));
173 const ScopedJSStringRef mimeStr(JSStringCreateWithUTF8CString(APPLICATOIN_ATTRIBUTE_MIME));
174 const ScopedJSStringRef packageStr(JSStringCreateWithUTF8CString(APPLICATOIN_ATTRIBUTE_PACKAGE_NAME));
175 const ScopedJSStringRef extraDataStr(JSStringCreateWithUTF8CString(APPLICATOIN_ATTRIBUTE_EXTRADATA));
177 JSObjectRef jsObject = toJSObjectRef(jsValue);
179 JSValueRef jsoperation = JSObjectGetProperty(m_context, jsObject, operationStr.get(), NULL);
180 JSValueRef jsuri = JSObjectGetProperty(m_context, jsObject, uriStr.get(), NULL);
181 JSValueRef jsmime = JSObjectGetProperty(m_context, jsObject, mimeStr.get(), NULL);
182 JSValueRef jspackage = JSObjectGetProperty(m_context, jsObject, packageStr.get(), NULL);
183 JSValueRef jsextradata = JSObjectGetProperty(m_context, jsObject, extraDataStr.get(), NULL);
185 std::string operation;
189 ApplicationServiceExtraDataArrayPtr extraDataArray;
191 ApplicationServiceRequestPtr result(new ApplicationServiceRequest());
193 Throw(Commons::ConversionException);
196 if (!JSValueIsUndefined(m_context, jsoperation)) {
197 operation = toString(jsoperation);
198 LogDebug("operation : "<<operation);
199 result->setOperation(operation);
202 if (!JSValueIsUndefined(m_context, jsuri)) {
203 uri = toString(jsuri);
207 if (!JSValueIsUndefined(m_context, jsmime)) {
208 mime = toString(jsmime);
209 result->setMime(mime);
212 if (!JSValueIsUndefined(m_context, jspackage)) {
213 package = toString(jspackage);
214 LogDebug("package : "<<package);
215 result->setPackage(package);
218 if (!JSValueIsUndefined(m_context, jsextradata)) {
219 extraDataArray = toApplicationServiceExtraDataArray(jsextradata);
220 result->setExtraDataArray(extraDataArray);
226 JSValueRef ApplicationConverter::toJSValueRef(const ApplicationServiceReplyPtr &arg)
229 return CommonsJavaScript::JSUtils::makeObject(m_context, JSApplicationServiceReply::getClassRef(), arg);
232 ApplicationServiceReplyPtr ApplicationConverter::toApplicationServiceReply(const JSValueRef &jsValue)
234 if(JSApplicationServiceReply::isObjectOfClass(m_context, jsValue))
235 return JSApplicationServiceReply::getApplicationServiceReply(m_context, jsValue);
237 CommonsJavaScript::Validator validator(m_context);
238 if (!validator.checkArrayKeys(m_allowedApplicationServiceReply, jsValue)) {
239 LogError("invalid properties in ApplicationServiceReply object");
240 ThrowMsg(Commons::ConversionException, "Wrong attribute");
243 const ScopedJSStringRef extraDataStr(JSStringCreateWithUTF8CString(APPLICATOIN_ATTRIBUTE_EXTRADATA));
245 JSObjectRef jsObject = toJSObjectRef(jsValue);
247 JSValueRef jsextradata = JSObjectGetProperty(m_context, jsObject, extraDataStr.get(), NULL);
249 ApplicationServiceExtraDataArrayPtr extraDataArray;
251 ApplicationServiceReplyPtr result(new ApplicationServiceReply());
253 Throw(Commons::ConversionException);
256 if (!JSValueIsUndefined(m_context, jsextradata)) {
257 extraDataArray = toApplicationServiceExtraDataArray(jsextradata);
258 result->setExtraDataArray(extraDataArray);
264 JSValueRef ApplicationConverter::toJSValueRef(const ApplicationServiceExtraDataPtr &arg)
267 return CommonsJavaScript::JSUtils::makeObject(m_context, JSApplicationServiceExtraData::getClassRef(), arg);
270 ApplicationServiceExtraDataPtr ApplicationConverter::toApplicationServiceExtraData(const JSValueRef &jsValue)
272 if(JSApplicationServiceExtraData::isObjectOfClass(m_context, jsValue))
273 return JSApplicationServiceExtraData::getApplicationServiceExtraData(m_context, jsValue);
275 CommonsJavaScript::Validator validator(m_context);
276 if (!validator.checkArrayKeys(m_allowedApplicationServiceExtraData, jsValue)) {
277 LogError("invalid properties in contact object");
278 ThrowMsg(Commons::ConversionException, "Wrong attribute");
281 const ScopedJSStringRef extraDataKeyStr(JSStringCreateWithUTF8CString(APPLICATOIN_ATTRIBUTE_EXTRA_KEY));
282 const ScopedJSStringRef extraDataValueStr(JSStringCreateWithUTF8CString(APPLICATOIN_ATTRIBUTE_EXTRA_VALUE));
284 JSObjectRef jsObject = toJSObjectRef(jsValue);
286 JSValueRef extraDataKeyData = JSObjectGetProperty(m_context, jsObject, extraDataKeyStr.get(), NULL);
287 JSValueRef extraDataValueData = JSObjectGetProperty(m_context, jsObject, extraDataValueStr.get(), NULL);
289 std::string extraDataKey;
290 std::string extraDataValue;
292 ApplicationServiceExtraDataPtr result(new ApplicationServiceExtraData());
294 Throw(Commons::ConversionException);
297 if (!JSValueIsUndefined(m_context, extraDataKeyData)) {
298 extraDataKey = toString(extraDataKeyData);
299 result->setKey(extraDataKey);
302 if (!JSValueIsUndefined(m_context, extraDataValueData)) {
303 extraDataValue = toString(extraDataValueData);
304 result->setValue(extraDataValue);
309 JSValueRef ApplicationConverter::toJSValueRef(const ApplicationServiceExtraDataArrayPtr &arg)
312 return CommonsJavaScript::JSUtils::makeObject(m_context, JSApplicationServiceExtraDataArray::getClassRef(), arg);
315 ApplicationServiceExtraDataArrayPtr ApplicationConverter::toApplicationServiceExtraDataArray(const JSValueRef &jsValue)
317 if(JSApplicationServiceExtraDataArray::isObjectOfClass(m_context, jsValue))
318 return JSApplicationServiceExtraDataArray::getApplicationServiceExtraDataArray(m_context, jsValue);
320 ApplicationServiceExtraDataArrayPtr result(new ApplicationServiceExtraDataArray());
322 JSObjectRef jsObject = toJSObjectRef(jsValue);
323 for (std::size_t i = 0; i < JSGetArrayLength(m_context, jsObject); ++i) {
324 JSValueRef element = JSGetArrayElement(m_context, jsObject, i);
325 result->push_back(toApplicationServiceExtraData(element));
330 bool ApplicationConverter::initializeAllowedProperties()
332 m_allowedApplicationInformation.push_back(APPLICATOIN_ATTRIBUTE_NAME);
333 m_allowedApplicationInformation.push_back(APPLICATOIN_ATTRIBUTE_PACKAGE_NAME);
334 m_allowedApplicationInformation.push_back(APPLICATOIN_ATTRIBUTE_ICONF_PATH);
335 m_allowedApplicationInformation.push_back(APPLICATOIN_ATTRIBUTE_VERSION);
337 m_allowedApplicationServiceRequest.push_back(APPLICATOIN_ATTRIBUTE_OPERATION);
338 m_allowedApplicationServiceRequest.push_back(APPLICATOIN_ATTRIBUTE_URI);
339 m_allowedApplicationServiceRequest.push_back(APPLICATOIN_ATTRIBUTE_MIME);
340 m_allowedApplicationServiceRequest.push_back(APPLICATOIN_ATTRIBUTE_PACKAGE_NAME);
341 m_allowedApplicationServiceRequest.push_back(APPLICATOIN_ATTRIBUTE_EXTRADATA);
343 m_allowedApplicationServiceReply.push_back(APPLICATOIN_ATTRIBUTE_EXTRADATA);
345 m_allowedApplicationServiceExtraData.push_back(APPLICATOIN_ATTRIBUTE_EXTRA_KEY);
346 m_allowedApplicationServiceExtraData.push_back(APPLICATOIN_ATTRIBUTE_EXTRA_VALUE);