OSDN Git Service

Vmd2XMLと共通化
[mikutoga/Pmd2XML.git] / src / main / java / jp / sfjp / mikutoga / pmd2xml / 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.pmd2xml;
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     ;
30
31     private static final String HELP_CONSOLE =
32               "-h               : put help message\n\n"
33             + "-i <file>        : specify input file\n"
34             + "-o <file>        : specify output file\n"
35             + "-f               : force overwriting\n\n"
36             + "-nl <newline>    : specify XML-newline character"
37             +                     " (default:lf)\n"
38             + "-genout <bool>   : mark generator-name to XML"
39             +                     " (default:on)\n\n"
40             + "-iform <format>  : specify input format explicitly\n"
41             + "-oform <format>  : specify output format explicitly\n\n"
42             + "   bool : \"on\" or \"off\""
43             +     " or \"true\" or \"false\""
44             +      " or \"yes\" or \"no\"\n"
45             + "   format : \"pmd\" or \"xml\" or"
46             +            " \"xml101009\" or \"xml130128\"\n"
47             + "   newline : \"lf\" or \"crlf\"\n"
48             ;
49
50     private static final Map<String, OptSwitch> MAP_OPT;
51
52     static{
53         Map<String, OptSwitch> map = new HashMap<String, OptSwitch>();
54
55         for(OptSwitch opt : values()){
56             for(String cmdarg : opt.cmdopts){
57                 map.put(cmdarg, opt);
58             }
59         }
60
61         map = Collections.unmodifiableMap(map);
62         MAP_OPT = map;
63     }
64
65
66     private final int exArgNum;
67     private final List<String> cmdopts;
68
69
70     /**
71      * コンストラクタ。
72      * @param argnum 必要な引数の数
73      * @param cmdopts オプションスイッチパターン群
74      */
75     private OptSwitch(int argnum, String... cmdopts) {
76         this.exArgNum = argnum;
77
78         List<String> optlist;
79         optlist = Arrays.asList(cmdopts);
80         optlist = Collections.unmodifiableList(optlist);
81         this.cmdopts = optlist;
82
83         return;
84     }
85
86
87     /**
88      * コンソール提示用ヘルプ出力文字列を返す。
89      * @return オプションヘルプ文字列
90      */
91     static String getConsoleHelp(){
92         return HELP_CONSOLE;
93     }
94
95     /**
96      * 文字列に合致するオプションを返す。
97      * <p>一つのオプションが複数の表記に合致する場合がある。
98      * @param cmd 文字列
99      * @return オプション種別。合致する物が見つからなければnull
100      */
101     static OptSwitch parse(String cmd){
102         OptSwitch result = MAP_OPT.get(cmd);
103         return result;
104     }
105
106
107     /**
108      * 各オプションに後続する引数の数を返す。
109      * <p>引数をとらないオプションは0を返す。
110      * @return 引数の数
111      */
112     int getExArgNum(){
113         return this.exArgNum;
114     }
115
116 }