From: Robert Karolak Date: Mon, 12 Jan 2015 14:04:19 +0000 (+0100) Subject: [Messaging] add support for AttributeRange filter X-Git-Tag: submit/tizen_tv/20150603.064601~1^2~603^2~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=04160a35f311a2261b30dc557b3d5e5be542714b;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [Messaging] add support for AttributeRange filter [Verification] More TCT tests passes Change-Id: Id38eeacd1a36d013cf7f44faff1b4a5469d3df2c Signed-off-by: Robert Karolak --- diff --git a/src/messaging/MsgCommon/Any.cpp b/src/messaging/MsgCommon/Any.cpp index fb2b2585..4f5d450c 100644 --- a/src/messaging/MsgCommon/Any.cpp +++ b/src/messaging/MsgCommon/Any.cpp @@ -16,6 +16,8 @@ // #include "Any.h" + +#include //#include namespace extension { @@ -99,15 +101,18 @@ std::string Any::toString() const std::tm* Any::toDateTm() const { - //TODO is it ok? - std::time_t time = static_cast(m_value.get()); - return gmtime(&time); + std::tm* tm = new std::tm(); + strptime(toString().c_str(), "%Y-%m-%dT%H:%M:%S.%zZ", tm); + return tm; } std::time_t Any::toTimeT() const { - //TODO is it ok? - return static_cast(m_value.get()); + std::time_t current_time; + std::time(¤t_time); + std::tm* timeinfo = std::localtime(¤t_time); + long offset = timeinfo->tm_gmtoff; + return (mktime(toDateTm()) + offset) * 1000; } } // Tizen diff --git a/src/messaging/messaging_api.js b/src/messaging/messaging_api.js index 90679be5..bee7bea5 100644 --- a/src/messaging/messaging_api.js +++ b/src/messaging/messaging_api.js @@ -17,6 +17,7 @@ var Property = { E: 1 << 1, // ENUMERABLE C: 1 << 2 // CONFIGURABLE } + //TODO remove CommonFS when C++ filesystem will be available function CommonFS(){}; CommonFS.cacheVirtualToReal = { @@ -33,7 +34,7 @@ CommonFS.toRealPath = function (aPath) { _uriPrefix = 'file://', i; if (aPath.indexOf(_uriPrefix) === 0) { - _fileRealPath = aPath.substr(_uriPrefix.length); + _fileRealPath = aPath; /*.substr(_uriPrefix.length);*/ } else if (aPath[0] != '/') { //virtual path$ var _pathTokens = aPath.split('/'); @@ -53,6 +54,24 @@ CommonFS.toRealPath = function (aPath) { return _fileRealPath; }; +function addTypeToFilter_(data) +{ + var filter = {}; + + for(var field in data) { + filter[field] = data[field]; + } + + if (data instanceof tizen.AttributeFilter) { + filter.type = "AttributeFilter"; + } + if (data instanceof tizen.AttributeRangeFilter) { + filter.type = "AttributeRangeFilter"; + } + + return filter; +} + /** * Example usage: * function Messaging () { @@ -227,7 +246,7 @@ function Message(type, data) { this, 'timestamp', { - get: function () {return _internal.timestamp;}, + get: function () {return new Date(_internal.timestamp);}, set: function (value) { if (value instanceof InternalValues_) _internal.timestamp = value.timestamp; }, @@ -812,7 +831,7 @@ MessageStorage.prototype.findMessages = function () { bridge.async({ cmd: 'MessageStorage_findMessages', args: { - filter: args.filter || null, + filter: addTypeToFilter_(args.filter) || null, sort: args.sort || null, limit: args.limit || null, offset: args.offset || null, @@ -919,7 +938,7 @@ MessageStorage.prototype.findConversations = function () { bridge.async({ cmd: 'MessageStorage_findConversations', args: { - filter: args.filter, + filter: addTypeToFilter_(args.filter), sort: args.sort || null, limit: args.limit || null, offset: args.offset || null, @@ -995,7 +1014,7 @@ MessageStorage.prototype.findFolders = function () { bridge.async({ cmd: 'MessageStorage_findFolders', args: { - filter: args.filter, + filter: addTypeToFilter_(args.filter), sort: args.sort || null, limit: args.limit || null, offset: args.offset || null, @@ -1064,7 +1083,7 @@ MessageStorage.prototype.addMessagesChangeListener = function () { cmd: 'MessageStorage_addMessagesChangeListener', cid: cid, args: { - filter: args.filter || null, + filter: addTypeToFilter_(args.filter) || null, serviceId: self.service.id } }); @@ -1117,7 +1136,7 @@ MessageStorage.prototype.addConversationsChangeListener = function () { cmd: 'MessageStorage_addConversationsChangeListener', cid: cid, args: { - filter: args.filter || null, + filter: addTypeToFilter_(args.filter) || null, serviceId: self.service.id } }); diff --git a/src/messaging/messaging_instance.cc b/src/messaging/messaging_instance.cc index df48c660..9c05c7c7 100644 --- a/src/messaging/messaging_instance.cc +++ b/src/messaging/messaging_instance.cc @@ -406,8 +406,8 @@ void MessagingInstance::MessageStorageFindMessages(const picojson::value& args, picojson::object data = args.get(JSON_DATA).get(); const double callbackId = args.get(JSON_CALLBACK_ID).get(); - // TODO add support to AttributeRangeFilter - auto filter = MessagingUtil::jsonToAttributeFilter(data); + // TODO add support to CompositeFilter + auto filter = MessagingUtil::jsonToAbstractFilter(data); auto sortMode = MessagingUtil::jsonToSortMode(data); long limit = static_cast @@ -498,8 +498,8 @@ void MessagingInstance::MessageStorageFindConversations(const picojson::value& a picojson::object data = args.get(JSON_DATA).get(); const double callbackId = args.get(JSON_CALLBACK_ID).get(); - // TODO add support to AttributeRangeFilter - auto filter = MessagingUtil::jsonToAttributeFilter(data); + // TODO add support to CompositeFilter + auto filter = MessagingUtil::jsonToAbstractFilter(data); auto sortMode = MessagingUtil::jsonToSortMode(data); long limit = static_cast (MessagingUtil::getValueFromJSONObject(data, FIND_CONVERSATIONS_ARGS_LIMIT)); @@ -557,8 +557,8 @@ void MessagingInstance::MessageStorageFindFolders(const picojson::value& args, picojson::object data = args.get(JSON_DATA).get(); const double callbackId = args.get(JSON_CALLBACK_ID).get(); - // TODO add support to AttributeRangeFilter - auto filter = MessagingUtil::jsonToAttributeFilter(data); + // TODO add support to CompositeFilter + auto filter = MessagingUtil::jsonToAbstractFilter(data); int serviceId = static_cast(data.at(FUNCTIONS_HIDDEN_ARGS_SERVICE_ID).get()); FoldersCallbackData* callback = new FoldersCallbackData(); @@ -586,8 +586,7 @@ void MessagingInstance::MessageStorageAddMessagesChangeListener(const picojson:: std::shared_ptr callback(new MessagesChangeCallback( callbackId, serviceId, service->getMsgServiceType())); - // TODO filter - // callback->setFilter(tizen::AbstractFilterPtr(new tizen::AbstractFilter())); + callback->setFilter(MessagingUtil::jsonToAbstractFilter(data)); long op_id = service->getMsgStorage()->addMessagesChangeListener(callback); @@ -608,8 +607,7 @@ void MessagingInstance::MessageStorageAddConversationsChangeListener(const picoj std::shared_ptr callback(new ConversationsChangeCallback( callbackId, serviceId, service->getMsgServiceType())); - // TODO filter - // callback->setFilter(tizen::AbstractFilterPtr(new tizen::AbstractFilter())); + callback->setFilter(MessagingUtil::jsonToAbstractFilter(data)); long op_id = service->getMsgStorage()->addConversationsChangeListener(callback); @@ -630,8 +628,7 @@ void MessagingInstance::MessageStorageAddFolderChangeListener(const picojson::va std::shared_ptr callback(new FoldersChangeCallback( callbackId, serviceId, service->getMsgServiceType())); - // TODO filter - // callback->setFilter(tizen::AbstractFilterPtr(new tizen::AbstractFilter())); + callback->setFilter(MessagingUtil::jsonToAbstractFilter(data)); long op_id = service->getMsgStorage()->addFoldersChangeListener(callback); diff --git a/src/messaging/messaging_util.cc b/src/messaging/messaging_util.cc index de62c773..18e367c6 100644 --- a/src/messaging/messaging_util.cc +++ b/src/messaging/messaging_util.cc @@ -103,6 +103,12 @@ const std::string JSON_TO_SORT = "sort"; const std::string JSON_TO_FILTER = "filter"; const std::string JSON_TO_MATCH_FLAG = "matchFlag"; const std::string JSON_TO_MATCH_VALUE = "matchValue"; +const std::string JSON_TO_INITIAL_VALUE = "initialValue"; +const std::string JSON_TO_END_VALUE = "endValue"; + +const char* JSON_FILTER_ATTRIBUTE_TYPE = "AttributeFilter"; +const char* JSON_FILTER_ATTRIBUTERANGE_TYPE = "AttributeRangeFilter"; +const char* JSON_FILTER_COMPOSITE_TYPE = "CompositeFilter"; const std::map stringToTypeMap = { {TYPE_SMS, MessageType::SMS}, @@ -659,13 +665,35 @@ tizen::SortModePtr MessagingUtil::jsonToSortMode(const picojson::object& json) return SortModePtr(new SortMode(name, order)); } -tizen::AttributeFilterPtr MessagingUtil::jsonToAttributeFilter(const picojson::object& json) +tizen::AbstractFilterPtr MessagingUtil::jsonToAbstractFilter(const picojson::object& json) +{ + LoggerD("Entered"); + + auto filter = getValueFromJSONObject(json, JSON_TO_FILTER); + std::string type = getValueFromJSONObject(filter, "type"); + + if( JSON_FILTER_ATTRIBUTE_TYPE == type ){ + return jsonFilterToAttributeFilter(filter); + } + if( JSON_FILTER_ATTRIBUTERANGE_TYPE == type ){ + return jsonFilterToAttributeRangeFilter(filter); + } + if( JSON_FILTER_COMPOSITE_TYPE == type ) { + //TODO jsonToCompositeFilter + LoggerD("Composite filter currently not supported"); + } + + LoggerE("Unsupported filter type"); + throw common::TypeMismatchException("Unsupported filter type"); + return AbstractFilterPtr(); +} + +tizen::AttributeFilterPtr MessagingUtil::jsonFilterToAttributeFilter(const picojson::object& filter) { LoggerD("Entered"); using namespace tizen; - auto filter = getValueFromJSONObject(json, JSON_TO_FILTER); auto name = getValueFromJSONObject(filter, JSON_TO_ATTRIBUTE_NAME); auto matchFlagStr = getValueFromJSONObject(filter, JSON_TO_MATCH_FLAG); @@ -700,6 +728,19 @@ tizen::AttributeFilterPtr MessagingUtil::jsonToAttributeFilter(const picojson::o return attributePtr; } +tizen::AttributeRangeFilterPtr MessagingUtil::jsonFilterToAttributeRangeFilter(const picojson::object& filter) +{ + LoggerD("Entered"); + + auto name = getValueFromJSONObject(filter, JSON_TO_ATTRIBUTE_NAME); + + auto attributeRangePtr = tizen::AttributeRangeFilterPtr(new tizen::AttributeRangeFilter(name)); + attributeRangePtr->setInitialValue(AnyPtr(new Any(filter.at(JSON_TO_INITIAL_VALUE)))); + attributeRangePtr->setEndValue(AnyPtr(new Any(filter.at(JSON_TO_END_VALUE)))); + + return attributeRangePtr; +} + std::shared_ptr MessagingUtil::jsonToMessageAttachment(const picojson::value& json) { LoggerD("Entered"); diff --git a/src/messaging/messaging_util.h b/src/messaging/messaging_util.h index 694431e7..bc927187 100644 --- a/src/messaging/messaging_util.h +++ b/src/messaging/messaging_util.h @@ -123,7 +123,7 @@ public: static std::shared_ptr jsonToMessageBody(const picojson::value& json); static std::shared_ptr jsonToMessageFolder(const picojson::value& json); static tizen::SortModePtr jsonToSortMode(const picojson::object& json); - static tizen::AttributeFilterPtr jsonToAttributeFilter(const picojson::object& json); + static tizen::AbstractFilterPtr jsonToAbstractFilter(const picojson::object& json); static std::shared_ptr jsonToMessageConversation(const picojson::value& json); static std::shared_ptr jsonToMessageAttachment(const picojson::value& json); @@ -152,6 +152,10 @@ public: */ static std::string loadFileContentToString(const std::string& file_path); static std::string messageStatusToString(MessageStatus status); + +private: + static tizen::AttributeFilterPtr jsonFilterToAttributeFilter(const picojson::object& json); + static tizen::AttributeRangeFilterPtr jsonFilterToAttributeRangeFilter(const picojson::object& json); }; } // messaging