001 /* 002 * Copyright 2002-2004 the original author or authors. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 005 * use this file except in compliance with the License. You may obtain a copy of 006 * the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 013 * License for the specific language governing permissions and limitations under 014 * the License. 015 */ 016 package org.springframework.rules.constraint; 017 018 import org.springframework.rules.constraint.Constraint; 019 import org.springframework.util.Assert; 020 021 /** 022 * "Nots" another unary constraint (the inverse) by using composition. 023 * 024 * @author Keith Donald 025 */ 026 public class Not implements Constraint { 027 private Constraint constraint; 028 029 /** 030 * Creates a UnaryNot in temporary invalid state - please use only 031 * if you have to, the well-formed constructor is much preferred. 032 */ 033 public Not() { 034 035 } 036 037 /** 038 * Creates a UnaryNot 039 * 040 * @param constraint 041 * The constraint to negate. 042 */ 043 public Not(Constraint constraint) { 044 setConstraint(constraint); 045 } 046 047 public void setConstraint(Constraint constraint) { 048 this.constraint = constraint; 049 } 050 051 /** 052 * Negates the boolean result returned by testing the wrapped constraint. 053 * 054 * @see Constraint#test(java.lang.Object) 055 */ 056 public boolean test(Object value) { 057 Assert.state(constraint != null, "The constraint is not set"); 058 return !constraint.test(value); 059 } 060 061 public String toString() { 062 return "not(" + getConstraint() + ")"; 063 } 064 065 public Constraint getConstraint() { 066 return constraint; 067 } 068 069 }