OSDN Git Service

ea4c087514ddb85ad082e0f5dcee1a82e83c9955
[mikutoga/Vmd2XML.git] / src / main / java / jp / sfjp / mikutoga / vmd2xml / OptSwitch.java
1 /*
2  * command line option definition
3  *
4  * License : The MIT License
5  * Copyright(c) 2013 MikuToga Partners
6  */
7
8 package jp.sfjp.mikutoga.vmd2xml;
9
10 import java.util.Arrays;
11 import java.util.Collections;
12 import java.util.HashMap;
13 import java.util.List;
14 import java.util.Map;
15
16 /**
17  * オプションスイッチ群定義。
18  */
19 enum OptSwitch {
20
21     OPT_HELP    (0, "-h", "-help", "-?"),
22     OPT_INFILE  (1, "-i"),
23     OPT_OUTFILE (1, "-o"),
24     OPT_FORCE   (0, "-f"),
25     OPT_NEWLINE (1, "-nl"),
26     OPT_GENOUT  (1, "-genout"),
27     OPT_IFORM   (1, "-iform"),
28     OPT_OFORM   (1, "-oform"),
29     OPT_QUAT    (0, "-quat"),
30     OPT_EYXZ    (0, "-eyxz"),
31     ;
32
33     private static final String HELP_CONSOLE =
34               "-h               : put help message\n\n"
35             + "-i <file>        : specify input file\n"
36             + "-o <file>        : specify output file\n"
37             + "-f               : force overwriting\n\n"
38             + "-nl <newline>    : specify XML-newline character"
39             +                     " (default:lf)\n"
40             + "-genout <bool>   : mark generator-name to XML"
41             +                     " (default:on)\n\n"
42             + "-quat            : Quaternion form rotation (default)\n"
43             + "-eyxz            : Euler-YXZ form rotation\n\n"
44             + "-iform <format>  : specify input format explicitly\n"
45             + "-oform <format>  : specify output format explicitly\n\n"
46             + "   bool : \"on\" or \"off\""
47             +     " or \"true\" or \"false\""
48             +      " or \"yes\" or \"no\"\n"
49             + "   format : \"vmd\" or \"xml\" or"
50             +            " \"xml110820\" or \"xml130609\"\n"
51             + "   newline : \"lf\" or \"crlf\"\n"
52             ;
53
54     private static final Map<String, OptSwitch> MAP_OPT;
55
56     static{
57         Map<String, OptSwitch> map = new HashMap<String, OptSwitch>();
58
59         for(OptSwitch opt : values()){
60             for(String cmdarg : opt.cmdopts){
61                 map.put(cmdarg, opt);
62             }
63         }
64
65         map = Collections.unmodifiableMap(map);
66         MAP_OPT = map;
67     }
68
69
70     private final int exArgNum;
71     private final List<String> cmdopts;
72
73
74     /**
75      * コンストラクタ。
76      * @param argnum 必要な引数の数
77      * @param cmdopts オプションスイッチパターン群
78      */
79     private OptSwitch(int argnum, String... cmdopts) {
80         this.exArgNum = argnum;
81
82         List<String> optlist;
83         optlist = Arrays.asList(cmdopts);
84         optlist = Collections.unmodifiableList(optlist);
85         this.cmdopts = optlist;
86
87         return;
88     }
89
90
91     /**
92      * コンソール提示用ヘルプ出力文字列を返す。
93      * @return オプションヘルプ文字列
94      */
95     static String getConsoleHelp(){
96         return HELP_CONSOLE;
97     }
98
99     /**
100      * 文字列に合致するオプションを返す。
101      * <p>一つのオプションが複数の表記に合致する場合がある。
102      * @param cmd 文字列
103      * @return オプション種別。合致する物が見つからなければnull
104      */
105     static OptSwitch parse(String cmd){
106         OptSwitch result = MAP_OPT.get(cmd);
107         return result;
108     }
109
110
111     /**
112      * 各オプションに後続する引数の数を返す。
113      * <p>引数をとらないオプションは0を返す。
114      * @return 引数の数
115      */
116     int getExArgNum(){
117         return this.exArgNum;
118     }
119
120 }