1 package cz.cuni.amis.pogamut.base.utils.guice;
2
3 import java.util.HashMap;
4 import java.util.Map;
5
6 import com.google.inject.Key;
7 import com.google.inject.Provider;
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 public class AgentScope implements IAgentScope {
27
28 public static class SingletonProvider<T> implements Provider<T> {
29
30 private Provider<T> creator;
31
32 private T singleton = null;
33
34 public SingletonProvider(Provider<T> creator) {
35 this.creator = creator;
36 }
37
38 @Override
39 public T get() {
40 if (singleton != null) {
41 return singleton;
42 }
43 singleton = creator.get();
44 return singleton;
45 }
46
47 public void clear() {
48 singleton = null;
49 }
50
51 }
52
53 @SuppressWarnings("unchecked")
54 private Map<Key, Provider> providers = new HashMap<Key, Provider>();
55
56 @SuppressWarnings("unchecked")
57 @Override
58 public <T> Provider scope(Key<T> key, Provider<T> creator) {
59 synchronized(providers) {
60 Provider p = providers.get(key);
61 if (p != null) {
62 return p;
63 }
64 SingletonProvider<T> provider = new SingletonProvider<T>(creator);
65 providers.put(key, provider);
66 return provider;
67 }
68 }
69
70 @SuppressWarnings("unchecked")
71 public void clearScope() {
72 synchronized(providers) {
73 for (Provider provider : providers.values()) {
74 ((SingletonProvider)provider).clear();
75 }
76 }
77 }
78
79 }