package net.onrc.onos.core.intent;

/**
 * @author Toshio Koide (t-koide@onlab.us)
 */
public class IntentOperation {
    public enum Operator {
        /**
         * Add new intent specified by intent field.
         */
        ADD,

        /**
         * Remove existing intent specified by intent field.
         * The instance of intent field should be an instance of Intent class (not a child class)
         */
        REMOVE,

        /**
         * Do error handling.
         * The instance of intent field should be an instance of ErrorIntent
         */
        ERROR,
    }

    public Operator operator;
    public Intent intent;

    protected IntentOperation() {
    }

    public IntentOperation(Operator operator, Intent intent) {
        this.operator = operator;
        this.intent = intent;
    }

    @Override
    public String toString() {
        return operator.toString() + ", (" + intent.toString() + ")";
    }
}
