package org.togglz.spring.manager; import org.springframework.beans.factory.FactoryBean; import org.togglz.core.Feature; import org.togglz.core.manager.FeatureManager; import org.togglz.core.manager.FeatureManagerBuilder; import org.togglz.core.manager.TogglzConfig; import org.togglz.core.repository.StateRepository; import org.togglz.core.spi.FeatureProvider; import org.togglz.core.user.UserProvider; /** * * <p> * {@link FactoryBean} for creating a {@link FeatureManager} managed by Spring. * </p> * * <p> * Example usage: * </p> * * <pre> * <bean id="userProvider" class="org.togglz.core.user.NoOpUserProvider" /> * * <bean id="stateRepository" class="org.togglz.core.repository.mem.InMemoryStateRepository" /> * * <bean id="featureManager" class="org.togglz.spring.manager.FeatureManagerFactory"> * <property name="featureEnum" value="org.example.myapp.MyFeatures" /> * <property name="stateRepository" ref="stateRepository" /> * <property name="userProvider" ref="userProvider" /> * </bean> * </pre> * * @author Christian Kaltepoth * */ public class FeatureManagerFactory implements FactoryBean<FeatureManager> { private final FeatureManagerBuilder builder = new FeatureManagerBuilder(); @Override public FeatureManager getObject() throws Exception { return builder.build(); } @Override public Class<?> getObjectType() { return FeatureManager.class; } @Override public boolean isSingleton() { return false; } public void setUserProvider(UserProvider userProvider) { builder.userProvider(userProvider); } public void setStateRepository(StateRepository stateRepository) { builder.stateRepository(stateRepository); } public void setFeatureEnum(Class<? extends Feature> featureEnum) { this.setFeatureEnums(featureEnum); } public void setFeatureEnums(Class<? extends Feature>... featureEnum) { builder.featureEnums(featureEnum); } public void setName(String name) { builder.name(name); } public void setTogglzConfig(TogglzConfig togglzConfig) { builder.togglzConfig(togglzConfig); } public void setFeatureProvider(FeatureProvider featureProvider) { builder.featureProvider(featureProvider); } }