1 //******************************************************************
3 // Copyright 2015 Samsung Electronics All Rights Reserved.
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
11 // http://www.apache.org/licenses/LICENSE-2.0
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
21 #include "BundleResource.h"
26 #include <boost/thread.hpp>
27 #include "NotificationReceiver.h"
29 #include "InternalTypes.h"
35 BundleResource::BundleResource() : m_pNotiReceiver(nullptr)
40 BundleResource::~BundleResource()
42 m_pNotiReceiver = nullptr;
45 void BundleResource::registerObserver(NotificationReceiver *pNotiReceiver)
47 m_pNotiReceiver = pNotiReceiver;
50 std::list< std::string > BundleResource::getAttributeNames()
52 std::list< std::string > ret;
54 for (auto &it : m_resourceAttributes){
55 ret.push_back(it.key());
61 const RCSResourceAttributes BundleResource::getAttributes()
63 std::lock_guard<std::mutex> lock(m_resourceAttributes_mutex);
64 return RCSResourceAttributes(m_resourceAttributes);
67 void BundleResource::setAttributes(const RCSResourceAttributes &attrs)
69 std::lock_guard<std::mutex> lock(m_resourceAttributes_mutex);
71 for (auto &it : m_resourceAttributes){
72 OIC_LOG_V(INFO, CONTAINER_TAG, "set attribute \(%s)'",
73 std::string(it.key() + "\', with " + it.value().toString()).c_str());
75 m_resourceAttributes[it.key()] = it.value();
78 // asynchronous notification
79 auto notifyFunc = [](NotificationReceiver *notificationReceiver,
82 if (notificationReceiver){
83 notificationReceiver->onNotificationReceived(uri);
86 auto f = std::bind(notifyFunc, m_pNotiReceiver, m_uri);
87 boost::thread notifyThread(f);
91 void BundleResource::setAttribute(const std::string &key,
92 RCSResourceAttributes::Value &&value, bool notify)
94 OIC_LOG_V(INFO, CONTAINER_TAG, "set attribute \(%s)'", std::string(key + "\', with " +
95 value.toString()).c_str());
96 std::lock_guard<std::mutex> lock(m_resourceAttributes_mutex);
97 m_resourceAttributes[key] = std::move(value);
100 // asynchronous notification
101 auto notifyFunc = [](NotificationReceiver *notificationReceiver,
104 if (notificationReceiver){
105 notificationReceiver->onNotificationReceived(uri);
108 auto f = std::bind(notifyFunc, m_pNotiReceiver, m_uri);
109 boost::thread notifyThread(f);
114 void BundleResource::setAttribute(const std::string &key,
115 RCSResourceAttributes::Value &value, bool notify)
117 setAttribute(key, RCSResourceAttributes::Value(value), notify);
120 void BundleResource::setAttribute(const std::string &key,
121 RCSResourceAttributes::Value &&value)
123 setAttribute(key, std::move(value), true);
126 void BundleResource::setAttribute(const std::string &key,
127 RCSResourceAttributes::Value &value)
129 setAttribute(key, value, true);
132 RCSResourceAttributes::Value BundleResource::getAttribute(const std::string &key)
134 OIC_LOG_V(INFO, CONTAINER_TAG, "get attribute \'(%s)" , std::string(key + "\'").c_str());
135 std::lock_guard<std::mutex> lock(m_resourceAttributes_mutex);
136 return m_resourceAttributes.at(key);