View Javadoc
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       * @deprecated in 4.5.0 for removal in 6.0. Use {@link #addPluginEnabledState(Map)} instead
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  }