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.
19 * @file EventFilterConverter.cpp
20 * @author Jihwa Park (jh7979.park@samsung.com)
25 #include <dpl/log/log.h>
26 #include <CommonsJavaScript/ScopedJSStringRef.h>
27 #include <CommonsJavaScript/Validator.h>
28 #include <CommonsJavaScript/JSUtils.h>
29 #include <Commons/RegexUtils.h>
30 #include "JSAccount.h"
31 #include "AccountConverter.h"
32 #include "JSAccountService.h"
33 #include "JSAccountServiceType.h"
34 #include "JSAccountManager.h"
35 #include "JSFeatureArray.h"
36 #include "JSAccountServices.h"
37 #include "JSAccountServiceProvider.h"
39 #define ACCOUNT_SERVICES_NAME "serviceName"
40 #define ACCOUNT_SERVICES_TYPE "serviceType"
42 using namespace TizenApis::Api::Account;
43 using namespace WrtDeviceApis::Commons;
44 using namespace WrtDeviceApis::CommonsJavaScript;
47 const int DEFAULT_EVENT_INTERVAL = 1;
54 std::vector<std::string> AccountConverter::m_allowedAttributes;
55 std::vector<std::string> AccountConverter::m_allowedCreateProperties;
57 AccountConverter::AccountConverter(JSContextRef context) : Converter(context)
60 if (m_allowedAttributes.size() == 0) {
61 m_allowedAttributes.push_back("id");
62 m_allowedAttributes.push_back("iconPath");
64 if (m_allowedCreateProperties.size() == 0) {
65 m_allowedCreateProperties.push_back("id");
66 m_allowedCreateProperties.push_back("iconPath");
70 AccountConverter::~AccountConverter()
75 JSValueRef AccountConverter::toJSValueRefAccount(const EventAccountPtr& arg)
78 return JSAccount::createJSAccount(m_context, arg);
81 JSValueRef AccountConverter::toJSValueRefAccountServiceType(const AccountServiceTypePropertyPtr& arg)
84 return JSAccountServiceType::createJSObject(m_context, arg);
87 JSValueRef AccountConverter::toJSValueRefAccountServiceProvider(const AccountServiceProviderPropertyPtr& arg)
90 return JSAccountServiceProvider::createJSObject(m_context, arg);
96 JSValueRef AccountConverter::toJSValueRef(
97 const std::vector<EventAccountPtr> &arg)
100 return toJSValueRef_(arg, &AccountConverter::toJSValueRefAccount, this);
103 JSValueRef AccountConverter::toJSValueRefAccountService(const IAccountServicePtr& arg)
106 AccountServicePrivObject *priv = new AccountServicePrivObject(m_context, arg);
107 return JSObjectMake(m_context, JSAccountService::getClassRef(), priv);
110 JSValueRef AccountConverter::toJSValueRef(const std::vector<IAccountServicePtr> &arg)
113 return toJSValueRef_(arg, &AccountConverter::toJSValueRefAccountService, this);
117 JSValueRef AccountConverter::toFunctionOrNull(const JSValueRef& arg)
120 if (Validator(m_context).isCallback(arg)) {
122 } else if (!JSValueIsNull(m_context,
123 arg) && !JSValueIsUndefined(m_context, arg)) {
124 ThrowMsg(InvalidArgumentException, "Not a function nor JS null.");
129 JSValueRef AccountConverter::toFunction(const JSValueRef& arg)
132 if (Validator(m_context).isCallback(arg)) {
134 } else if (JSValueIsNull(m_context,
135 arg) || JSValueIsUndefined(m_context, arg)) {
136 ThrowMsg(ConversionException, "JS null passed as function.");
138 ThrowMsg(InvalidArgumentException, "Not a function nor JS null.");
141 AccountServicesPtr AccountConverter::toService(const JSValueRef jsValue)
143 const ScopedJSStringRef serviceNameStr(JSStringCreateWithUTF8CString(ACCOUNT_SERVICES_NAME));
144 const ScopedJSStringRef serviceTypeStr(JSStringCreateWithUTF8CString(ACCOUNT_SERVICES_TYPE));
146 JSObjectRef jsObject = toJSObjectRef(jsValue);
148 JSValueRef serviceNameData = JSObjectGetProperty(m_context, jsObject, serviceNameStr.get(), NULL);
149 JSValueRef serviceTypeData = JSObjectGetProperty(m_context, jsObject, serviceTypeStr.get(), NULL);
151 std::string serviceName;
152 std::string serviceTypeId;
154 AccountServicesPtr result = AccountServicesPtr(new AccountServices());
156 Throw(ConversionException);
159 if (!JSValueIsUndefined(m_context, serviceNameData)) {
160 serviceName = toString(serviceNameData);
161 result->setName(serviceName);
164 if (!JSValueIsUndefined(m_context, serviceTypeData)) {
165 serviceTypeId = toString(serviceTypeData);
166 result->setServiceTypeId(serviceTypeId);
172 AccountServicesArrayPtr AccountConverter::toAccountService(const JSValueRef jsValue)
174 AccountServicesArrayPtr result(new AccountServicesArray());
176 std::vector<AccountServicesPtr> resultVector;
177 JSObjectRef objArg = toJSObjectRef(jsValue);
178 LogDebug("array length "<<JSGetArrayLength(m_context, objArg));
179 for (std::size_t i = 0; i < JSGetArrayLength(m_context, objArg); i++) {
180 JSValueRef element = JSGetArrayElement(m_context, objArg, i);
181 resultVector.push_back(toService(element));
184 *result = resultVector;
188 void AccountConverter::setProvider(const JSValueRef jsValue)
192 const ScopedJSStringRef providerStr(JSStringCreateWithUTF8CString("providerId"));
193 JSObjectRef arg = toJSObjectRef(jsValue);
194 JSValueRef providerData = JSObjectGetProperty(m_context, arg, providerStr.get(), NULL);
196 if (!JSValueIsUndefined(m_context, providerData)) {
197 m_provider = toString(providerData);
198 LogDebug("m_provider : " << m_provider);
201 m_provider = toString(jsValue);
204 std::string AccountConverter::convertTostring(const JSValueRef jsValue)
208 string = toString(jsValue);
212 EventAccountPtr AccountConverter::toAccount(const std::string& accountServiceProviderId){
214 EventAccountPtr result(new EventAccount());
216 const ScopedJSStringRef displayNameStr(JSStringCreateWithUTF8CString("displayName"));
217 const ScopedJSStringRef iconPathStr(JSStringCreateWithUTF8CString("iconPath"));
219 //TODO set displayName
221 // JSValueRef displayNameData = JSObjectGetProperty(m_context, arg, displayNameStr.get(), NULL);
222 // JSValueRef iconPathData = JSObjectGetProperty(m_context, arg, iconPathStr.get(), NULL);
224 // if (!JSValueIsUndefined(m_context, displayNameData)) {
225 // result->setDisplayName(toString(displayNameData));
228 // if (!JSValueIsUndefined(m_context, iconPathData)) {
229 // result->setIconPath(toString(iconPathData));
232 result->setProviderName(accountServiceProviderId);
238 EventAccountPtr AccountConverter::toAccount(const JSValueRef account)
241 EventAccountPtr result(new EventAccount());
243 const ScopedJSStringRef displayNameStr(JSStringCreateWithUTF8CString("displayName"));
244 const ScopedJSStringRef iconPathStr(JSStringCreateWithUTF8CString("iconPath"));
246 JSObjectRef arg = toJSObjectRef(account);
248 JSValueRef displayNameData = JSObjectGetProperty(m_context, arg, displayNameStr.get(), NULL);
249 JSValueRef iconPathData = JSObjectGetProperty(m_context, arg, iconPathStr.get(), NULL);
251 if (!JSValueIsUndefined(m_context, displayNameData)) {
252 result->setDisplayName(toString(displayNameData));
255 if (!JSValueIsUndefined(m_context, iconPathData)) {
256 result->setIconPath(toString(iconPathData));
259 result->setProviderName(m_provider);
261 if (!JSValueIsUndefined(m_context, providerNameData)) {
262 result->setProviderName(toString(providerNameData));
265 if (!JSValueIsUndefined(m_context, emailAddressData)) {
266 result->setEmailAddress(toString(emailAddressData));
269 if (!JSValueIsUndefined(m_context, domainNameData)) {
270 result->setDomainName(toString(domainNameData));
273 if (!JSValueIsUndefined(m_context, serviceData)) {
274 AccountServicesArrayPtr m_service = toAccountService(serviceData);
275 result->setService(m_service);
281 void AccountConverter::toEventFilterConvertId(
282 const AccountFilterPtr &result,
283 const JSValueRef &filters)
285 const ScopedJSStringRef idStr(JSStringCreateWithUTF8CString("id"));
286 JSObjectRef filterObj = toJSObjectRef(filters);
287 if (JSObjectHasProperty(m_context, filterObj, idStr.get())) {
288 LogDebug("converting id");
289 JSValueRef value = JSObjectGetProperty(m_context, filterObj, idStr.get(), NULL);
290 result->setIdFilter(toString(value));
294 AccountFilterPtr AccountConverter::toAccountFilter(const JSValueRef &filters)
297 AccountFilterPtr result(new AccountFilter());
298 Validator validator(m_context);
299 if (!JSValueIsObject(m_context, filters)) {
300 LogError("Wrong filter parameter");
301 Throw(InvalidArgumentException);
303 if (!validator.checkArrayKeys(m_allowedAttributes, filters)) {
304 LogError("Wrong filter's attribue");
305 Throw(ConversionException);
308 toEventFilterConvertId(result, filters);
312 EventAccountListPtr AccountConverter::toVectorOfAccounts(JSValueRef events)
315 EventAccountListPtr result(new EventAccountList());
317 std::vector<EventAccountPtr> resultVector;
318 JSObjectRef objArg = toJSObjectRef(events);
319 LogDebug("array length " + JSGetArrayLength(m_context, objArg));
320 for (std::size_t i = 0; i < JSGetArrayLength(m_context, objArg); i++) {
321 JSValueRef element = JSGetArrayElement(m_context, objArg, i);
322 resultVector.push_back(toAccount(element));
325 *result = resultVector;