]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.runtime/src/org/simantics/scl/runtime/SCLContext.java
migrated to svn revision 33108
[simantics/platform.git] / bundles / org.simantics.scl.runtime / src / org / simantics / scl / runtime / SCLContext.java
1 package org.simantics.scl.runtime;\r
2 \r
3 import gnu.trove.map.hash.THashMap;\r
4 \r
5 public class SCLContext extends THashMap<String,Object> {\r
6     private static ThreadLocal<SCLContext> CONTEXT = new ThreadLocal<SCLContext>();\r
7     private static ThreadLocal<OldContextNode> OLD_CONTEXT = new ThreadLocal<OldContextNode>();\r
8     \r
9     private static class OldContextNode {\r
10         final SCLContext context;\r
11         final OldContextNode next;\r
12         \r
13         public OldContextNode(SCLContext context, OldContextNode next) {\r
14             this.context = context;\r
15             this.next = next;\r
16         }\r
17     }\r
18     \r
19     public static SCLContext getCurrent() {\r
20         SCLContext context = CONTEXT.get();\r
21         if(context == null) {\r
22             context = new SCLContext();\r
23             CONTEXT.set(context);\r
24         }\r
25         return context;\r
26     }\r
27     \r
28     public static void push(SCLContext newContext) {\r
29         SCLContext oldContext = CONTEXT.get();\r
30         if(oldContext != null)\r
31             OLD_CONTEXT.set(new OldContextNode(oldContext, OLD_CONTEXT.get()));\r
32         CONTEXT.set(newContext);\r
33     }\r
34     \r
35     public static void pop() {\r
36         OldContextNode node = OLD_CONTEXT.get();\r
37         if(node == null)\r
38             CONTEXT.set(null);\r
39         else {\r
40             CONTEXT.set(node.context);\r
41             OLD_CONTEXT.set(node.next);\r
42         }\r
43     }\r
44     \r
45     /*\r
46     @Override\r
47     public Object get(Object key) {\r
48         Object result = super.get(key);\r
49         System.out.println(this + ": " + key + " -> " + result);\r
50         return result;\r
51     }\r
52     \r
53     @Override\r
54     public Object put(String key, Object value) {\r
55         System.out.println(this + ": " + key + " <- " + value);\r
56         return super.put(key, value);\r
57     }*/\r
58 }\r