Merge commit '55ca14c'
[simantics/platform.git] / bundles / org.simantics.db.procore / src / fi / vtt / simantics / procore / internal / SessionMonitorSupportImpl.java
1 package fi.vtt.simantics.procore.internal;\r
2 \r
3 import org.simantics.db.MonitorContext;\r
4 import org.simantics.db.MonitorHandler;\r
5 import org.simantics.db.SessionVariables;\r
6 import org.simantics.db.service.SessionMonitorSupport;\r
7 \r
8 public class SessionMonitorSupportImpl implements SessionMonitorSupport {\r
9         \r
10         final private SessionImplSocket session;\r
11         \r
12         SessionMonitorSupportImpl(SessionImplSocket session) {\r
13                 this.session = session;\r
14         }\r
15     \r
16     @Override\r
17     public synchronized MonitorContext registerMonitor(MonitorHandler h) {\r
18         assert h != null;\r
19 \r
20         MonitorContext ctx = new MonitorContext() {\r
21             @Override\r
22             public int getInteger(String key) {\r
23                 if (SessionVariables.QUEUED_READS.equals(key)) {\r
24                     return session.state.getReadCount();\r
25                 } else if (SessionVariables.QUEUED_WRITES.equals(key)) {\r
26                     return session.state.getWriteCount();\r
27                 }\r
28                 return -1;\r
29             }\r
30 \r
31             @Override\r
32             public String getString(String key) {\r
33                 return null;\r
34             }\r
35         };\r
36         session.monitorContexts.map(ctx, h);\r
37 \r
38         MonitorHandler[] newHandlers = new MonitorHandler[session.monitorHandlers.length + 1];\r
39         System.arraycopy(session.monitorHandlers, 0, newHandlers, 0, session.monitorHandlers.length);\r
40         newHandlers[session.monitorHandlers.length] = h;\r
41         session.monitorHandlers = newHandlers;\r
42 \r
43         return ctx;\r
44     }\r
45 \r
46     @Override\r
47     public synchronized void unregisterMonitor(MonitorContext ctx) {\r
48         MonitorHandler h = session.monitorContexts.getRight(ctx);\r
49         if (h == null)\r
50             return;\r
51         int i = 0;\r
52         for (i = 0; i < session.monitorHandlers.length; i++) {\r
53             if (h.equals(session.monitorHandlers))\r
54                 break;\r
55         }\r
56         if (i < session.monitorHandlers.length) {\r
57             MonitorHandler[] newHandlers = new MonitorHandler[session.monitorHandlers.length - 1];\r
58             System.arraycopy(session.monitorHandlers, 0, newHandlers, 0, i);\r
59             System.arraycopy(session.monitorHandlers, i + 1, newHandlers, i, session.monitorHandlers.length - i - 1);\r
60         }\r
61     }\r
62     \r
63 }\r