/*
* (c) Copyright Reserved EVRYTHNG Limited 2016. All rights reserved.
* Use of this material is subject to license.
* Copying and unauthorised use of this material strictly prohibited.
*/
package com.evrythng.commons.validation.preconditions;
import com.evrythng.commons.validation.Precondition;
import com.evrythng.commons.validation.ValidationException;
abstract class AbstractPrecondition<TARGET> implements Precondition<TARGET> {
private final String preconditionName;
protected AbstractPrecondition(final String preconditionName) {
this.preconditionName = preconditionName;
}
@Override
public final void testThrowing(final TARGET target) throws ValidationException {
boolean result = test(target);
if (!result) {
throw ValidationException.of(target, preconditionName);
}
}
@Override
public final String name() {
return preconditionName;
}
@Override
public final Precondition<TARGET> or(final Precondition<TARGET> other) {
return new AbstractPrecondition<TARGET>(name() + " OR " + other.name()) {
@Override
public boolean test(final TARGET target) {
return AbstractPrecondition.this.test(target) || other.test(target);
}
};
}
}