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