View Javadoc
1   package com.atlassian.plugin;
2   
3   import com.atlassian.fugue.Option;
4   import com.google.common.base.Objects;
5   
6   import static com.atlassian.fugue.Option.some;
7   import static com.google.common.base.Preconditions.checkNotNull;
8   
9   /**
10   * <p>Represents a plugin permission as parsed from the plugin descriptor.
11   * <p>A plugin permission here is:
12   * <ul>
13   * <li>A <strong>name</strong> which denotes the permission itself.</li>
14   * <li>An <strong>{@link InstallationMode installation mode}</strong> which tells whether the permission is required
15   * for a given type of installation of the plugin. No installation mode defined means that the permission is always
16   * required.</li>
17   * </ul>
18   *
19   * @since 3.0
20   */
21  public final class PluginPermission {
22      public final static PluginPermission ALL = new PluginPermission(Permissions.ALL_PERMISSIONS);
23      public final static PluginPermission EXECUTE_JAVA = new PluginPermission(Permissions.EXECUTE_JAVA);
24  
25      private final String name;
26      private final Option<InstallationMode> installationMode;
27  
28      public PluginPermission(String name) {
29          this(checkNotNull(name), Option.<InstallationMode>none());
30      }
31  
32      public PluginPermission(String name, InstallationMode installationMode) {
33          this(checkNotNull(name), some(checkNotNull(installationMode)));
34      }
35  
36      public PluginPermission(String name, Option<InstallationMode> installationMode) {
37          this.name = checkNotNull(name);
38          this.installationMode = checkNotNull(installationMode);
39      }
40  
41      public String getName() {
42          return name;
43      }
44  
45      /**
46       * The installation mode for that permission.
47       *
48       * @return the installation mode as an {@link Option}. If the option is {@link Option#none()}
49       * then this means this permission is always valid, however when it is {@link Option#defined() defined}
50       * it will only be valid for the given installation mode.
51       */
52      public Option<InstallationMode> getInstallationMode() {
53          return installationMode;
54      }
55  
56      @Override
57      public boolean equals(Object o) {
58          if (this == o) {
59              return true;
60          }
61  
62          if (o == null || getClass() != o.getClass()) {
63              return false;
64          }
65  
66          final PluginPermission that = (PluginPermission) o;
67          return Objects.equal(this.name, that.name);
68      }
69  
70      @Override
71      public int hashCode() {
72          return Objects.hashCode(this.name);
73      }
74  }