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.features.EnabledDarkFeatures;
6   import com.atlassian.sal.api.user.UserManager;
7   import com.google.common.collect.ImmutableSet;
8   
9   import java.util.Collections;
10  import java.util.Set;
11  
12  /**
13   * Default implementation of DarkFeatureManager - sufficient for any product which does not already have its own dark
14   * feature framework. Does not implement per-user or per-site enabling.
15   */
16  public class DefaultDarkFeatureManager implements DarkFeatureManager
17  {
18      private final EnabledDarkFeatures enabledDarkFeatures;
19      private final UserManager userManager;
20  
21      public DefaultDarkFeatureManager(UserManager userManager)
22      {
23          this.userManager = userManager;
24          this.enabledDarkFeatures = createEnabledDarkFeatures();
25      }
26  
27      private static EnabledDarkFeatures createEnabledDarkFeatures()
28      {
29          // initialize dark features based on system properties and contents of a properties file.
30          final SystemDarkFeatureInitializer.SystemDarkFeatures systemDarkFeatures = SystemDarkFeatureInitializer.getSystemStartupDarkFeatures();
31  
32          final Set<String> systemEnabledFeatures = systemDarkFeatures.isDisableAll() ? Collections.<String>emptySet() : ImmutableSet.copyOf(systemDarkFeatures.getEnabled());
33          return new EnabledDarkFeatures(systemEnabledFeatures, Collections.<String>emptySet(), Collections.<String>emptySet());
34      }
35  
36      @Override
37      public boolean isSystemFeatureEnabled(String featureKey)
38      {
39          return enabledDarkFeatures.getAllEnabledFeatures().contains(featureKey);
40      }
41  
42      @Override
43      public boolean isFeatureEnabled(String featureKey)
44      {
45          return isSystemFeatureEnabled(featureKey);
46      }
47  
48      @Override
49      public Option<Boolean> isFeatureEnabledForUser(String username, String featureKey)
50      {
51          return isUserExisting(username) ? Option.some(isSystemFeatureEnabled(featureKey)) : Option.<Boolean>none();
52      }
53  
54      @Override
55      public boolean hasSiteEditPermission()
56      {
57          // no modification supported at all
58          return false;
59      }
60  
61      @Override
62      public void enableFeatureSiteWide(String featureKey)
63      {
64          // not supported
65      }
66  
67      @Override
68      public void disableFeatureSideWide(String featureKey)
69      {
70          // not supported
71      }
72  
73      @Override
74      public void enableFeatureForCurrentUser(String featureKey)
75      {
76          // not supported
77      }
78  
79      @Override
80      public void enableFeatureForUser(String username, String featureKey)
81      {
82          // not supported
83      }
84  
85      @Override
86      public void disableFeatureForCurrentUser(String featureKey)
87      {
88          // not supported
89      }
90  
91      @Override
92      public void disableFeatureForUser(String username, String featureKey)
93      {
94          // not supported
95      }
96  
97      @Override
98      public EnabledDarkFeatures getAllEnabledFeaturesForCurrentUser()
99      {
100         return enabledDarkFeatures;
101     }
102 
103     @Override
104     public Option<EnabledDarkFeatures> getAllEnabledFeaturesForUser(String username)
105     {
106         return isUserExisting(username) ? Option.some(getAllEnabledFeaturesForCurrentUser()) : Option.<EnabledDarkFeatures>none();
107     }
108 
109     private boolean isUserExisting(String username)
110     {
111         return userManager.resolve(username) != null;
112     }
113 }