1 /******************************************************************
3 * Copyright 2014 Samsung Electronics All Rights Reserved.
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 ******************************************************************/
20 #include "SSMInterface.h"
21 #include "SSMInterface/SSMCore.h"
22 #include "Common/PlatformLayer.h"
24 class SSMCoreEventReceiver : public IQueryEngineEvent
27 SSMCoreEventReceiver()
31 SSMRESULT onQueryEngineEvent(int cqid, IDataReader *pResult)
33 SSMRESULT res = SSM_E_FAIL;
37 if (m_mapListener.find(cqid) == m_mapListener.end())
39 SSM_CLEANUP_ASSERT(res);
42 m_mapListener[cqid]->onQueryEngineEvent(cqid, pResult);
47 m_mtxListener.unlock();
58 m_mtxListener.unlock();
61 void addListener(int cqid, IQueryEngineEvent *pEngineEvent)
63 m_mapListener[cqid] = pEngineEvent;
66 void removeListener(int cqid)
68 m_mapListener.erase(cqid);
72 CSimpleMutex m_mtxListener;
73 std::map<int, IQueryEngineEvent *> m_mapListener;
76 IQueryEngine *g_pQueryEngineInstance = NULL;
77 SSMCoreEventReceiver *g_pEventReceiver = NULL;
79 SSMRESULT OIC::InitializeSSM(std::string xmlDescription)
81 SSMRESULT res = SSM_E_FAIL;
83 if (g_pQueryEngineInstance != NULL)
84 SSM_CLEANUP_ASSERT(SSM_E_INITIALIZED);
86 g_pEventReceiver = new SSMCoreEventReceiver();
87 SSM_CLEANUP_NULL_ASSERT(g_pEventReceiver);
88 SSM_CLEANUP_ASSERT(InitializeSSMCore(xmlDescription));
89 SSM_CLEANUP_ASSERT(StartSSMCore());
90 SSM_CLEANUP_ASSERT(CreateQueryEngine(&g_pQueryEngineInstance));
91 SSM_CLEANUP_ASSERT(g_pQueryEngineInstance->registerQueryEvent(g_pEventReceiver));
94 if (res != SSM_S_OK &&
95 res != SSM_E_INITIALIZED)
97 SAFE_DELETE(g_pEventReceiver);
103 SSMRESULT OIC::TerminateSSM()
105 SSMRESULT res = SSM_E_FAIL;
107 if (g_pQueryEngineInstance == NULL)
108 SSM_CLEANUP_ASSERT(SSM_E_NOTINIT);
110 SSM_CLEANUP_ASSERT(g_pQueryEngineInstance->unregisterQueryEvent(g_pEventReceiver));
111 ReleaseQueryEngine(g_pQueryEngineInstance);
112 g_pQueryEngineInstance = NULL;
113 SSM_CLEANUP_ASSERT(StopSSMCore());
114 SSM_CLEANUP_ASSERT(TerminateSSMCore());
117 SAFE_DELETE(g_pEventReceiver);
121 SSMRESULT OIC::RegisterQuery(std::string queryString, IQueryEngineEvent *listener,
124 SSMRESULT res = SSM_E_FAIL;
126 if (g_pQueryEngineInstance == NULL)
127 SSM_CLEANUP_ASSERT(SSM_E_NOTINIT);
129 g_pEventReceiver->lockListener();
130 SSM_CLEANUP_ASSERT(g_pQueryEngineInstance->executeContextQuery(queryString, &cqid));
131 g_pEventReceiver->addListener(cqid, listener);
134 if (g_pEventReceiver != NULL)
135 g_pEventReceiver->unlockListener();
139 SSMRESULT OIC::UnregisterQuery(int cqid)
141 SSMRESULT res = SSM_E_FAIL;
143 if (g_pQueryEngineInstance == NULL)
144 SSM_CLEANUP_ASSERT(SSM_E_NOTINIT);
146 g_pEventReceiver->lockListener();
147 SSM_CLEANUP_ASSERT(g_pQueryEngineInstance->killContextQuery(cqid));
148 g_pEventReceiver->removeListener(cqid);
151 if (g_pEventReceiver != NULL)
152 g_pEventReceiver->unlockListener();