package org.fluentlenium.core.conditions;
import java.util.function.Predicate;
/**
* Abstract implementation supported negation and instantiation.
*
* @param <T> type of condition
*/
public abstract class AbstractObjectConditions<T> implements Conditions<T>, ConditionsObject<T> {
protected final T object;
protected boolean negation;
/**
* Initialize the conditions with given object.
*
* @param object underlying object
*/
public AbstractObjectConditions(T object) {
this.object = object;
}
/**
* Initialize the conditions with given object
*
* @param object underlying object
* @param negation negation value
*/
public AbstractObjectConditions(T object, boolean negation) {
this.object = object;
this.negation = negation;
}
@Override
public boolean verify(Predicate<T> predicate) {
boolean predicateResult = predicate.test(object);
if (negation) {
predicateResult = !predicateResult;
}
return predicateResult;
}
@Override
public T getActualObject() {
return object;
}
/**
* Creates a new instance of this condition.
*
* @param negationValue negation value
* @return new instance of this condition
*/
protected abstract AbstractObjectConditions<T> newInstance(boolean negationValue);
@Override
@Negation
public AbstractObjectConditions<T> not() {
return newInstance(!negation);
}
}