2 // Tizen Web Device API
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
19 #include <dpl/log/log.h>
20 #include <CommonsJavaScript/ScopedJSStringRef.h>
21 #include <JSTizenExceptionFactory.h>
22 #include <JSTizenException.h>
23 #include "DataControlFactory.h"
25 #include "DataControlConverter.h"
26 #include "JSSelectObjectArrayValues.h"
27 #include "DataControlConverter.h"
29 #define FUNCTION_CONCAT "concat"
30 #define FUNCTION_JOIN "join"
31 #define FUNCTION_POP "pop"
32 #define FUNCTION_PUSH "push"
33 #define FUNCTION_REVERSE "reverse"
34 #define FUNCTION_SHIFT "shift"
35 #define FUNCTION_SLICE "slice"
36 #define FUNCTION_SORT "sort"
37 #define FUNCTION_SPLICE "splice"
38 #define FUNCTION_TOSTRING "toString"
39 #define FUNCTION_UNSHIFT "unshift"
40 #define FUNCTION_VALUEOF "valueOf"
42 #define ATTRIBUTE_LENGTH "length"
45 namespace DataControl {
47 using namespace DeviceAPI::Common;
48 using namespace WrtDeviceApis::CommonsJavaScript;
50 JSClassDefinition JSSelectObjectArrayValues::m_classInfo = {
52 kJSClassAttributeNone,
64 NULL, //callAsFunction,
65 NULL, //callAsConstructor,
67 NULL, //convertToType,
70 JSStaticValue JSSelectObjectArrayValues::m_property[] = {
71 { ATTRIBUTE_LENGTH, getLength, NULL, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete },
75 JSStaticFunction JSSelectObjectArrayValues::m_function[] = {
76 { FUNCTION_CONCAT, concat, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete },
77 { FUNCTION_JOIN, join, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete },
78 { FUNCTION_POP, pop, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete },
79 { FUNCTION_PUSH, push, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete },
80 { FUNCTION_REVERSE, reverse, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete },
81 { FUNCTION_SHIFT, shift, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete },
82 { FUNCTION_SLICE, slice, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete },
83 { FUNCTION_SORT, sort, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete },
84 { FUNCTION_SPLICE, splice, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete },
85 { FUNCTION_TOSTRING, toString, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete },
86 { FUNCTION_UNSHIFT, unshift, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete },
87 { FUNCTION_VALUEOF, valueOf, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontEnum | kJSPropertyAttributeDontDelete },
91 JSClassRef JSSelectObjectArrayValues::m_jsClassRef = JSClassCreate(
92 JSSelectObjectArrayValues::getClassInfo());
94 JSValueRef JSSelectObjectArrayValues::getLength(JSContextRef context,
96 JSStringRef propertyName,
97 JSValueRef* exception)
101 JSSelectObjectArrayValuesPriv* priv = static_cast<JSSelectObjectArrayValuesPriv*>(JSObjectGetPrivate(object));
105 Throw(WrtDeviceApis::Commons::NullPointerException);
108 DataControlConverter converter(priv->getContext());
109 ISelectDataObjectPtr SelectDataOjbect = priv->getObject();
111 int number = SelectDataOjbect->getRowNumber();
112 return converter.toJSValueRef(number);
114 Catch(WrtDeviceApis::Commons::Exception)
116 LogError("invalid property");
119 return JSValueMakeUndefined(context);
123 const JSClassDefinition* JSSelectObjectArrayValues::getClassInfo()
125 return &(m_classInfo);
128 bool JSSelectObjectArrayValues::isObjectOfClass(JSContextRef context, JSValueRef value)
130 return JSValueIsObjectOfClass(context, value, getClassRef());
134 JSClassRef JSSelectObjectArrayValues::getClassRef()
137 m_jsClassRef = JSClassCreate(&m_classInfo);
142 void JSSelectObjectArrayValues::initialize(JSContextRef context,
147 void JSSelectObjectArrayValues::finalize(JSObjectRef object)
149 JSSelectObjectArrayValuesPriv* priv =
150 static_cast<JSSelectObjectArrayValuesPriv*>(JSObjectGetPrivate(object));
152 JSObjectSetPrivate(object, NULL);
155 bool JSSelectObjectArrayValues::hasProperty(JSContextRef context,
157 JSStringRef propertyName)
162 JSSelectObjectArrayValuesPriv* priv = static_cast<JSSelectObjectArrayValuesPriv*>(JSObjectGetPrivate(object));
166 Throw(WrtDeviceApis::Commons::NullPointerException);
169 DataControlConverter converter(priv->getContext());
170 int index = converter.toSizeT(propertyName);
173 ISelectDataObjectPtr SelectDataOjbect = priv->getObject();
175 if (index < SelectDataOjbect->getRowNumber())
180 Catch(WrtDeviceApis::Commons::Exception)
182 LogError("invalid property");
187 JSValueRef JSSelectObjectArrayValues::getProperty(JSContextRef context,
189 JSStringRef propertyName,
190 JSValueRef* exception)
195 JSSelectObjectArrayValuesPriv* priv = static_cast<JSSelectObjectArrayValuesPriv*>(JSObjectGetPrivate(object));
199 Throw(WrtDeviceApis::Commons::NullPointerException);
202 DataControlConverter converter(priv->getContext());
203 size_t index = converter.toSizeT(propertyName);
206 ISelectDataObjectPtr SelectDataOjbect = priv->getObject();
208 if (index >= SelectDataOjbect->getRowNumber())
210 Throw(WrtDeviceApis::Commons::OutOfRangeException);
213 EventGetIndexedRowPtr event(new EventGetIndexedRow);
214 event->setIndex(index);
216 if (event->setForSynchronousCall())
219 SelectDataOjbect->getIndexedRow(event);
221 if (event->getExceptionCode() == WrtDeviceApis::Commons::ExceptionCodes::None)
223 RowDataPtr data = event->getRowData();
224 return converter.toJSRowData(data);
228 JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Type mismatch");
232 Catch(WrtDeviceApis::Commons::Exception)
234 LogError("invalid property");
237 return JSValueMakeUndefined(context);
240 JSObjectRef JSSelectObjectArrayValues::createJSObject(JSContextRef context, const std::string &filepath)
242 ISelectDataObjectPtr SelectDataObject(DataControlFactory::getInstance().getSelectDataObject());
243 SelectDataObject->openResultPath(filepath);
244 // SelectDataObject->loadHeader();
245 // SelectDataObject->printHeader();
246 JSSelectObjectArrayValuesPriv * priv = new JSSelectObjectArrayValuesPriv( context, SelectDataObject);
247 return JSObjectMake(context, getClassRef(), priv);
251 bool JSSelectObjectArrayValues::setProperty(JSContextRef context,
253 JSStringRef propertyName,
255 JSValueRef* exception)
258 /* ContactConverterFactory::ConverterType converter =
259 ContactConverterFactory::getConverter(context);
262 size_t index = converter->toSizeT(propertyName);
263 AddressBookPtr addressBook(NULL);
264 if (!JSValueIsUndefined(context, value)) {
265 addressBook = converter->toAddressBook(value);
267 JSSelectObjectArrayValuesPriv* priv =
268 static_cast<JSSelectObjectArrayValuesPriv*>(JSObjectGetPrivate(object));
270 Throw(WrtDeviceApis::Commons::NullPointerException);
272 AddressBookArrayPtr addressBooks = priv->getObject();
274 Throw(WrtDeviceApis::Commons::NullPointerException);
276 if (addressBooks->size() <= index) {
277 addressBooks->resize(index + 1);
279 (*addressBooks)[index] = addressBook;
282 Catch(WrtDeviceApis::Commons::Exception)
284 LogError("error occured");
285 JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Type mismatch");
290 bool JSSelectObjectArrayValues::deleteProperty(JSContextRef context,
292 JSStringRef propertyName,
293 JSValueRef* exception)
295 /* ContactConverterFactory::ConverterType converter =
296 ContactConverterFactory::getConverter(context);
299 size_t index = converter->toSizeT(propertyName);
300 AddressBookPtr addressBook(NULL);
301 JSSelectObjectArrayValuesPriv* priv =
302 static_cast<JSSelectObjectArrayValuesPriv*>(JSObjectGetPrivate(object));
304 Throw(WrtDeviceApis::Commons::NullPointerException);
306 AddressBookArrayPtr addressBooks = priv->getObject();
308 Throw(WrtDeviceApis::Commons::NullPointerException);
310 if (addressBooks->size() > index) {
311 (*addressBooks)[index] = addressBook;
315 Catch(WrtDeviceApis::Commons::Exception)
317 LogError("error occured");
318 JSTizenExceptionFactory::postException(context, exception, JSTizenException::TYPE_MISMATCH_ERROR, "Type mismatch");
323 void JSSelectObjectArrayValues::getPropertyNames(JSContextRef context,
325 JSPropertyNameAccumulatorRef propertyNames)
330 JSSelectObjectArrayValuesPriv* priv = static_cast<JSSelectObjectArrayValuesPriv*>(JSObjectGetPrivate(object));
334 Throw(WrtDeviceApis::Commons::NullPointerException);
337 DataControlConverter converter(priv->getContext());
338 ISelectDataObjectPtr SelectDataOjbect = priv->getObject();
339 int number = SelectDataOjbect->getRowNumber();
341 for (int i=0; i < number; i++)
343 ScopedJSStringRef name(converter.toJSStringRef(converter.toString(i)));
344 JSPropertyNameAccumulatorAddName(propertyNames, name.get());
347 Catch(WrtDeviceApis::Commons::Exception)
349 LogError("invalid property");
353 JSValueRef JSSelectObjectArrayValues::concat(JSContextRef context,
354 JSObjectRef function,
355 JSObjectRef thisObject,
356 size_t argumentCount,
357 const JSValueRef arguments[],
358 JSValueRef* exception)
360 return JSValueMakeUndefined(context);
363 JSValueRef JSSelectObjectArrayValues::join(JSContextRef context,
364 JSObjectRef function,
365 JSObjectRef thisObject,
366 size_t argumentCount,
367 const JSValueRef arguments[],
368 JSValueRef* exception)
370 return JSValueMakeUndefined(context);
373 JSValueRef JSSelectObjectArrayValues::pop(JSContextRef context,
374 JSObjectRef function,
375 JSObjectRef thisObject,
376 size_t argumentCount,
377 const JSValueRef arguments[],
378 JSValueRef* exception)
380 return JSValueMakeUndefined(context);
383 JSValueRef JSSelectObjectArrayValues::push(JSContextRef context,
384 JSObjectRef function,
385 JSObjectRef thisObject,
386 size_t argumentCount,
387 const JSValueRef arguments[],
388 JSValueRef* exception)
390 return JSValueMakeUndefined(context);
393 JSValueRef JSSelectObjectArrayValues::reverse(JSContextRef context,
394 JSObjectRef function,
395 JSObjectRef thisObject,
396 size_t argumentCount,
397 const JSValueRef arguments[],
398 JSValueRef* exception)
400 return JSValueMakeUndefined(context);
403 JSValueRef JSSelectObjectArrayValues::shift(JSContextRef context,
404 JSObjectRef function,
405 JSObjectRef thisObject,
406 size_t argumentCount,
407 const JSValueRef arguments[],
408 JSValueRef* exception)
410 return JSValueMakeUndefined(context);
413 JSValueRef JSSelectObjectArrayValues::slice(JSContextRef context,
414 JSObjectRef function,
415 JSObjectRef thisObject,
416 size_t argumentCount,
417 const JSValueRef arguments[],
418 JSValueRef* exception)
420 return JSValueMakeUndefined(context);
423 JSValueRef JSSelectObjectArrayValues::sort(JSContextRef context,
424 JSObjectRef function,
425 JSObjectRef thisObject,
426 size_t argumentCount,
427 const JSValueRef arguments[],
428 JSValueRef* exception)
430 return JSValueMakeUndefined(context);
433 JSValueRef JSSelectObjectArrayValues::splice(JSContextRef context,
434 JSObjectRef function,
435 JSObjectRef thisObject,
436 size_t argumentCount,
437 const JSValueRef arguments[],
438 JSValueRef* exception)
440 return JSValueMakeUndefined(context);
443 JSValueRef JSSelectObjectArrayValues::toString(JSContextRef context,
444 JSObjectRef function,
445 JSObjectRef thisObject,
446 size_t argumentCount,
447 const JSValueRef arguments[],
448 JSValueRef* exception)
450 return join(context, function, thisObject, 0, arguments, exception);
453 JSValueRef JSSelectObjectArrayValues::unshift(JSContextRef context,
454 JSObjectRef function,
455 JSObjectRef thisObject,
456 size_t argumentCount,
457 const JSValueRef arguments[],
458 JSValueRef* exception)
460 return JSValueMakeUndefined(context);
463 JSValueRef JSSelectObjectArrayValues::valueOf(JSContextRef context,
464 JSObjectRef function,
465 JSObjectRef thisObject,
466 size_t argumentCount,
467 const JSValueRef arguments[],
468 JSValueRef* exception)
470 return JSValueMakeUndefined(context);