1 package io.getunleash;
2
3 import static java.util.Collections.emptyList;
4
5 import io.getunleash.lang.Nullable;
6 import io.getunleash.variant.VariantDefinition;
7 import java.util.Collections;
8 import java.util.List;
9 import javax.annotation.Nonnull;
10
11 public final class FeatureToggle {
12     private final String name;
13     private final boolean enabled;
14     private final List<ActivationStrategy> strategies;
15     @Nullable private final List<VariantDefinition> variants;
16     private final boolean impressionData;
17
18     @Nullable private final List<FeatureDependency> dependencies;
19
20     public FeatureToggle(String name, boolean enabled, List<ActivationStrategy> strategies) {
21         this(name, enabled, strategies, emptyList(), false, emptyList());
22     }
23
24     public FeatureToggle(
25             String name,
26             boolean enabled,
27             List<ActivationStrategy> strategies,
28             List<VariantDefinition> variants) {
29         this(name, enabled, strategies, variants, false, emptyList());
30     }
31
32     public FeatureToggle(
33             String name,
34             boolean enabled,
35             List<ActivationStrategy> strategies,
36             @Nullable List<VariantDefinition> variants,
37             @Nullable Boolean impressionData) {
38         this(name, enabled, strategies, variants, impressionData, emptyList());
39     }
40
41     public FeatureToggle(
42             String name,
43             boolean enabled,
44             List<ActivationStrategy> strategies,
45             @Nullable List<VariantDefinition> variants,
46             @Nullable Boolean impressionData,
47             @Nullable List<FeatureDependency> dependencies) {
48         this.name = name;
49         this.enabled = enabled;
50         this.strategies = strategies;
51         this.variants = variants;
52         this.impressionData = impressionData != null ? impressionData : false;
53         this.dependencies = dependencies;
54     }
55
56     public String getName() {
57         return name;
58     }
59
60     public boolean isEnabled() {
61         return enabled;
62     }
63
64     @Nonnull
65     public List<ActivationStrategy> getStrategies() {
66         if (strategies == null) {
67             return Collections.emptyList();
68         }
69         return this.strategies;
70     }
71
72     @Nonnull
73     public List<VariantDefinition> getVariants() {
74         if (variants == null) {
75             return Collections.emptyList();
76         } else {
77             return variants;
78         }
79     }
80
81     @Nonnull
82     public List<FeatureDependency> getDependencies() {
83         if (dependencies == null) {
84             return Collections.emptyList();
85         } else {
86             return dependencies;
87         }
88     }
89
90     public boolean hasDependencies() {
91         return dependencies != null && !dependencies.isEmpty();
92     }
93
94     @Nullable
95     public boolean hasImpressionData() {
96         return impressionData;
97     }
98
99     @Override
100     public String toString() {
101         return "FeatureToggle{"
102                 + "name='"
103                 + name
104                 + '\''
105                 + ", enabled="
106                 + enabled
107                 + ", strategies="
108                 + strategies
109                 + ", variants="
110                 + variants
111                 + ", impressionData="
112                 + impressionData
113                 + ", dependencies="
114                 + dependencies
115                 + '}';
116     }
117 }
118