1 package com.atlassian.plugin;
2
3 import com.atlassian.plugin.util.concurrent.CopyOnWriteMap;
4
5 import org.apache.commons.collections.CollectionUtils;
6 import org.apache.commons.collections.Predicate;
7
8 import java.io.Serializable;
9 import java.util.Collections;
10 import java.util.HashMap;
11 import java.util.Map;
12
13
14
15
16
17
18
19
20
21 public class DefaultPluginManagerState implements Serializable, PluginManagerState
22 {
23 private final Map<String, Boolean> map;
24
25 public DefaultPluginManagerState()
26 {
27 map = CopyOnWriteMap.newHashMap();
28 }
29
30 public DefaultPluginManagerState(final Map<String, Boolean> map)
31 {
32 this.map = CopyOnWriteMap.newHashMap(map);
33 }
34
35 public DefaultPluginManagerState(final PluginManagerState state)
36 {
37 map = CopyOnWriteMap.newHashMap(state.getMap());
38 }
39
40
41
42
43 public Boolean getState(final String key)
44 {
45 return map.get(key);
46 }
47
48
49
50
51 public Map<String, Boolean> getMap()
52 {
53 return Collections.unmodifiableMap(map);
54 }
55
56
57
58
59 public boolean isEnabled(final Plugin plugin)
60 {
61 final Boolean bool = getState(plugin.getKey());
62 return (bool == null) ? plugin.isEnabledByDefault() : bool.booleanValue();
63 }
64
65
66
67
68 public boolean isEnabled(final ModuleDescriptor<?> pluginModule)
69 {
70 if (pluginModule == null)
71 {
72 return false;
73 }
74
75 final Boolean bool = getState(pluginModule.getCompleteKey());
76 return (bool == null) ? pluginModule.isEnabledByDefault() : bool.booleanValue();
77 }
78
79 public void setEnabled(final ModuleDescriptor<?> pluginModule, boolean isEnabled)
80 {
81 setEnabled(pluginModule.getCompleteKey(), pluginModule.isEnabledByDefault(), isEnabled);
82 }
83
84 public void setEnabled(final Plugin plugin, boolean isEnabled)
85 {
86 setEnabled(plugin.getKey(), plugin.isEnabledByDefault(), isEnabled);
87 }
88
89 private void setEnabled(final String completeKey, boolean enabledByDefault, boolean isEnabled)
90 {
91 if (isEnabled == enabledByDefault)
92 {
93 map.remove(completeKey);
94 }
95 else
96 {
97 map.put(completeKey, Boolean.valueOf(isEnabled));
98 }
99 }
100
101
102
103
104 public void setState(final PluginManagerState state)
105 {
106 map.clear();
107 map.putAll(state.getMap());
108 }
109
110
111
112
113 public void addState(final Map<String, Boolean> state)
114 {
115 map.putAll(state);
116 }
117
118
119
120
121 public void removeState(final String key)
122 {
123 map.remove(key);
124 }
125
126
127
128
129 public Map<String, Boolean> getPluginStateMap(final Plugin plugin)
130 {
131 final Map<String, Boolean> state = new HashMap<String, Boolean>(getMap());
132 CollectionUtils.filter(state.keySet(), new StringStartsWith(plugin.getKey()));
133 return state;
134 }
135
136 private static class StringStartsWith implements Predicate
137 {
138 private final String prefix;
139
140 public StringStartsWith(final String keyPrefix)
141 {
142 prefix = keyPrefix;
143 }
144
145 public boolean evaluate(final Object object)
146 {
147 final String str = (String) object;
148 return str.startsWith(prefix);
149 }
150 }
151 }