View Javadoc

1   package com.atlassian.sal.api.features;
2   
3   import com.google.common.collect.ImmutableMap;
4   import com.google.common.collect.ImmutableSet;
5   
6   import javax.annotation.Nullable;
7   import java.util.Set;
8   
9   /**
10   * @since 2.10
11   */
12  public class EnabledDarkFeaturesBuilder
13  {
14      private final ImmutableMap.Builder<FeatureKeyScope,ImmutableSet<String>> builder = ImmutableMap.builder();
15  
16      /**
17       * Set features enabled for all users which cannot be changed during runtime.
18       * @param enabledFeatureKeys enabled features for all users; can be <code>null</code>
19       * @return the builder itself
20       */
21      public EnabledDarkFeaturesBuilder unmodifiableFeaturesEnabledForAllUsers(@Nullable final Set<String> enabledFeatureKeys)
22      {
23          return setEnabledFeatures(FeatureKeyScope.ALL_USERS_READ_ONLY, enabledFeatureKeys);
24      }
25  
26      /**
27       * Set features enabled for all users which can be changed during runtime.
28       * @param enabledFeatureKeys enabled features for all users; can be <code>null</code>
29       * @return the builder itself
30       */
31      public EnabledDarkFeaturesBuilder featuresEnabledForAllUsers(@Nullable final Set<String> enabledFeatureKeys)
32      {
33          return setEnabledFeatures(FeatureKeyScope.ALL_USERS, enabledFeatureKeys);
34      }
35  
36      /**
37       * Set features enabled for the current user only.
38       * @param enabledFeatureKeys enabled features for the current user only; can be <code>null</code>
39       * @return the builder itself
40       */
41      public EnabledDarkFeaturesBuilder featuresEnabledForCurrentUser(@Nullable final Set<String> enabledFeatureKeys)
42      {
43          return setEnabledFeatures(FeatureKeyScope.CURRENT_USER_ONLY, enabledFeatureKeys);
44      }
45  
46      public EnabledDarkFeatures build()
47      {
48          return new EnabledDarkFeatures(builder.build());
49      }
50  
51      private EnabledDarkFeaturesBuilder setEnabledFeatures(final FeatureKeyScope featureKeyScope, @Nullable final Set<String> enabledFeatureKeys)
52      {
53          final ImmutableSet<String> nonNullCopy = enabledFeatureKeys != null ? ImmutableSet.copyOf(enabledFeatureKeys) : ImmutableSet.<String>of();
54          builder.put(featureKeyScope, nonNullCopy);
55          return this;
56      }
57  }