CompositeCondition.java
package fr.sii.ogham.core.condition;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import fr.sii.ogham.core.util.EqualsBuilder;
import fr.sii.ogham.core.util.HashCodeBuilder;
/**
* Base class for operators that handle several sub-conditions like AND operator
* and OR operator.
*
* @author Aurélien Baudet
*
* @param <T>
* the type of the object to test
*/
public abstract class CompositeCondition<T> implements Condition<T> {
protected final List<Condition<T>> conditions;
protected CompositeCondition(List<Condition<T>> conditions) {
super();
this.conditions = conditions;
}
@SafeVarargs
protected CompositeCondition(Condition<T>... conditions) {
this(new ArrayList<>(Arrays.asList(conditions)));
}
protected List<Condition<T>> getConditions() {
return conditions;
}
protected CompositeCondition<T> addCondition(Condition<T> condition) {
conditions.add(condition);
return this;
}
protected CompositeCondition<T> addConditions(List<Condition<T>> conditions) {
this.conditions.addAll(conditions);
return this;
}
@Override
public boolean equals(Object obj) {
return new EqualsBuilder(this, obj).appendFields("conditions").isEqual();
}
@Override
public int hashCode() {
return new HashCodeBuilder().append(conditions).hashCode();
}
@Override
public String toString() {
return conditions.toString();
}
}