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.
20 * @author Pawel Misiak (p.misiak@samsung.com)
26 #include <dpl/log/log.h>
27 #include <Commons/Exception.h>
28 #include "Recipient.h"
31 using namespace WrtDeviceApis::Commons;
35 const static string emptyString;
38 namespace WrtDeviceApis {
41 Recipients::Recipients() :
42 m_validRecipients(false)
46 Recipients::Recipients(const vector<string>& value) :
47 m_validRecipients(false)
52 Recipients::~Recipients()
56 bool Recipients::isValid() const
58 return m_validRecipients;
61 void Recipients::setValid(bool state)
63 m_validRecipients = state;
66 void Recipients::setRecipients(const vector<string>& value)
69 m_validRecipients = false;
72 void Recipients::setRecipients(const std::string& value)
74 vector<string> tmp = split(value, ';');
78 void Recipients::setRecipient(const size_t index,
81 if (index >= m_recipients.size()) {
82 Throw(OutOfRangeException);
85 m_recipients[index] = value;
86 m_validRecipients = false;
89 void Recipients::setRecipientWithExpand(const size_t index,
90 const std::string& value)
92 if (index >= m_recipients.size()) {
93 m_recipients.resize(index + 1, emptyString);
95 m_recipients[index] = value;
96 m_validRecipients = false;
99 vector<string> Recipients::getRecipients() const
104 const vector<string>& Recipients::getRecipientsRef() const
109 string Recipients::getRecipient(const size_t index) const
111 if (index >= m_recipients.size()) {
112 Throw(OutOfRangeException);
115 return m_recipients[index];
118 void Recipients::appendRecipient(const string & value)
120 vector<string> tmp = split(value, ';');
121 m_recipients.insert(m_recipients.end(), tmp.begin(), tmp.end());
122 m_validRecipients = false;
125 void Recipients::removeRecipient(const size_t position)
127 if (position >= m_recipients.size()) {
128 Throw(Commons::OutOfRangeException);
130 m_recipients.erase(m_recipients.begin() + position);
131 m_validRecipients = false;
135 void Recipients::removeRecipient(const string & value)
138 remove(m_recipients.begin(), m_recipients.end(), value),
140 m_validRecipients = false;
143 string Recipients::join(char delimiter) const
146 for (size_t i = 0; i < m_recipients.size(); i++) {
147 retVal += m_recipients[i] + delimiter;
152 vector<string> Recipients::split(const string& input,
156 stringstream stream(input);
158 while (getline(stream, item, delimiter)) {
164 size_t Recipients::getRecipientSize() const
166 return m_recipients.size();
169 bool Recipients::operator !=(const Recipients& arg) const
171 if (m_recipients == arg.m_recipients) {
177 Recipients & Recipients::operator +=(const Recipients& val)
179 const vector<string>& tmp = val.getRecipientsRef();
180 m_recipients.insert(m_recipients.end(), tmp.begin(), tmp.end());
181 m_validRecipients = false;
185 Recipients & Recipients::operator -=(const Recipients& val)
187 //check if recipients are inside list
188 vector<string> l_recipients = m_recipients;
189 vector<string> l_toDelete = val.getRecipients();
190 sort(l_recipients.begin(), l_recipients.end());
191 sort(l_toDelete.begin(), l_toDelete.end());
192 if (!includes(l_recipients.begin(), l_recipients.end(), l_toDelete.begin(),
194 LogError("lack of recipient to delete from main variable");
195 Throw(Commons::InvalidArgumentException);
198 vector<string>::const_iterator it = l_toDelete.begin();
199 const vector<string>::const_iterator endIt = l_toDelete.end();
200 while (it != endIt) {
202 remove(m_recipients.begin(),
203 m_recipients.end(), *it), m_recipients.end());
206 m_validRecipients = false;