1 package io.getunleash.repository;
2
3 import io.getunleash.FeatureToggle;
4 import io.getunleash.lang.Nullable;
5 import java.util.Collection;
6 import java.util.Collections;
7 import java.util.Map;
8 import java.util.concurrent.ConcurrentHashMap;
9
10 public final class ToggleCollection {
11     private final Collection<FeatureToggle> features;
12     private final int version = 1; // required for serialization
13     private final transient Map<String, FeatureToggle> cache;
14
15     public ToggleCollection(final Collection<FeatureToggle> features) {
16         this.features = ensureNotNull(features);
17         this.cache = new ConcurrentHashMap<>();
18         for (FeatureToggle featureToggle : this.features) {
19             cache.put(featureToggle.getName(), featureToggle);
20         }
21     }
22
23     private Collection<FeatureToggle> ensureNotNull(@Nullable Collection<FeatureToggle> features) {
24         if (features == null) {
25             return Collections.emptyList();
26         }
27         return features;
28     }
29
30     public Collection<FeatureToggle> getFeatures() {
31         return Collections.unmodifiableCollection(features);
32     }
33
34     public FeatureToggle getToggle(final String name) {
35         return cache.get(name);
36     }
37 }
38