2 // Open Service Platform
3 // Copyright (c) 2013 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.
18 * @file FScl_AccountProviderImpl.cpp
19 * @brief This is the implementation for _AccountProviderImpl class.
21 * This file contains definitions of @e _AccountProviderImpl class.
24 #include <FBaseColIList.h>
25 #include <FBaseResult.h>
26 #include <FBaseString.h>
27 #include <FBaseSysLog.h>
28 #include <FSclAccountProvider.h>
29 #include "FScl_AccountProviderImpl.h"
31 using namespace Tizen::App;
32 using namespace Tizen::Base;
33 using namespace Tizen::Base::Collection;
35 namespace Tizen { namespace Social
38 _AccountProviderImpl::_AccountProviderImpl(void)
39 : __isMultipleAccountSupported(false)
41 std::unique_ptr<ArrayList, AllElementsDeleter> pCapabilityList(new (std::nothrow) ArrayList());
42 SysTryReturnVoidResult(NID_SCL, pCapabilityList != null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
44 result r = pCapabilityList->Construct();
45 SysTryReturnVoidResult(NID_SCL, !IsFailed(r), r, "[%s] Failed to construct pCapabilityList.", GetErrorMessage(r));
47 __pCapabilityList = std::move(pCapabilityList);
50 _AccountProviderImpl::_AccountProviderImpl(const _AccountProviderImpl& rhs)
52 std::unique_ptr<ArrayList, AllElementsDeleter> pCapabilityList(new (std::nothrow) ArrayList());
53 SysTryReturnVoidResult(NID_SCL, pCapabilityList != null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
55 result r = pCapabilityList->Construct();
56 SysTryReturnVoidResult(NID_SCL, !IsFailed(r), r, "[%s] Failed to construct pCapabilityList.", GetErrorMessage(r));
58 std::unique_ptr<IEnumerator> pEnum(rhs.__pCapabilityList->GetEnumeratorN());
59 SysTryReturnVoidResult(NID_SCL, pEnum != null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
61 std::unique_ptr<String> pCapability(null);
62 String* pTempCapability = null;
64 while (pEnum->MoveNext() == E_SUCCESS)
66 pTempCapability = static_cast<String*> (pEnum->GetCurrent());
67 pCapability.reset(new (std::nothrow) String(*pTempCapability));
68 SysTryReturnVoidResult(NID_SCL, pCapability != null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
70 r = pCapabilityList->Add(pCapability.get());
71 SysTryReturnVoidResult(NID_SCL, !IsFailed(r), r, "[%s] Propagating.", GetErrorMessage(r));
73 pCapability.release();
76 __pCapabilityList = std::move(pCapabilityList);
78 __appId = rhs.__appId;
79 __displayName = rhs.__displayName;
80 __iconPath = rhs.__iconPath;
81 __smallIconPath = rhs.__smallIconPath;
82 __isMultipleAccountSupported = rhs.__isMultipleAccountSupported;
85 _AccountProviderImpl::~_AccountProviderImpl(void)
91 _AccountProviderImpl::operator =(const _AccountProviderImpl& rhs)
98 std::unique_ptr<ArrayList, AllElementsDeleter> pCapabilityList(new (std::nothrow) ArrayList());
99 SysTryReturn(NID_SCL, pCapabilityList != null, *this, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
101 result r = pCapabilityList->Construct();
102 SysTryReturn(NID_SCL, !IsFailed(r), *this, r, "[%s] Failed to construct pCapabilityList.", GetErrorMessage(r));
104 result prevResult = GetLastResult();
106 std::unique_ptr<IEnumerator> pEnum(rhs.__pCapabilityList->GetEnumeratorN());
107 SysTryReturn(NID_SCL, pEnum != null, *this, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
109 SetLastResult(prevResult);
111 std::unique_ptr<String> pCapability(null);
112 String* pTempCapability = null;
114 while (pEnum->MoveNext() == E_SUCCESS)
116 pTempCapability = static_cast<String*> (pEnum->GetCurrent());
117 pCapability.reset(new (std::nothrow) String(*pTempCapability));
118 SysTryReturn(NID_SCL, pCapability != null, *this, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
120 r = pCapabilityList->Add(pCapability.get());
121 SysTryReturn(NID_SCL, !IsFailed(r), *this, r, "[%s] Propagating.", GetErrorMessage(r));
123 pCapability.release();
126 __pCapabilityList = std::move(pCapabilityList);
128 __appId = rhs.__appId;
129 __displayName = rhs.__displayName;
130 __iconPath = rhs.__iconPath;
131 __smallIconPath = rhs.__smallIconPath;
132 __isMultipleAccountSupported = rhs.__isMultipleAccountSupported;
138 _AccountProviderImpl::operator ==(const _AccountProviderImpl& rhs) const
140 if ((__appId == rhs.__appId) &&
141 (__displayName == rhs.__displayName) &&
142 (__iconPath == rhs.__iconPath) &&
143 (__smallIconPath == rhs.__smallIconPath) &&
144 (__isMultipleAccountSupported == rhs.__isMultipleAccountSupported) &&
145 (__pCapabilityList->Equals(*(rhs.__pCapabilityList))))
154 _AccountProviderImpl::operator !=(const _AccountProviderImpl& rhs) const
156 return !(*this == rhs);
160 _AccountProviderImpl::Equals(const Object& rhs) const
162 const _AccountProviderImpl* pAccountProviderImpl = dynamic_cast<const _AccountProviderImpl*> (&rhs);
163 if (pAccountProviderImpl == null)
168 if ((__appId != pAccountProviderImpl->__appId) ||
169 (__displayName != pAccountProviderImpl->__displayName) ||
170 (__iconPath != pAccountProviderImpl->__iconPath) ||
171 (__smallIconPath != pAccountProviderImpl->__smallIconPath) ||
172 (__isMultipleAccountSupported != pAccountProviderImpl->__isMultipleAccountSupported) ||
173 !(__pCapabilityList->Equals(*(pAccountProviderImpl->__pCapabilityList))))
182 _AccountProviderImpl::GetHashCode(void) const
186 hashCode += __appId.GetHashCode();
187 hashCode += __displayName.GetHashCode();
193 _AccountProviderImpl::AddCapability(const String& capability)
195 std::unique_ptr<IEnumerator> pEnum(__pCapabilityList->GetEnumeratorN());
196 SysTryReturnResult(NID_SCL, pEnum != null, GetLastResult(), "Propagating.");
198 String* pTempCapability = null;
199 bool alreadyExist = false;
201 while (pEnum->MoveNext() == E_SUCCESS)
203 pTempCapability = static_cast<String*> (pEnum->GetCurrent());
204 if (*pTempCapability == capability)
211 SysTryReturnResult(NID_SCL, !alreadyExist, E_OBJ_ALREADY_EXIST, "The capability already exists.");
213 std::unique_ptr<String> pCapability(new (std::nothrow) String(capability));
214 SysTryReturnResult(NID_SCL, pCapability != null, E_OUT_OF_MEMORY, "Memory allocation failed.");
216 result r = __pCapabilityList->Add(pCapability.get());
217 SysTryReturn(NID_SCL, !IsFailed(r), r, r, "[%s] Propagating.", GetErrorMessage(r));
219 pCapability.release();
225 _AccountProviderImpl::GetAppId(void) const
231 _AccountProviderImpl::GetCapabilitiesN(void) const
235 std::unique_ptr<ArrayList, AllElementsDeleter> pCapabilityList(new (std::nothrow) ArrayList());
236 SysTryReturn(NID_SCL, pCapabilityList != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
238 result r = pCapabilityList->Construct();
239 SysTryReturn(NID_SCL, !IsFailed(r), null, r, "[%s] Failed to construct pCapabilityList.", GetErrorMessage(r));
241 std::unique_ptr<IEnumerator> pEnum(__pCapabilityList->GetEnumeratorN());
242 SysTryReturn(NID_SCL, pEnum != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
244 std::unique_ptr<String> pCapability(null);
245 String* pTempCapability = null;
247 while (pEnum->MoveNext() == E_SUCCESS)
249 pTempCapability = static_cast<String*> (pEnum->GetCurrent());
250 pCapability.reset(new (std::nothrow) String(*pTempCapability));
251 SysTryReturn(NID_SCL, pCapability != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
253 r = pCapabilityList->Add(pCapability.get());
254 SysTryReturn(NID_SCL, !IsFailed(r), null, r, "[%s] Propagating.", GetErrorMessage(r));
256 pCapability.release();
259 return pCapabilityList.release();
263 _AccountProviderImpl::GetDisplayName(void) const
265 return __displayName;
269 _AccountProviderImpl::GetIconPath(void) const
275 _AccountProviderImpl::GetSmallIconPath(void) const
277 return __smallIconPath;
281 _AccountProviderImpl::IsMultipleAccountSupported(void) const
283 return __isMultipleAccountSupported;
287 _AccountProviderImpl::SetAppId(const AppId& appId)
293 _AccountProviderImpl::SetDisplayName(const String& displayName)
295 __displayName = displayName;
299 _AccountProviderImpl::SetIconPath(const String& iconPath)
301 __iconPath = iconPath;
305 _AccountProviderImpl::SetSmallIconPath(const String& smallIconPath)
307 __smallIconPath = smallIconPath;
311 _AccountProviderImpl::SetMultipleAccountsSupport(bool isSupported)
313 __isMultipleAccountSupported = isSupported;
316 const _AccountProviderImpl*
317 _AccountProviderImpl::GetInstance(const AccountProvider& accountProvider)
319 return accountProvider.__pAccountProviderImpl;
322 _AccountProviderImpl*
323 _AccountProviderImpl::GetInstance(AccountProvider& accountProvider)
325 return accountProvider.__pAccountProviderImpl;