All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.togglz.testing.TestFeatureManager Maven / Gradle / Ivy

There is a newer version: 4.4.0
Show newest version
package org.togglz.testing;

import org.togglz.core.Feature;
import org.togglz.core.manager.FeatureManager;
import org.togglz.core.metadata.FeatureMetaData;
import org.togglz.core.metadata.enums.EnumFeatureMetaData;
import org.togglz.core.repository.FeatureState;
import org.togglz.core.spi.ActivationStrategy;
import org.togglz.core.user.FeatureUser;
import org.togglz.core.util.Validate;

import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import static java.util.Collections.emptyList;

/**
 * A {@link FeatureManager} implementation that allows easy manipulation of features in testing environments.
 *
 * @author Christian Kaltepoth
 */
public class TestFeatureManager implements FeatureManager {

    private final Class featureEnum;

    private final Set activeFeatures = new HashSet<>();

    public TestFeatureManager(Class featureEnum) {
        Validate.notNull(featureEnum, "The featureEnum argument is required");
        Validate.isTrue(featureEnum.isEnum(), "This feature manager currently only works with feature enums");
        this.featureEnum = featureEnum;
    }

    @Override
    public String getName() {
        return this.getClass().getSimpleName() + ":" + featureEnum.getSimpleName();
    }

    @Override
    public Set getFeatures() {
        return new HashSet<>(Arrays.asList(featureEnum.getEnumConstants()));
    }

    @Override
    public FeatureMetaData getMetaData(Feature feature) {
        return new EnumFeatureMetaData(feature);
    }

    @Override
    public boolean isActive(Feature feature) {
        return activeFeatures.contains(feature.name());
    }

    @Override
    public FeatureUser getCurrentFeatureUser() {
        return null;
    }

    @Override
    public FeatureState getFeatureState(Feature feature) {
        return new FeatureState(feature, isActive(feature));
    }

    @Override
    public void setFeatureState(FeatureState state) {
        if (state.isEnabled()) {
            activeFeatures.add(state.getFeature().name());
        } else {
            activeFeatures.remove(state.getFeature().name());
        }
    }

    @Override
    public List getActivationStrategies() {
        return emptyList();
    }

    @Override
    public void enable(Feature feature) {
        activeFeatures.add(feature.name());
    }

    @Override
    public void disable(Feature feature) {
        activeFeatures.remove(feature.name());
    }

    public void enableAll() {
        for (Feature feature : featureEnum.getEnumConstants()) {
            enable(feature);
        }
    }

    public void disableAll() {
        activeFeatures.clear();
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy