package ash.reverse.parser;

/**
 * Javaの型種別の定義
 */
public 	enum JavaType {
	CLASS("class", " "),
	ENUM("enum", "%"),
	INTERFACE("interface", "!"),
	AINTERFACE("@interface", "@"),
	UNDEF("????", "?");

	JavaType(String keyword, String symbol) {
		this.keyword = keyword;
		this.symbol = symbol;
	}

	/** Javaキーワード表現 */
	public final String keyword;

	/** Javaキーワード表現を返す。 */
	public String keyword() { return keyword; }

	/** クラス図での型種別の記号表現 */
	public final String symbol;

	/** クラス図での型種別の記号表現を返す。 */
	public String symbol() { return symbol; }

	/**
	 * 指定された語彙が型定義のキーワードか否かを判定する。
	 * @param keyword 判定する語彙
	 * @return 指定された語彙が型定義のキーワードならばtrue
	 */
	static boolean valid(String keyword) {
		return value(keyword) != UNDEF;
	}

	/**
	 * Javaキーワードからenum値を取得する。
	 * @param keyword Javaキーワード
	 * @return 対応するenum値
	 */
	public static JavaType value(String keyword) {
		for(JavaType type : values()) {
			if(type.keyword.equals(keyword)) return type;
		}
		return UNDEF;
	}
}
