package net.java.cargotracker.domain.shared;
/**
* AND specification, used to create a new specification that is the AND of two
* other specifications.
*/
public class AndSpecification<T> extends AbstractSpecification<T> {
private final Specification<T> spec1;
private final Specification<T> spec2;
/**
* Create a new AND specification based on two other spec.
*
* @param spec1 Specification one.
* @param spec2 Specification two.
*/
public AndSpecification(Specification<T> spec1, Specification<T> spec2) {
this.spec1 = spec1;
this.spec2 = spec2;
}
/**
* {@inheritDoc}
*/
@Override
public boolean isSatisfiedBy(T t) {
return spec1.isSatisfiedBy(t) && spec2.isSatisfiedBy(t);
}
}