package org.jactr.scripting.condition; /* * default logging */ import org.jactr.core.model.IModel; import org.jactr.core.production.VariableBindings; import org.jactr.core.production.condition.CannotMatchException; import org.jactr.core.production.condition.match.ExceptionMatchFailure; import org.jactr.core.production.condition.match.IMatchFailure; import org.jactr.scripting.IScriptableFactory; import org.jactr.scripting.ScriptSupport; /** * delegate for scripted conditions to extend, allowing the generic * {@link ScriptableCondition} to handle the majority of the heavy lifting, * leaving this to just evaluate the script. If the {@link #clone(IModel, VariableBindings)} * or {@link #bind(ScriptSupport, IModel, VariableBindings, boolean)} methods throw a * {@link CannotMatchException}, they should use {@link IMatchFailure}s such as * {@link ScriptExecutionFailure} or {@link ExceptionMatchFailure}. If the * script code itself throws a CME, it can merely be passed up. * * @author harrison */ public interface IConditionScript { public String getScript(); /** * clone a copy of this condition for use in binding. * * @param model * @param variableBindings * @return * @throws CannotMatchException */ public IConditionScript clone(IModel model, VariableBindings variableBindings) throws CannotMatchException; /** * iteratively bind this condition. * * @param model * @param variableBindings * @param isIterative * false if this is the final call. If so, any unresolved bindings * should result in a CannotMatchException * @return the number of variables still unresolved * @throws CannotMatchException */ public int bind(ScriptSupport scriptSupport, IModel model, VariableBindings variableBindings, boolean isIterative) throws CannotMatchException; public void dispose(); public IScriptableFactory getFactory(); }