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