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