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