OSDN Git Service

8fa18cda8036c4964836677ac5cde1a358450625
[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<>();
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      *
77      * @param argnum 必要な引数の数
78      * @param cmdopts オプションスイッチパターン群
79      */
80     OptSwitch(int argnum, String... cmdopts) {
81         this.exArgNum = argnum;
82
83         List<String> optlist;
84         optlist = Arrays.asList(cmdopts);
85         optlist = Collections.unmodifiableList(optlist);
86         this.cmdopts = optlist;
87
88         return;
89     }
90
91
92     /**
93      * コンソール提示用ヘルプ出力文字列を返す。
94      *
95      * @return オプションヘルプ文字列
96      */
97     static String getConsoleHelp(){
98         return HELP_CONSOLE;
99     }
100
101     /**
102      * 文字列に合致するオプションを返す。
103      *
104      * <p>一つのオプションが複数の表記に合致する場合がある。
105      *
106      * @param cmd 文字列
107      * @return オプション種別。合致する物が見つからなければnull
108      */
109     static OptSwitch parse(String cmd){
110         OptSwitch result = MAP_OPT.get(cmd);
111         return result;
112     }
113
114
115     /**
116      * 各オプションに後続する引数の数を返す。
117      *
118      * <p>引数をとらないオプションは0を返す。
119      *
120      * @return 引数の数
121      */
122     int getExArgNum(){
123         return this.exArgNum;
124     }
125
126 }