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      private final ImmutableMap.Builder<FeatureKeyScope, ImmutableSet<String>> builder = ImmutableMap.builder();
14  
15      /**
16       * Set features enabled for all users which cannot be changed during runtime.
17       *
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          return setEnabledFeatures(FeatureKeyScope.ALL_USERS_READ_ONLY, enabledFeatureKeys);
23      }
24  
25      /**
26       * Set features enabled for all users which can be changed during runtime.
27       *
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          return setEnabledFeatures(FeatureKeyScope.ALL_USERS, enabledFeatureKeys);
33      }
34  
35      /**
36       * Set features enabled for the current user only.
37       *
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          return setEnabledFeatures(FeatureKeyScope.CURRENT_USER_ONLY, enabledFeatureKeys);
43      }
44  
45      public EnabledDarkFeatures build() {
46          return new EnabledDarkFeatures(builder.build());
47      }
48  
49      private EnabledDarkFeaturesBuilder setEnabledFeatures(final FeatureKeyScope featureKeyScope, @Nullable final Set<String> enabledFeatureKeys) {
50          final ImmutableSet<String> nonNullCopy = enabledFeatureKeys != null ? ImmutableSet.copyOf(enabledFeatureKeys) : ImmutableSet.of();
51          builder.put(featureKeyScope, nonNullCopy);
52          return this;
53      }
54  }