1 package fi.vtt.simantics.procore.internal;
\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
8 public class SessionMonitorSupportImpl implements SessionMonitorSupport {
\r
10 final private SessionImplSocket session;
\r
12 SessionMonitorSupportImpl(SessionImplSocket session) {
\r
13 this.session = session;
\r
17 public synchronized MonitorContext registerMonitor(MonitorHandler h) {
\r
20 MonitorContext ctx = new MonitorContext() {
\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
32 public String getString(String key) {
\r
36 session.monitorContexts.map(ctx, h);
\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
47 public synchronized void unregisterMonitor(MonitorContext ctx) {
\r
48 MonitorHandler h = session.monitorContexts.getRight(ctx);
\r
52 for (i = 0; i < session.monitorHandlers.length; i++) {
\r
53 if (h.equals(session.monitorHandlers))
\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