View Javadoc

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