package org.togglz.spring.activation; import org.springframework.context.ApplicationContext; import org.springframework.core.env.Environment; import org.togglz.core.Feature; import org.togglz.core.activation.AbstractPropertyDrivenActivationStrategy; import org.togglz.core.repository.FeatureState; import org.togglz.core.user.FeatureUser; import org.togglz.spring.util.ContextClassLoaderApplicationContextHolder; /** * <p> * An activation strategy based on the values of properties accessible within the Spring environment. * </p> * <p> * It can either be based on a given property name, passed via the "{@value #PARAM_NAME}" parameter, or a property name * derived from the {@link Feature} itself (e.g. "{@value #DEFAULT_PROPERTY_PREFIX}FEATURE_NAME"). * </p> * * @author Alasdair Mercer * @see AbstractPropertyDrivenActivationStrategy */ public class SpringEnvironmentPropertyActivationStrategy extends AbstractPropertyDrivenActivationStrategy { public static final String ID = "spring-environment-property"; @Override public String getId() { return ID; } @Override public String getName() { return "Spring Environment Property"; } @Override protected String getPropertyValue(FeatureState featureState, FeatureUser user, String name) { ApplicationContext applicationContext = ContextClassLoaderApplicationContextHolder.get(); if (applicationContext == null) { throw new IllegalStateException("ApplicationContext could not be found, which can occur if there is no " + "bean for TogglzApplicationContextBinderApplicationListener when TogglzAutoConfiguration is not " + "being used"); } Environment environment = applicationContext.getEnvironment(); return environment.getProperty(name); } }