org.openl.ie.constrainer.GoalAnd Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.openl.rules.constrainer Show documentation
Show all versions of org.openl.rules.constrainer Show documentation
OpenL Constraint Programming engine
package org.openl.ie.constrainer;
///////////////////////////////////////////////////////////////////////////////
/*
* Copyright Exigen Group 1998, 1999, 2000
* 320 Amboy Ave., Metuchen, NJ, 08840, USA, www.exigengroup.com
*
* The copyright to the computer program(s) herein
* is the property of Exigen Group, USA. All rights reserved.
* The program(s) may be used and/or copied only with
* the written permission of Exigen Group
* or in accordance with the terms and conditions
* stipulated in the agreement/contract under which
* the program(s) have been supplied.
*/
///////////////////////////////////////////////////////////////////////////////
/**
* A goal can be defined in terms of it's subgoals. Class GoalAnd
makes it possible to create a goal
* composed of a sequence (up to six) of other goals. To overcome the restriction of six goals imposed by it's
* constructors one can use the following trick: let's assume the goalsArray to be an array of goals
*
*
* Goal tempGoal = new GoalAnd(goalsArray.get(0),goalsArray.get(1));
* for (int i = 2; i < goalsArray.size(); i++){
* tempGoal = new GoalAnd(tempGoal, goalsArray.get(i));
* }
*
*
* GoalAnd pushes all it's subgoals to the execution stack. It succeeds if and only if all it's subgoals succeed. In
* that case it returns null otherwise it generates an exception of type Failure.
*
*/
public class GoalAnd extends GoalImpl {
private final Goal _g1;
private final Goal _g2;
/**
* Constructor of two arguments
*/
public GoalAnd(Goal g1, Goal g2) {
super(g1.constrainer(), "");// "{"+g1.name()+"&&"+g2.name()+"}");
_g1 = g1;
_g2 = g2;
}
/**
* Executes this goal.
*
* @return Null if succeeds
* @throws Failure if one of it's subgoals fails
*/
@Override
public Goal execute() throws Failure {
// Debug.print("Execute "+this);
constrainer().pushOnExecutionStack(_g2);
constrainer().pushOnExecutionStack(_g1);
return null;
}
@Override
public String toString() {
return "{" + _g1 + "&&" + _g2 + "}";
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy