/**
* Copyright (C) 2015 Valkyrie RCP
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.valkyriercp.rules.constraint;
import org.springframework.util.Assert;
import org.valkyriercp.rules.reporting.TypeResolvable;
public class IfTrue extends AbstractConstraint implements TypeResolvable {
private Constraint constraint;
private Constraint mustBeTrueConstraint;
private Constraint elseTrueConstraint;
private String type;
public IfTrue(Constraint constraint, Constraint mustAlsoBeTrue) {
this(constraint, mustAlsoBeTrue, (Constraint)null);
}
public IfTrue(Constraint constraint, Constraint mustAlsoBeTrue, String type) {
this(constraint, mustAlsoBeTrue, null, type);
}
public IfTrue(Constraint constraint, Constraint mustAlsoBeTrue, Constraint elseMustAlsoBeTrue) {
this(constraint, mustAlsoBeTrue, elseMustAlsoBeTrue, "ifTrue");
}
public IfTrue(Constraint constraint, Constraint mustAlsoBeTrue, Constraint elseMustAlsoBeTrue, String type) {
Assert.notNull(constraint, "The constraint that may be true is required");
Assert.notNull(mustAlsoBeTrue, "The constraint that must be true IF the first constraint is true is required");
this.constraint = constraint;
this.mustBeTrueConstraint = mustAlsoBeTrue;
this.elseTrueConstraint = elseMustAlsoBeTrue;
this.type = type;
}
public boolean test(Object argument) {
if (constraint.test(argument))
return mustBeTrueConstraint.test(argument);
if (elseTrueConstraint != null)
return elseTrueConstraint.test(argument);
return true;
}
public String getType() {
return type;
}
}