]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/SessionMonitorSupportImpl.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db.procore / src / fi / vtt / simantics / procore / internal / SessionMonitorSupportImpl.java
diff --git a/bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/SessionMonitorSupportImpl.java b/bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/SessionMonitorSupportImpl.java
new file mode 100644 (file)
index 0000000..2e8b0e4
--- /dev/null
@@ -0,0 +1,63 @@
+package fi.vtt.simantics.procore.internal;\r
+\r
+import org.simantics.db.MonitorContext;\r
+import org.simantics.db.MonitorHandler;\r
+import org.simantics.db.SessionVariables;\r
+import org.simantics.db.service.SessionMonitorSupport;\r
+\r
+public class SessionMonitorSupportImpl implements SessionMonitorSupport {\r
+       \r
+       final private SessionImplSocket session;\r
+       \r
+       SessionMonitorSupportImpl(SessionImplSocket session) {\r
+               this.session = session;\r
+       }\r
+    \r
+    @Override\r
+    public synchronized MonitorContext registerMonitor(MonitorHandler h) {\r
+        assert h != null;\r
+\r
+        MonitorContext ctx = new MonitorContext() {\r
+            @Override\r
+            public int getInteger(String key) {\r
+                if (SessionVariables.QUEUED_READS.equals(key)) {\r
+                    return session.state.getReadCount();\r
+                } else if (SessionVariables.QUEUED_WRITES.equals(key)) {\r
+                    return session.state.getWriteCount();\r
+                }\r
+                return -1;\r
+            }\r
+\r
+            @Override\r
+            public String getString(String key) {\r
+                return null;\r
+            }\r
+        };\r
+        session.monitorContexts.map(ctx, h);\r
+\r
+        MonitorHandler[] newHandlers = new MonitorHandler[session.monitorHandlers.length + 1];\r
+        System.arraycopy(session.monitorHandlers, 0, newHandlers, 0, session.monitorHandlers.length);\r
+        newHandlers[session.monitorHandlers.length] = h;\r
+        session.monitorHandlers = newHandlers;\r
+\r
+        return ctx;\r
+    }\r
+\r
+    @Override\r
+    public synchronized void unregisterMonitor(MonitorContext ctx) {\r
+        MonitorHandler h = session.monitorContexts.getRight(ctx);\r
+        if (h == null)\r
+            return;\r
+        int i = 0;\r
+        for (i = 0; i < session.monitorHandlers.length; i++) {\r
+            if (h.equals(session.monitorHandlers))\r
+                break;\r
+        }\r
+        if (i < session.monitorHandlers.length) {\r
+            MonitorHandler[] newHandlers = new MonitorHandler[session.monitorHandlers.length - 1];\r
+            System.arraycopy(session.monitorHandlers, 0, newHandlers, 0, i);\r
+            System.arraycopy(session.monitorHandlers, i + 1, newHandlers, i, session.monitorHandlers.length - i - 1);\r
+        }\r
+    }\r
+    \r
+}\r