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 import static com.atlassian.plugin.manager.DefaultPluginPersistentState.getPluginEnabledStateMap;
11
12 public class PluginPersistentStateModifier {
13 private final PluginPersistentStateStore store;
14
15 public PluginPersistentStateModifier(final PluginPersistentStateStore store) {
16 this.store = store;
17 }
18
19 public PluginPersistentState getState() {
20 return store.load();
21 }
22
23
24
25
26 @Deprecated
27 PluginPersistentStateStore getStore() {
28 return store;
29 }
30
31 public synchronized void apply(Effect<PluginPersistentState.Builder> effect) {
32 PluginPersistentState.Builder builder = PluginPersistentState.Builder.create(store.load());
33 effect.apply(builder);
34 store.save(builder.toState());
35 }
36
37 public void setEnabled(final Plugin plugin, final boolean enabled) {
38 apply(builder -> builder.setEnabled(plugin, enabled));
39 }
40
41 public void disable(final Plugin plugin) {
42 setEnabled(plugin, false);
43 }
44
45 public void enable(final Plugin plugin) {
46 setEnabled(plugin, true);
47 }
48
49 public void setEnabled(final ModuleDescriptor<?> module, final boolean enabled) {
50 apply(builder -> builder.setEnabled(module, enabled));
51 }
52
53 public void disable(final ModuleDescriptor<?> module) {
54 setEnabled(module, false);
55 }
56
57 public void enable(final ModuleDescriptor<?> module) {
58 setEnabled(module, true);
59 }
60
61 public void clearPluginRestartState() {
62 apply(PluginPersistentState.Builder::clearPluginRestartState);
63 }
64
65 public void setPluginRestartState(final String pluginKey, final PluginRestartState pluginRestartState) {
66 apply(builder -> builder.setPluginRestartState(pluginKey, pluginRestartState));
67 }
68
69 @Deprecated
70 public void addState(final Map<String, Boolean> state) {
71 apply(builder -> builder.addPluginEnabledState(getPluginEnabledStateMap(state)));
72 }
73
74 public void addPluginEnabledState(final Map<String, PluginEnabledState> state) {
75 apply(builder -> builder.addPluginEnabledState(state));
76 }
77
78 public void removeState(final Plugin plugin) {
79 apply(builder -> {
80 builder.removeState(plugin.getKey());
81 for (final ModuleDescriptor<?> moduleDescriptor : plugin.getModuleDescriptors()) {
82 builder.removeState(moduleDescriptor.getCompleteKey());
83 }
84 });
85 }
86 }