View Javadoc
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       * @deprecated since 4.0, to be removed in 5.0: do not use
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  }