001 /* 002 * Copyright 2002-2006 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 006 * 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, WITHOUT 012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 013 * License for the specific language governing permissions and limitations 014 * under the License. 015 */ 016 package org.springframework.rules.constraint; 017 018 import java.util.Iterator; 019 020 import org.springframework.rules.constraint.Constraint; 021 022 /** 023 * A "xor" compound constraint (aka exclusive disjunction). 024 * 025 * @author Mathias Broekelmann 026 * 027 */ 028 public class XOr extends CompoundConstraint { 029 030 /** 031 * Creates a empty UnaryOr disjunction. 032 */ 033 public XOr() { 034 super(); 035 } 036 037 /** 038 * "Ors" two constraints. 039 * 040 * @param constraint1 041 * The first constraint. 042 * @param constraint2 043 * The second constraint. 044 */ 045 public XOr(Constraint constraint1, Constraint constraint2) { 046 super(constraint1, constraint2); 047 } 048 049 /** 050 * "Ors" the specified constraints. 051 * 052 * @param constraints 053 * The constraints 054 */ 055 public XOr(Constraint[] constraints) { 056 super(constraints); 057 } 058 059 /** 060 * Tests if any of the constraints aggregated by this compound constraint test 061 * <code>true</code>. 062 * 063 * @see Constraint#test(java.lang.Object) 064 */ 065 public boolean test(Object value) { 066 boolean found = false; 067 for (Iterator i = iterator(); i.hasNext();) { 068 if (((Constraint) i.next()).test(value)) { 069 if (found) { 070 return false; 071 } 072 found = true; 073 } 074 } 075 return found; 076 } 077 078 }