View Javadoc

1   package com.atlassian.sal.core.features;
2   
3   import com.atlassian.fugue.Option;
4   import com.atlassian.sal.api.features.DarkFeatureManager;
5   import com.atlassian.sal.api.user.UserManager;
6   import com.google.common.collect.ImmutableSet;
7   
8   import java.util.Collections;
9   import java.util.Set;
10  
11  /**
12   * Default implementation of DarkFeatureManager - sufficient for any product which does not already have its own dark
13   * feature framework. Does not implement per-user enabling.
14   */
15  public class DefaultDarkFeatureManager implements DarkFeatureManager
16  {
17      private final Set<String> enabledFeatureKeys;
18      private final UserManager userManager;
19  
20      public DefaultDarkFeatureManager(UserManager userManager)
21      {
22          this.userManager = userManager;
23          // initialize dark features based on system properties and contents of a properties file.
24          final SystemDarkFeatureInitializer.SystemDarkFeatures systemDarkFeatures = SystemDarkFeatureInitializer.getSystemStartupDarkFeatures();
25  
26          enabledFeatureKeys = systemDarkFeatures.isDisableAll() ? Collections.<String>emptySet() : ImmutableSet.copyOf(systemDarkFeatures.getEnabled());
27      }
28  
29      @Override
30      public boolean isSystemFeatureEnabled(String key)
31      {
32          return enabledFeatureKeys.contains(key);
33      }
34  
35      @Override
36      public boolean isUserFeatureEnabled(String key)
37      {
38          return isSystemFeatureEnabled(key);
39      }
40  
41      @Override
42      public Option<Boolean> isUserFeatureEnabledForUser(String username, String key)
43      {
44          return userManager.resolve(username) == null ? Option.<Boolean>none() : Option.some(isSystemFeatureEnabled(key));
45      }
46  
47      @Override
48      public Set<String> getAllEnabledFeaturesForCurrentUser()
49      {
50          return enabledFeatureKeys;
51      }
52  
53      @Override
54      public Option<Set<String>> getAllEnanbedFeaturesForUser(String username)
55      {
56          return userManager.resolve(username) == null ? Option.<Set<String>>none() : Option.some(getAllEnabledFeaturesForCurrentUser());
57      }
58  }