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.closure.support;
017
018 import org.springframework.rules.closure.Closure;
019 import org.springframework.rules.constraint.Constraint;
020
021 /**
022 * Only execute the specified closure if a provided constraint is also true.
023 *
024 * @author Keith Donald
025 */
026 public class IfBlock extends Block {
027 private static final long serialVersionUID = 1L;
028
029 /**
030 * Block of code to execute if object passes test.
031 */
032 private Closure closure;
033
034 /**
035 * Constraint to test against.
036 */
037 private Constraint constraint;
038
039 /**
040 * Constructor.
041 *
042 * @param constraint Constraint to test against.
043 * @param closure closure to be executed if object passes the test.
044 */
045 public IfBlock(Constraint constraint, Closure closure) {
046 this.constraint = constraint;
047 this.closure = closure;
048 }
049
050 /**
051 * Only invoke the wrapped closure against the provided argument if the
052 * constraint permits, else take no action.
053 */
054 protected void handle(Object argument) {
055 if (constraint.test(argument)) {
056 closure.call(argument);
057 }
058 }
059
060 }