View Javadoc
1   package com.atlassian.plugin.manager;
2   
3   import com.atlassian.plugin.Plugin;
4   import com.atlassian.plugin.PluginDependencies;
5   import com.atlassian.plugin.PluginException;
6   import com.atlassian.plugin.PluginState;
7   import com.atlassian.plugin.impl.StaticPlugin;
8   import com.google.common.base.Function;
9   import com.google.common.collect.ImmutableSet;
10  
11  import javax.annotation.Nonnull;
12  
13  public class PluginWithDeps extends StaticPlugin {
14  
15      public interface StateChangeListener {
16          void enabled(Plugin plugin);
17          void disabled(Plugin plugin);
18          void uninstalled(Plugin plugin);
19  
20          StateChangeListener NO_OP = new StateChangeListener() {
21              @Override
22              public void enabled(Plugin plugin) {
23              }
24  
25              @Override
26              public void disabled(Plugin plugin) {
27              }
28  
29              @Override
30              public void uninstalled(Plugin plugin) {
31              }
32          };
33  
34      }
35  
36      private final PluginDependencies dependencies;
37  
38      public static final Function<Plugin, String> GET_KEY = Plugin::getKey;
39  
40      private StateChangeListener stateChangeListener;
41  
42      public PluginWithDeps(final String key) {
43          this(key, StateChangeListener.NO_OP, new PluginDependencies(null, null, null));
44      }
45  
46      public PluginWithDeps(final String key, final String... deps) {
47          this(key, StateChangeListener.NO_OP, new PluginDependencies(ImmutableSet.copyOf(deps), null, null));
48      }
49  
50      public PluginWithDeps(final String key, final PluginDependencies deps) {
51          this(key, StateChangeListener.NO_OP, deps);
52      }
53  
54      public PluginWithDeps(final String key, StateChangeListener stateChangeListener, final PluginDependencies deps) {
55          setKey(key);
56          dependencies = deps;
57          setPluginState(PluginState.DISABLED);
58          this.stateChangeListener = stateChangeListener;
59      }
60  
61      @Override
62      public void enable() {
63          stateChangeListener.enabled(this);
64          super.enable();
65      }
66  
67      @Override
68      protected void disableInternal() throws PluginException {
69          stateChangeListener.disabled(this);
70          super.disableInternal();
71      }
72  
73      @Override
74      public boolean isUninstallable() {
75          return true;
76      }
77  
78      @Override
79      protected void uninstallInternal() {
80          stateChangeListener.uninstalled(this);
81      }
82  
83      @Nonnull
84      @Override
85      public PluginDependencies getDependencies() {
86          return dependencies;
87      }
88  }