OSDN Git Service

use diamond operator.
[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<>();
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      *
73      * @param argnum 必要な引数の数
74      * @param cmdopts オプションスイッチパターン群
75      */
76     OptSwitch(int argnum, String... cmdopts) {
77         this.exArgNum = argnum;
78
79         List<String> optlist;
80         optlist = Arrays.asList(cmdopts);
81         optlist = Collections.unmodifiableList(optlist);
82         this.cmdopts = optlist;
83
84         return;
85     }
86
87
88     /**
89      * コンソール提示用ヘルプ出力文字列を返す。
90      *
91      * @return オプションヘルプ文字列
92      */
93     static String getConsoleHelp(){
94         return HELP_CONSOLE;
95     }
96
97     /**
98      * 文字列に合致するオプションを返す。
99      *
100      * <p>一つのオプションが複数の表記に合致する場合がある。
101      *
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      *
114      * <p>引数をとらないオプションは0を返す。
115      *
116      * @return 引数の数
117      */
118     int getExArgNum(){
119         return this.exArgNum;
120     }
121
122 }