package org.arefgard.icerya.flow.node;

import org.arefgard.icerya.flow.exception.UsecaseFlowException;
import org.arefgard.icerya.flow.util.ReflectionUtil;

/**
 * 例外の送出を表すノード。
 * 
 * @author Takashi Yamashina
 * @since 1.0.0
 */
public class ThrowNode extends Node {
	public String className;

	public String getClassName() {
		return className;
	}

	public void setClassName(String className) {
		this.className = className;
	}
	
	/**
	 * 例外を送出する。
	 * <br/>
	 * <br/>
	 * ただし、送出可能な例外はExceptionかそのサブクラスである。
	 * 
	 * @throws Exception 送出する例外
	 */
	public Exception getThrowable() throws UsecaseFlowException {
		try {
			return (Exception)ReflectionUtil.generate(this.className);
		}catch(Exception e) {
			throw new UsecaseFlowException("class [" + this.className + "] is not found.");
		}
	}
	
	
}
