OSDN Git Service

Merge commit '2458eff3aea04f67893bc824b5cf896fbb767332'
[jindolf/Jindolf.git] / src / main / java / jp / sourceforge / jindolf / CmdOption.java
diff --git a/src/main/java/jp/sourceforge/jindolf/CmdOption.java b/src/main/java/jp/sourceforge/jindolf/CmdOption.java
new file mode 100644 (file)
index 0000000..8e68dd8
--- /dev/null
@@ -0,0 +1,165 @@
+/*\r
+ * command line options\r
+ *\r
+ * Copyright(c) 2009 olyutorskii\r
+ * $Id: CmdOption.java 928 2009-11-29 16:37:50Z olyutorskii $\r
+ */\r
+\r
+package jp.sourceforge.jindolf;\r
+\r
+import java.io.IOException;\r
+import java.util.LinkedList;\r
+import java.util.List;\r
+\r
+/**\r
+ * コマンドラインオプションの列挙。\r
+ */\r
+public enum CmdOption{\r
+\r
+    /** ヘルプ。 */\r
+    OPT_HELP("help", "h", "-help", "?"),\r
+    /** 版数表示。 */\r
+    OPT_VERSION("version"),\r
+    /** UI文字制御。 */\r
+    OPT_BOLDMETAL("boldMetal"),\r
+    /** スプラッシュ制御。 */\r
+    OPT_NOSPLASH("nosplash"),\r
+    /** ウィンドウ位置指定。 */\r
+    OPT_GEOMETRY("geometry"),\r
+    /** 実行環境出力。 */\r
+    OPT_VMINFO("vminfo"),\r
+    /** コンソールログ。 */\r
+    OPT_CONSOLELOG("consolelog"),\r
+    /** フォント指定。 */\r
+    OPT_INITFONT("initfont"),\r
+    /** アンチエイリアス。 */\r
+    OPT_ANTIALIAS("antialias"),\r
+    /** サブピクセル制御。 */\r
+    OPT_FRACTIONAL("fractional"),\r
+    /** 設定格納ディレクトリ指定。 */\r
+    OPT_CONFDIR("confdir"),\r
+    /** 設定格納ディレクトリ不使用。 */\r
+    OPT_NOCONF("noconfdir"),\r
+    ;\r
+\r
+    /**\r
+     * オプション名に合致するEnumを返す。\r
+     * @param seq ハイフン付きオプション名\r
+     * @return 合致したEnum。どれとも合致しなければnull\r
+     */\r
+    public static CmdOption parseCmdOption(CharSequence seq){\r
+        for(CmdOption option : values()){\r
+            if(option.matchHyphened(seq)) return option;\r
+        }\r
+        return null;\r
+    }\r
+\r
+    /**\r
+     * 単体で意味をなすオプションか判定する。\r
+     * @param option オプション\r
+     * @return 単体で意味をなすならtrue\r
+     */\r
+    public static boolean isIndepOption(CmdOption option){\r
+        switch(option){\r
+        case OPT_HELP:\r
+        case OPT_VERSION:\r
+        case OPT_VMINFO:\r
+        case OPT_BOLDMETAL:\r
+        case OPT_NOSPLASH:\r
+        case OPT_CONSOLELOG:\r
+        case OPT_NOCONF:\r
+            return true;\r
+        default:\r
+            break;\r
+        }\r
+\r
+        return false;\r
+    }\r
+\r
+    /**\r
+     * 真偽指定を一つ必要とするオプションか判定する。\r
+     * @param option オプション\r
+     * @return 真偽指定を一つ必要とするオプションならtrue\r
+     */\r
+    public static boolean isBooleanOption(CmdOption option){\r
+        switch(option){\r
+        case OPT_ANTIALIAS:\r
+        case OPT_FRACTIONAL:\r
+            return true;\r
+        default:\r
+            break;\r
+        }\r
+\r
+        return false;\r
+    }\r
+\r
+    /**\r
+     * ヘルプメッセージ(オプションの説明)を返す。\r
+     * @return ヘルプメッセージ\r
+     */\r
+    public static CharSequence getHelpText(){\r
+        CharSequence helpText;\r
+\r
+        try{\r
+            helpText = Jindolf.loadResourceText("resources/help.txt");\r
+        }catch(IOException e){\r
+            helpText = "";\r
+        }\r
+\r
+        return helpText;\r
+    }\r
+\r
+    private final List<String> nameList = new LinkedList<String>();\r
+\r
+    /**\r
+     * コンストラクタ。\r
+     * @param names 頭のハイフンを除いたオプション名の一覧\r
+     */\r
+    private CmdOption(CharSequence ... names){\r
+        if(names == null) throw new NullPointerException();\r
+        if(names.length <= 0) throw new IllegalArgumentException();\r
+\r
+        for(CharSequence name : names){\r
+            if(name == null) throw new NullPointerException();\r
+            this.nameList.add(name.toString().intern());\r
+        }\r
+\r
+        return;\r
+    }\r
+\r
+    /**\r
+     * 頭のハイフンを除いたオプション名を返す。\r
+     * オプション名が複数指定されていた場合は最初のオプション名\r
+     * @return オプション名\r
+     */\r
+    @Override\r
+    public String toString(){\r
+        return this.nameList.get(0);\r
+    }\r
+\r
+    /**\r
+     * 頭のハイフンが付いたオプション名を返す。\r
+     * オプション名が複数指定されていた場合は最初のオプション名\r
+     * @return オプション名\r
+     */\r
+    public String toHyphened(){\r
+        return "-" + toString();\r
+    }\r
+\r
+    /**\r
+     * 任意のオプション文字列がこのオプションに合致するか判定する。\r
+     * @param option ハイフンの付いたオプション文字列\r
+     * @return 合致すればtrue\r
+     */\r
+    public boolean matchHyphened(CharSequence option){\r
+        if(option == null) return false;\r
+\r
+        for(String name : this.nameList){\r
+            String hyphened = "-" + name;\r
+            if(hyphened.equals(option.toString())) return true;\r
+        }\r
+\r
+        return false;\r
+    }\r
+\r
+}\r