1 package com.atlassian.plugin.manager;
2
3 import com.atlassian.fugue.Effect;
4 import com.atlassian.plugin.ModuleDescriptor;
5 import com.atlassian.plugin.Plugin;
6 import com.atlassian.plugin.PluginRestartState;
7
8 import java.util.Map;
9
10 public class PluginPersistentStateModifier {
11 private final PluginPersistentStateStore store;
12
13 public PluginPersistentStateModifier(final PluginPersistentStateStore store) {
14 this.store = store;
15 }
16
17 public PluginPersistentState getState() {
18 return store.load();
19 }
20
21
22
23
24 @Deprecated
25 PluginPersistentStateStore getStore() {
26 return store;
27 }
28
29 public synchronized void apply(Effect<PluginPersistentState.Builder> effect) {
30 PluginPersistentState.Builder builder = PluginPersistentState.Builder.create(store.load());
31 effect.apply(builder);
32 store.save(builder.toState());
33 }
34
35 public void setEnabled(final Plugin plugin, final boolean enabled) {
36 apply(new Effect<PluginPersistentState.Builder>() {
37 @Override
38 public void apply(PluginPersistentState.Builder builder) {
39 builder.setEnabled(plugin, enabled);
40 }
41 });
42 }
43
44 public void disable(final Plugin plugin) {
45 setEnabled(plugin, false);
46 }
47
48 public void enable(final Plugin plugin) {
49 setEnabled(plugin, true);
50 }
51
52 public void setEnabled(final ModuleDescriptor<?> module, final boolean enabled) {
53 apply(new Effect<PluginPersistentState.Builder>() {
54 @Override
55 public void apply(PluginPersistentState.Builder builder) {
56 builder.setEnabled(module, enabled);
57 }
58 });
59 }
60
61 public void disable(final ModuleDescriptor<?> module) {
62 setEnabled(module, false);
63 }
64
65 public void enable(final ModuleDescriptor<?> module) {
66 setEnabled(module, true);
67 }
68
69 public void clearPluginRestartState() {
70 apply(new Effect<PluginPersistentState.Builder>() {
71 @Override
72 public void apply(PluginPersistentState.Builder builder) {
73 builder.clearPluginRestartState();
74 }
75 });
76 }
77
78 public void setPluginRestartState(final String pluginKey, final PluginRestartState pluginRestartState) {
79 apply(new Effect<PluginPersistentState.Builder>() {
80 @Override
81 public void apply(PluginPersistentState.Builder builder) {
82 builder.setPluginRestartState(pluginKey, pluginRestartState);
83 }
84 });
85 }
86
87 public void addState(final Map<String, Boolean> state) {
88 apply(new Effect<PluginPersistentState.Builder>() {
89 @Override
90 public void apply(PluginPersistentState.Builder builder) {
91 builder.addState(state);
92 }
93 });
94 }
95
96 public void removeState(final Plugin plugin) {
97 apply(new Effect<PluginPersistentState.Builder>() {
98 @Override
99 public void apply(final PluginPersistentState.Builder builder) {
100 builder.removeState(plugin.getKey());
101 for (final ModuleDescriptor<?> moduleDescriptor : plugin.getModuleDescriptors()) {
102 builder.removeState(moduleDescriptor.getCompleteKey());
103 }
104 }
105 });
106 }
107 }