OSDN Git Service

Merge branch 'Branch_release-'
[jindolf/Jindolf.git] / src / main / java / jp / sfjp / jindolf / config / CmdOption.java
diff --git a/src/main/java/jp/sfjp/jindolf/config/CmdOption.java b/src/main/java/jp/sfjp/jindolf/config/CmdOption.java
new file mode 100644 (file)
index 0000000..ddc59c7
--- /dev/null
@@ -0,0 +1,141 @@
+/*
+ * command line options
+ *
+ * License : The MIT License
+ * Copyright(c) 2009 olyutorskii
+ */
+
+package jp.sfjp.jindolf.config;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.EnumSet;
+import java.util.List;
+import jp.sfjp.jindolf.ResourceManager;
+
+/**
+ * コマンドラインオプションの列挙。
+ */
+public enum CmdOption {
+
+    /** ヘルプ。 */
+    OPT_HELP("-help", "-h", "--help", "-?"),
+    /** 版数表示。 */
+    OPT_VERSION("-version"),
+    /** UI文字制御。 */
+    OPT_BOLDMETAL("-boldMetal"),
+    /** ウィンドウ位置指定。 */
+    OPT_GEOMETRY("-geometry"),
+    /** 実行環境出力。 */
+    OPT_VMINFO("-vminfo"),
+    /** コンソールログ。 */
+    OPT_CONSOLELOG("-consolelog"),
+    /** フォント指定。 */
+    OPT_INITFONT("-initfont"),
+    /** アンチエイリアス。 */
+    OPT_ANTIALIAS("-antialias"),
+    /** サブピクセル制御。 */
+    OPT_FRACTIONAL("-fractional"),
+    /** 設定格納ディレクトリ指定。 */
+    OPT_CONFDIR("-confdir"),
+    /** 設定格納ディレクトリ不使用。 */
+    OPT_NOCONF("-noconfdir"),
+    ;
+
+
+    private static final Collection<CmdOption> OPTS_INDEPENDENT =
+            EnumSet.of(
+            OPT_HELP,
+            OPT_VERSION,
+            OPT_VMINFO,
+            OPT_BOLDMETAL,
+            OPT_CONSOLELOG,
+            OPT_NOCONF
+            );
+    private static final Collection<CmdOption> OPTS_BOOLEAN =
+            EnumSet.of(
+            OPT_ANTIALIAS,
+            OPT_FRACTIONAL
+            );
+
+    private static final String RES_HELPTEXT = "resources/help.txt";
+
+
+    private final List<String> nameList;
+
+
+    /**
+     * コンストラクタ。
+     * @param names オプション名の一覧
+     */
+    private CmdOption(String ... names){
+        assert names.length > 0;
+        this.nameList = Arrays.asList(names);
+        return;
+    }
+
+
+    /**
+     * ヘルプメッセージ(オプションの説明)を返す。
+     * @return ヘルプメッセージ
+     */
+    public static String getHelpText(){
+        String helpText = ResourceManager.getTextFile(RES_HELPTEXT);
+        return helpText;
+    }
+
+    /**
+     * オプション名に合致するEnumを返す。
+     * @param arg 個別のコマンドライン引数
+     * @return 合致したEnum。どれとも合致しなければnull
+     */
+    public static CmdOption parseCmdOption(String arg){
+        for(CmdOption option : values()){
+            if(option.matches(arg)) return option;
+        }
+        return null;
+    }
+
+    /**
+     * 任意のオプション文字列がこのオプションに合致するか判定する。
+     * @param option ハイフンの付いたオプション文字列
+     * @return 合致すればtrue
+     */
+    public boolean matches(String option){
+        for(String name : this.nameList){
+            if(option.equals(name)) return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * 単体で意味をなすオプションか判定する。
+     * @return 単体で意味をなすならtrue
+     */
+    public boolean isIndepOption(){
+        if(OPTS_INDEPENDENT.contains(this)) return true;
+        return false;
+    }
+
+    /**
+     * 真偽指定を一つ必要とするオプションか判定する。
+     * @return 真偽指定を一つ必要とするオプションならtrue
+     */
+    public boolean isBooleanOption(){
+        if(OPTS_BOOLEAN.contains(this)) return true;
+        return false;
+    }
+
+    /**
+     * オプション名を返す。
+     * オプション別名が複数指定されている場合は最初のオプション名
+     * @return オプション名
+     */
+    @Override
+    public String toString(){
+        String result = this.nameList.get(0);
+        return result;
+    }
+
+}