2 // Tizen Web Device API
3 // Copyright (c) 2012 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 #ifndef _TIZEN_DATACONTROL_ASYNC_CALLBACK_MANAGER_H_
19 #define _TIZEN_DATACONTROL_ASYNC_CALLBACK_MANAGER_H_
21 #include <dpl/singleton.h>
22 #include <AsyncCallbackManager.h>
23 #include <dpl/mutex.h>
24 #include "SqlDataControlConsumer.h"
27 namespace DataControl {
29 class DataControlAsyncCallbackManager : public DeviceAPI::Common::AsyncCallbackManager
32 DataControlAsyncCallbackManager()
36 virtual ~DataControlAsyncCallbackManager()
41 bool isSQLDataControlGC(void* address)
45 if (m_sqlDataControlGCMap.find(address) == m_sqlDataControlGCMap.end())
50 return m_sqlDataControlGCMap[address];
52 bool isMappedDataControlGC(void* address)
56 if (m_mappedDataControlGCMap.find(address) == m_mappedDataControlGCMap.end())
61 return m_mappedDataControlGCMap[address];
63 void setSQLDataControlGC(void* address, bool gc)
67 DPL::Mutex::ScopedLock lock(&m_mutex);
68 if (gc && m_sqlDataControlGCMap.find(address) != m_sqlDataControlGCMap.end())
70 m_mappedDataControlGCMap.erase(address);
72 m_sqlDataControlGCMap[address] = gc;
75 void setMappedDataControlGC(void* address, bool gc)
79 DPL::Mutex::ScopedLock lock(&m_mutex);
80 if (gc && m_mappedDataControlGCMap.find(address) != m_mappedDataControlGCMap.end())
82 m_mappedDataControlGCMap.erase(address);
84 m_mappedDataControlGCMap[address] = gc;
87 bool checkReqIdUnique(std::string key)
89 if (m_callbackSQLUserDataMap.find(key) == m_callbackSQLUserDataMap.end())
96 void addSQLUserData(std::string key, void* data)
98 if (m_callbackSQLUserDataMap.find(key) != m_callbackSQLUserDataMap.end())
100 ThrowMsg(WrtDeviceApis::Commons::PlatformException, "same id exist");
103 // LoggerD(key << " : " << std::hex << data);
105 DPL::Mutex::ScopedLock lock(&m_mutex);
106 m_callbackSQLUserDataMap[key] = data;
109 void* removeSQLUserData(std::string key)
111 if (m_callbackSQLUserDataMap.find(key) == m_callbackSQLUserDataMap.end())
113 ThrowMsg(WrtDeviceApis::Commons::PlatformException, "there is no key");
117 DPL::Mutex::ScopedLock lock(&m_mutex);
118 void* data = m_callbackSQLUserDataMap[key];
120 // LoggerD(key << " : " << std::hex << data);
122 m_callbackSQLUserDataMap.erase(key);
126 friend class DPL::Singleton<DataControlAsyncCallbackManager>;
129 void cleanupSQLUserData()
131 for (std::map<std::string, void*>::iterator it = m_callbackSQLUserDataMap.begin();
132 it != m_callbackSQLUserDataMap.end(); ++it)
134 CommonPendingEvent *event = (CommonPendingEvent*)it->second;
136 EventInsertPendingEvent *insertEvent = dynamic_cast<EventInsertPendingEvent*>(event);
140 LoggerD("free insert");
146 EventSelectPendingEvent *selectEvent = dynamic_cast<EventSelectPendingEvent*>(event);
150 LoggerD("free select");
155 EventUpdatePendingEvent *updateEvent = dynamic_cast<EventUpdatePendingEvent*>(event);
159 LoggerD("free update");
164 EventDeletePendingEvent *deleteEvent = dynamic_cast<EventDeletePendingEvent*>(event);
168 LoggerD("free delete");
174 std::map<void*, bool> m_sqlDataControlGCMap;
175 std::map<void*, bool> m_mappedDataControlGCMap;
176 std::map<std::string, void*> m_callbackSQLUserDataMap;
180 typedef DPL::Singleton<DataControlAsyncCallbackManager> DataControlAsyncCallbackManagerSingleton;