package ash.reverse.parser;

/**
 * 可視性を、UMLの記号表現、選択レベルと共に定義する。
 */
public enum Visibility {
	PUBLIC("public", "+", 1),
	PROTECTED("protected", "#", 2),
	PACKAGE("package", "~", 3),
	PRIVATE("private", "-", 4),
	UNDEF("undef", "?", 0);

	Visibility(String keyword, String symbol, int level) {
		this.keyword = keyword;
		this.symbol = symbol;
		this.level = level;
	}

	/** Javaキーワード表現 */
	private String keyword;
	//public String keyword() { return (this == PACKAGE) ? "" : keyword; }
	@Override public String toString() { return keyword; }

	/** UMLの可視性の記号表現 */
	private String symbol;
	public String symbol() { return symbol; }

	/** 可視性の選択レベル */
	private int level;
	public int level() { return level; }

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

	/**
	 * 可視性の種別を示すJavaキーワードでないことを判定する。
	 * @param keyword Javaキーワード
	 * @return 可視性の種別を示すJavaキーワードでなければtrue
	 */
	public static boolean undef(String keyword) {
		return value(keyword) == UNDEF;
	}
}
