package net.onrc.onos.core.intent;

/**
 * This class is instantiated by Run-times to express intent calculation error
 * @author Toshio Koide (t-koide@onlab.us)
 */
public class ErrorIntent extends Intent {
	public enum ErrorType {
		UNSUPPORTED_INTENT,
		SWITCH_NOT_FOUND,
		PATH_NOT_FOUND,
	}

	public ErrorType errorType;
	public String message;
	public Intent parentIntent;

	/**
	 * Default constructor for Kryo deserialization
	 */
	protected ErrorIntent() {
	}

	public ErrorIntent(ErrorType errorType, String message, Intent parentIntent) {
		super(parentIntent.getId());
		this.errorType = errorType;
		this.message = message;
		this.parentIntent = parentIntent;
	}
}
