package org.togglz.core.util;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
import org.togglz.core.Feature;
import org.togglz.core.context.FeatureContext;
import org.togglz.core.manager.FeatureManager;
import org.togglz.core.manager.LazyResolvingFeatureManager;
/**
* <p>
* This map can be used to check whether features are active. You can use either a {@link Feature} or a feature name as the key
* for a map lookup. The resulting boolean will indicate if the feature is active or not.
* </p>
*
* <p>
* The map allows constructor-based injection of the {@link FeatureManager} for use in DI containers.
* </p>
*
* @author Mauro Talevi
* @author Christian Kaltepoth
*/
public class FeatureMap implements Map<Object, Boolean> {
private final FeatureManager manager;
/**
* Constructor that will configure the map to lazily lookup the {@link FeatureManager} from the {@link FeatureContext}.
*/
public FeatureMap() {
this(new LazyResolvingFeatureManager());
}
/**
* Constructor that allows to manually set the feature manager to use.
*/
public FeatureMap(FeatureManager manager) {
this.manager = manager;
}
@Override
public Boolean get(Object key) {
Validate.notNull(key, "The feature must not be null");
Feature feature = null;
if (key instanceof Feature) {
feature = (Feature) key;
} else {
feature = new NamedFeature(key.toString());
}
return manager.isActive(feature);
}
@Override
public int size() {
return manager.getFeatures().size();
}
@Override
public boolean isEmpty() {
return size() == 0;
}
/*
* Unsupported operations
*/
@Override
public boolean containsKey(Object key) {
throw new UnsupportedOperationException();
}
@Override
public boolean containsValue(Object value) {
throw new UnsupportedOperationException();
}
@Override
public Boolean put(Object key, Boolean value) {
throw new UnsupportedOperationException();
}
@Override
public Boolean remove(Object key) {
throw new UnsupportedOperationException();
}
@Override
public void putAll(Map<? extends Object, ? extends Boolean> m) {
throw new UnsupportedOperationException();
}
@Override
public void clear() {
throw new UnsupportedOperationException();
}
@Override
public Set<Object> keySet() {
throw new UnsupportedOperationException();
}
@Override
public Collection<Boolean> values() {
throw new UnsupportedOperationException();
}
@Override
public Set<Map.Entry<Object, Boolean>> entrySet() {
throw new UnsupportedOperationException();
}
}