1 package org.iotivity.service.ssm;
3 import java.util.ArrayList;
4 import java.util.HashMap;
7 import java.util.concurrent.locks.Lock;
8 import java.util.concurrent.locks.ReentrantLock;
10 public class SSMInterface {
11 private class QueryEngineEventReceiver implements IQueryEngineEvent
13 private Lock mMtxListener = new ReentrantLock();
14 private Map<Integer, IQueryEngineEvent> mMapListener = new HashMap<Integer, IQueryEngineEvent>();
16 public void OnQueryEngineEvent(int cqid, DataReader result)
20 mMapListener.get(cqid).OnQueryEngineEvent(cqid, result);
22 mMtxListener.unlock();
31 mMtxListener.unlock();
34 void addListener(int cqid, IQueryEngineEvent engineEvent)
36 mMapListener.put(cqid, engineEvent);
39 void removeListener(int cqid)
41 mMapListener.remove(cqid);
45 private CoreController mSSMCore = null;
46 private QueryEngine mQueryEngine = null;
47 private QueryEngineEventReceiver mQueryEngineEventListenerReceiver = new QueryEngineEventReceiver();
48 private List<Integer> mRunningCQLs = new ArrayList<Integer>();
54 public void startSSMCore(String initConfig) throws Exception
56 mSSMCore = CoreController.getInstance();
57 mSSMCore.InitializeSSMCore(initConfig);
58 mSSMCore.StartSSMCore();
60 mQueryEngine = mSSMCore.CreateQueryEngine();
62 if(mQueryEngine == null)
63 throw new Exception("Create Query Engine failed");
65 mQueryEngine.RegisterQueryEvent(mQueryEngineEventListenerReceiver);
68 public void stopSSMCore()
70 mQueryEngine.RegisterQueryEvent(null);
71 mSSMCore.ReleaseQueryEngine(mQueryEngine);
72 mQueryEngineEventListenerReceiver = null;
74 mSSMCore.StopSSMCore();
75 mSSMCore.TerminateSSMCore();
78 public int registerQuery(String contextQuery, IQueryEngineEvent listener)
82 mQueryEngineEventListenerReceiver.lockListener();
83 cqid = mQueryEngine.ExecuteContextQuery(contextQuery);
84 mQueryEngineEventListenerReceiver.addListener(cqid, listener);
85 mRunningCQLs.add(cqid);
86 mQueryEngineEventListenerReceiver.unlockListener();
91 public void unregisterQuery(int cqid)
93 mQueryEngineEventListenerReceiver.lockListener();
94 mQueryEngine.KillContextQuery(cqid);
95 mQueryEngineEventListenerReceiver.removeListener(cqid);
96 mRunningCQLs.remove(cqid);
97 mQueryEngineEventListenerReceiver.unlockListener();