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), m_resourceAttributes_mutex()
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 setAttributes(attrs, true);
72 void BundleResource::setAttributes(const RCSResourceAttributes &attrs, bool notify)
74 std::lock_guard<std::mutex> lock(m_resourceAttributes_mutex);
76 for (auto &it : attrs)
78 OIC_LOG_V(INFO, CONTAINER_TAG, "set attribute \(%s)'",
79 std::string(it.key() + "\', with " + it.value().toString()).c_str());
81 m_resourceAttributes[it.key()] = it.value();
85 // asynchronous notification
86 auto notifyFunc = [](NotificationReceiver *notificationReceiver,
89 if (notificationReceiver){
90 notificationReceiver->onNotificationReceived(uri);
93 auto f = std::bind(notifyFunc, m_pNotiReceiver, m_uri);
94 boost::thread notifyThread(f);
99 void BundleResource::setAttribute(const std::string &key,
100 RCSResourceAttributes::Value &&value, bool notify)
102 OIC_LOG_V(INFO, CONTAINER_TAG, "set attribute \(%s)'", std::string(key + "\', with " +
103 value.toString()).c_str());
104 std::lock_guard<std::mutex> lock(m_resourceAttributes_mutex);
105 m_resourceAttributes[key] = std::move(value);
108 // asynchronous notification
109 auto notifyFunc = [](NotificationReceiver *notificationReceiver,
112 if (notificationReceiver){
113 notificationReceiver->onNotificationReceived(uri);
116 auto f = std::bind(notifyFunc, m_pNotiReceiver, m_uri);
117 boost::thread notifyThread(f);
122 void BundleResource::setAttribute(const std::string &key,
123 RCSResourceAttributes::Value &value, bool notify)
125 setAttribute(key, RCSResourceAttributes::Value(value), notify);
128 void BundleResource::setAttribute(const std::string &key,
129 RCSResourceAttributes::Value &&value)
131 setAttribute(key, std::move(value), true);
134 void BundleResource::setAttribute(const std::string &key,
135 RCSResourceAttributes::Value &value)
137 setAttribute(key, value, true);
140 RCSResourceAttributes::Value BundleResource::getAttribute(const std::string &key)
142 OIC_LOG_V(INFO, CONTAINER_TAG, "get attribute \'(%s)" , std::string(key + "\'").c_str());
143 std::lock_guard<std::mutex> lock(m_resourceAttributes_mutex);
144 return m_resourceAttributes.at(key);