1 package com.atlassian.plugin.manager;
2
3 import com.atlassian.plugin.ModuleDescriptor;
4 import com.atlassian.plugin.Plugin;
5 import com.atlassian.plugin.PluginRestartState;
6 import io.atlassian.fugue.Effect;
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 public synchronized void apply(Effect<PluginPersistentState.Builder> effect) {
24 PluginPersistentState.Builder builder = PluginPersistentState.Builder.create(store.load());
25 effect.apply(builder);
26 store.save(builder.toState());
27 }
28
29 public void setEnabled(final Plugin plugin, final boolean enabled) {
30 apply(builder -> builder.setEnabled(plugin, enabled));
31 }
32
33 public void disable(final Plugin plugin) {
34 setEnabled(plugin, false);
35 }
36
37 public void enable(final Plugin plugin) {
38 setEnabled(plugin, true);
39 }
40
41 public void setEnabled(final ModuleDescriptor<?> module, final boolean enabled) {
42 apply(builder -> builder.setEnabled(module, enabled));
43 }
44
45 public void disable(final ModuleDescriptor<?> module) {
46 setEnabled(module, false);
47 }
48
49 public void enable(final ModuleDescriptor<?> module) {
50 setEnabled(module, true);
51 }
52
53 public void clearPluginRestartState() {
54 apply(PluginPersistentState.Builder::clearPluginRestartState);
55 }
56
57 public void setPluginRestartState(final String pluginKey, final PluginRestartState pluginRestartState) {
58 apply(builder -> builder.setPluginRestartState(pluginKey, pluginRestartState));
59 }
60
61
62
63
64 @Deprecated
65 public void addState(final Map<String, Boolean> state) {
66 apply(builder -> builder.addPluginEnabledState(getPluginEnabledStateMap(state)));
67 }
68
69 public void addPluginEnabledState(final Map<String, PluginEnabledState> state) {
70 apply(builder -> builder.addPluginEnabledState(state));
71 }
72
73 public void removeState(final Plugin plugin) {
74 apply(builder -> {
75 builder.removeState(plugin.getKey());
76 for (final ModuleDescriptor<?> moduleDescriptor : plugin.getModuleDescriptors()) {
77 builder.removeState(moduleDescriptor.getCompleteKey());
78 }
79 });
80 }
81 }