001 /* 002 * Copyright 2002-2004 the original author or authors. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of 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, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.springframework.rules.constraint; 017 018 import org.springframework.rules.constraint.Constraint; 019 import org.springframework.rules.reporting.TypeResolvable; 020 import org.springframework.util.Assert; 021 022 public class IfTrue extends AbstractConstraint implements TypeResolvable{ 023 024 private Constraint constraint; 025 026 private Constraint mustBeTrueConstraint; 027 028 private Constraint elseTrueConstraint; 029 030 private String type; 031 032 public IfTrue(Constraint constraint, Constraint mustAlsoBeTrue) { 033 this(constraint, mustAlsoBeTrue, (Constraint)null); 034 } 035 036 public IfTrue(Constraint constraint, Constraint mustAlsoBeTrue, String type) { 037 this(constraint, mustAlsoBeTrue, null, type); 038 } 039 040 public IfTrue(Constraint constraint, Constraint mustAlsoBeTrue, Constraint elseMustAlsoBeTrue) { 041 this(constraint, mustAlsoBeTrue, elseMustAlsoBeTrue, "ifTrue"); 042 } 043 044 public IfTrue(Constraint constraint, Constraint mustAlsoBeTrue, Constraint elseMustAlsoBeTrue, String type) { 045 Assert.notNull(constraint, "The constraint that may be true is required"); 046 Assert.notNull(mustAlsoBeTrue, "The constraint that must be true IF the first constraint is true is required"); 047 this.constraint = constraint; 048 this.mustBeTrueConstraint = mustAlsoBeTrue; 049 this.elseTrueConstraint = elseMustAlsoBeTrue; 050 this.type = type; 051 } 052 053 public boolean test(Object argument) { 054 if (constraint.test(argument)) 055 return mustBeTrueConstraint.test(argument); 056 057 if (elseTrueConstraint != null) 058 return elseTrueConstraint.test(argument); 059 060 return true; 061 } 062 063 public String getType() { 064 return type; 065 } 066 }