package ash.reverse.uml;
import java.util.regex.Pattern;
import java.awt.Font;
import static java.awt.Font.*;
import java.awt.FontMetrics;
import javax.swing.JLabel;

/**
 * UMLクラス図出力で必要な定数を定義する。
 */
interface UMLConst {
	final static String SEP = "\t";			// UMLファイル形式のセパレータ
	final static String DUMMY = SEP+"null";	// ダミー項目
	final static String NAVI = SEP+"true";	// ダミー項目
	final static String RELPARAMS = DUMMY + DUMMY + DUMMY + NAVI + DUMMY + DUMMY;
	final static int UNIT = 8;

	final static Font DEFAULT_FONT = new Font(SERIF, PLAIN, 14);
	final static FontMetrics DEFAULT_FONTMETRICS =
		new JLabel().getFontMetrics(DEFAULT_FONT);

	final static String OPTIONAL = "0..1";	// オプショナルな多重度
	final static String MULTIVALUED = "*";	// 多値の多重度

	/**
	 * UMLクラス図ファイルフォーマットで使用するタグ
	 */
	final static String EXTENDS = "EXTENDS";
	final static String ASSOCIATION = "ASSOC";
	final static String INNER = "INNER";
	final static String DEPENDS = "DEPENDS";
	final static String ATTRIBUTE = "ATTRIB";
	final static String METHOD = "METHOD";
	final static String PARAMETER = "PARAM";
	final static String ENUM_TYPE = "$EnumValue";

	/**
	 * 依存関係の定型的な種別
	 */
	enum Stereotype {
		NEW("<new>"),
		BODY("<body>"),
		PARAM("<param>"),
		RETURN("<return>"),
		;
		String label;
		Stereotype(String label) { this.label = label; }
		static Stereotype value(String token) {
			for(Stereotype v : values()) {
				if(token.equals(v.label)) return v;
			}
			return null;
		}
	}
}
