View Javadoc
1   package com.atlassian.sal.api.page;
2   
3   import com.google.common.base.Joiner;
4   
5   import javax.annotation.Nonnull;
6   import javax.annotation.Nullable;
7   import java.util.Arrays;
8   import java.util.EnumSet;
9   import java.util.Objects;
10  import java.util.stream.Collectors;
11  
12  /**
13   * Util class for creating empty enum set, parsing string and valueOf function
14   */
15  public abstract class PageCapabilities {
16  
17      public static final String SEPARATOR = ",";
18  
19      /**
20       * @return Empty EnumSet
21       */
22      public static EnumSet<PageCapability> empty() {
23          return EnumSet.noneOf(PageCapability.class);
24      }
25  
26      /**
27       * @param values {@code String} page capability names separated with {@link #SEPARATOR}
28       * @return {@link java.util.EnumSet} of {@link com.atlassian.sal.api.page.PageCapability}
29       * @throws IllegalArgumentException if any of parsed values is invalid
30       */
31      public static EnumSet<PageCapability> valueOf(@Nullable String values) {
32          if (values == null || values.length() == 0) {
33              return empty();
34          }
35  
36          return Arrays.stream(values.split(SEPARATOR))
37                  .map(value -> {
38                      try {
39                          return PageCapability.valueOf(value);
40                      } catch (IllegalArgumentException e) {
41                          return null;
42                      }
43                  })
44                  .filter(Objects::nonNull)
45                  .collect(Collectors.toCollection(() -> EnumSet.noneOf(PageCapability.class)));
46      }
47  
48      /**
49       * @param pageCaps enum set
50       * @return Page capabilities separated with {@link #SEPARATOR}
51       */
52      public static String toString(@Nonnull EnumSet<PageCapability> pageCaps) {
53          return Joiner.on(SEPARATOR).join(pageCaps.iterator());
54      }
55  }