1 package se.citerus.dddsample.domain.shared; 2 3 /** 4 * Specificaiton interface. 5 * <p/> 6 * Use {@link se.citerus.dddsample.domain.shared.AbstractSpecification} as base for creating specifications, and 7 * only the method {@link #isSatisfiedBy(Object)} must be implemented. 8 */ 9 public interface Specification<T> { 10 11 /** 12 * Check if {@code t} is satisfied by the specification. 13 * 14 * @param t Object to test. 15 * @return {@code true} if {@code t} satisfies the specification. 16 */ 17 boolean isSatisfiedBy(T t); 18 19 /** 20 * Create a new specification that is the AND operation of {@code this} specification and another specification. 21 * @param specification Specification to AND. 22 * @return A new specification. 23 */ 24 Specification<T> and(Specification<T> specification); 25 26 /** 27 * Create a new specification that is the OR operation of {@code this} specification and another specification. 28 * @param specification Specification to OR. 29 * @return A new specification. 30 */ 31 Specification<T> or(Specification<T> specification); 32 33 /** 34 * Create a new specification that is the NOT operation of {@code this} specification. 35 * @param specification Specification to NOT. 36 * @return A new specification. 37 */ 38 Specification<T> not(Specification<T> specification); 39 }