Thanks for the post. I've done a base strategy class that can mix and match strategies through spring config. So if you are on spring, you can create many composite strategies as possible without touching java code. Sharing configuration for future users. cheers!
<!-- Togglz composite strategies -->
<bean id="demoCuzStrategy1" class="myservice.togglz.ActivationStrategyBase">
<property name="name" value="Demo Strategy 1" />
<property name="id" value="demo1" />
<property name="activationStrategies">
<list value-type="org.togglz.core.spi.ActivationStrategy">
<ref bean="myTestActivationStrategy"/>
<ref bean="usernameActivationStrategy"/>
</list>
</property>
</bean>
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.togglz.core.activation.Parameter;
import org.togglz.core.repository.FeatureState;
import org.togglz.core.spi.ActivationStrategy;
import org.togglz.core.user.FeatureUser;
/**
* <p>
* This Base activation strategy implementation can be used to composite custom strategies through spring application context.
* You can mix-match both custom strategies and togglz built-in strategies to build up custom strategies without touching java code.
* </p>
*
* @author cdesilva
*/
public class ActivationStrategyBase implements ActivationStrategy{
public String id;
public String name;
private List<ActivationStrategy> activationStrategies;
@Override
public String getId() {
return id;
}
@Override
public String getName() {
return name;
}
@Override
public boolean isActive(FeatureState featureState, FeatureUser user) {
boolean isActive = true;
// Validate all composite strategies.
for (ActivationStrategy strategy : activationStrategies) {
if (!strategy.isActive(featureState, user)) {
isActive = false;
break;
}
}
return isActive;
}
@Override
public Parameter[] getParameters() {
List<Parameter> parametersList = new ArrayList<>();
// Collect parameters from composite strategies.
for (ActivationStrategy strategy : activationStrategies) {
parametersList.addAll(new ArrayList<Parameter>(
Arrays.asList(strategy.getParameters())));
}
return parametersList.toArray(new Parameter[parametersList.size()]);
}
public List<ActivationStrategy> getActivationStrategies() {
return activationStrategies;
}
public void setActivationStrategies(
List<ActivationStrategy> activationStrategies) {
this.activationStrategies = activationStrategies;
}
public void setId(String id) {
}
public void setName(String name) {
}
}