1 package com.atlassian.sal.api.features;
2
3 import com.google.common.base.Predicate;
4 import com.google.common.collect.ImmutableMap;
5 import com.google.common.collect.ImmutableSet;
6 import com.google.common.collect.Iterables;
7 import com.google.common.collect.Maps;
8
9 import javax.annotation.concurrent.Immutable;
10
11 import static com.google.common.base.Preconditions.checkNotNull;
12
13
14
15
16
17
18 @Immutable
19 public final class EnabledDarkFeatures {
20
21
22
23 public static final EnabledDarkFeatures NONE = new EnabledDarkFeatures(ImmutableMap.<FeatureKeyScope, ImmutableSet<String>>of());
24
25 private final ImmutableMap<FeatureKeyScope, ImmutableSet<String>> enabledFeatures;
26
27
28
29
30
31
32 public EnabledDarkFeatures(final ImmutableMap<FeatureKeyScope, ImmutableSet<String>> enabledFeatures) {
33 checkNotNull(enabledFeatures, "enabledFeatures");
34 this.enabledFeatures = ImmutableMap.copyOf(enabledFeatures);
35 }
36
37
38
39
40
41
42 public ImmutableSet<String> getFeatureKeys() {
43 return ImmutableSet.copyOf(Iterables.concat(enabledFeatures.values()));
44 }
45
46
47
48
49
50
51
52 public ImmutableSet<String> getFeatureKeys(final Predicate<FeatureKeyScope> criteria) {
53 checkNotNull(criteria, "criteria");
54 return ImmutableSet.copyOf(Iterables.concat(Maps.filterKeys(enabledFeatures, criteria).values()));
55 }
56
57
58
59
60
61
62
63 public boolean isFeatureEnabled(final String featureKey) {
64 checkNotNull(featureKey, "featureKey");
65 return Iterables.contains(Iterables.concat(enabledFeatures.values()), featureKey);
66 }
67
68 @Override
69 public String toString() {
70 return "EnabledDarkFeatures{enabledFeatures=" + enabledFeatures + '}';
71 }
72
73 }