1 package pk.lucidxpo.ynami.spring.features;
2
3 import org.springframework.core.env.Environment;
4 import org.togglz.core.Feature;
5 import org.togglz.core.metadata.FeatureGroup;
6 import org.togglz.core.metadata.FeatureMetaData;
7 import org.togglz.core.metadata.SimpleFeatureGroup;
8 import org.togglz.core.repository.FeatureState;
9
10 import java.util.Map;
11 import java.util.Set;
12
13 import static java.util.Collections.emptyMap;
14 import static java.util.Collections.emptySet;
15 import static java.util.stream.Collectors.toSet;
16
17 class EnvironmentFeatureMetaData implements FeatureMetaData {
18 private static final String TOGGLZ_FEATURES = "togglz.features.";
19
20 private final Feature feature;
21 private final Environment environment;
22
23 EnvironmentFeatureMetaData(final Feature feature, final Environment environment) {
24 this.feature = feature;
25 this.environment = environment;
26 }
27
28 @Override
29 public String getLabel() {
30 return environment.getProperty(TOGGLZ_FEATURES + feature.name() + ".label", feature.name());
31 }
32
33 @Override
34 public FeatureState getDefaultFeatureState() {
35 final boolean defaultEnabledState = environment.getProperty(
36 TOGGLZ_FEATURES + feature.name() + ".enabled", Boolean.class, false
37 );
38 return new FeatureState(feature, defaultEnabledState);
39 }
40
41 @Override
42 @SuppressWarnings("unchecked")
43 public Set<FeatureGroup> getGroups() {
44 final Set<String> groups = environment.getProperty(TOGGLZ_FEATURES + feature.name() + ".groups", Set.class);
45 return groups == null ? emptySet() : groups.stream().map(SimpleFeatureGroup::new).collect(toSet());
46 }
47
48 @Override
49 public Map<String, String> getAttributes() {
50 return emptyMap();
51 }
52 }