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 }