package at.oefai.aaa.agent.jam;

import java.io.Serializable;

import at.oefai.aaa.agent.jam.types.Binding;
import at.oefai.aaa.agent.jam.types.Expression;
import at.oefai.aaa.agent.jam.types.Value;
import at.oefai.aaa.agent.jam.types.Variable;

/**
 * A built-in JAM primitive action for binding values to local plan variables within plans.
 * @author Marc Huber
 * @author Jaeho Lee
 */
class AssignAction extends AbstractAction implements Serializable {
    private Variable variable;
    private Expression expression;

    /**  */
    AssignAction(final Variable v, final Expression e) {
        this.variable = v;
        this.expression = e;
    }

    // Member functions

    public boolean isExecutableAction() { return true; }

    /**  */
    public Result execute(final Binding b, final Goal currentGoal) {
        Value v = this.expression.eval(b);
        b.setValue(this.variable, v);
        return Result.SUCCEEDED;
    }

    /**  */
    public String formattedString(final Binding b) {
        return "ASSIGN: variable: " + this.variable.formattedString(b) + "expression: " + this.expression.formattedString(b);
    }

    public String getName() {
        return this.variable.getName();
    }
}

