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.UnloadablePlugin;
8 import com.google.common.base.Function;
9 import com.google.common.collect.ImmutableSet;
10
11 import javax.annotation.Nonnull;
12 import javax.annotation.Nullable;
13
14 public class PluginWithDeps extends UnloadablePlugin {
15 private final PluginDependencies dependencies;
16 private int timesEnabled = 0;
17 private int timesDisabled = 0;
18
19 public static final Function<Plugin, String> GET_KEY = new Function<Plugin, String>() {
20 @Nonnull
21 @Override
22 public String apply(@Nullable final Plugin input) {
23 return input.getKey();
24 }
25 };
26
27 public PluginWithDeps(final String key) {
28 this(key, new PluginDependencies(null, null, null));
29 }
30
31 public PluginWithDeps(final String key, final String... deps) {
32 this(key, new PluginDependencies(ImmutableSet.copyOf(deps), null, null));
33 }
34
35 public PluginWithDeps(final String key, final PluginDependencies deps) {
36 setKey(key);
37 dependencies = deps;
38 setPluginState(PluginState.DISABLED);
39 }
40
41 @Override
42 public void enable() {
43 super.enable();
44 timesEnabled++;
45 }
46
47 public int getTimesEnabled() {
48 return timesEnabled;
49 }
50
51 public int getTimesDisabled() {
52 return timesDisabled;
53 }
54
55 @Override
56 protected void disableInternal() throws PluginException {
57 super.disableInternal();
58 timesDisabled++;
59 }
60
61 @Nonnull
62 @Override
63 public PluginDependencies getDependencies() {
64 return dependencies;
65 }
66 }