iotivity 0.9.0
[platform/upstream/iotivity.git] / service / soft-sensor-manager / SDK / java / org / iotivity / service / ssm / SSMInterface.java
1 package org.iotivity.service.ssm;
2
3 import java.util.ArrayList;
4 import java.util.HashMap;
5 import java.util.List;
6 import java.util.Map;
7 import java.util.concurrent.locks.Lock;
8 import java.util.concurrent.locks.ReentrantLock;
9
10 public class SSMInterface {
11         private class QueryEngineEventReceiver implements IQueryEngineEvent
12         {
13         private Lock                                                            mMtxListener = new ReentrantLock();
14                 private Map<Integer, IQueryEngineEvent>         mMapListener = new HashMap<Integer, IQueryEngineEvent>();
15                 
16                 public void OnQueryEngineEvent(int cqid, DataReader result)
17                 {
18                         mMtxListener.lock();
19
20                         mMapListener.get(cqid).OnQueryEngineEvent(cqid, result);
21             
22                         mMtxListener.unlock();
23                 }
24                 void lockListener()
25         {
26                         mMtxListener.lock();
27         }
28
29         void unlockListener()
30         {
31                 mMtxListener.unlock();
32         }
33
34         void addListener(int cqid, IQueryEngineEvent engineEvent)
35         {
36                 mMapListener.put(cqid, engineEvent);
37         }
38
39         void removeListener(int cqid)
40         {
41                 mMapListener.remove(cqid);
42         }
43         };
44         
45         private CoreController                          mSSMCore = null;
46         private QueryEngine                                     mQueryEngine = null;
47         private QueryEngineEventReceiver        mQueryEngineEventListenerReceiver = new QueryEngineEventReceiver();
48         private List<Integer>                           mRunningCQLs = new ArrayList<Integer>();
49         
50         public SSMInterface()
51         {               
52         }
53         
54         public void startSSMCore(String initConfig) throws Exception
55         {
56                 mSSMCore = CoreController.getInstance();
57         mSSMCore.InitializeSSMCore(initConfig);
58         mSSMCore.StartSSMCore();
59         
60         mQueryEngine = mSSMCore.CreateQueryEngine();
61         
62         if(mQueryEngine == null)
63                 throw new Exception("Create Query Engine failed");
64         
65         mQueryEngine.RegisterQueryEvent(mQueryEngineEventListenerReceiver);
66         }
67         
68         public void stopSSMCore()
69         {
70                 mQueryEngine.RegisterQueryEvent(null);
71                 mSSMCore.ReleaseQueryEngine(mQueryEngine);
72                 mQueryEngineEventListenerReceiver = null;
73                 mQueryEngine = null;
74                 mSSMCore.StopSSMCore();
75                 mSSMCore.TerminateSSMCore();
76         }
77         
78         public int registerQuery(String contextQuery, IQueryEngineEvent listener)
79         {
80                 int cqid;
81                 
82                 mQueryEngineEventListenerReceiver.lockListener();
83                 cqid = mQueryEngine.ExecuteContextQuery(contextQuery);
84                 mQueryEngineEventListenerReceiver.addListener(cqid, listener);
85                 mRunningCQLs.add(cqid);
86                 mQueryEngineEventListenerReceiver.unlockListener();
87                 
88                 return cqid;
89         }
90         
91         public void unregisterQuery(int cqid)
92         {
93                 mQueryEngineEventListenerReceiver.lockListener();
94                 mQueryEngine.KillContextQuery(cqid);
95                 mQueryEngineEventListenerReceiver.removeListener(cqid);
96                 mRunningCQLs.remove(cqid);
97                 mQueryEngineEventListenerReceiver.unlockListener();
98         }
99 }