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