OSDN Git Service

コマンドライン解析部の整理見直し
[jindolf/JinArchiver.git] / src / main / java / jp / sourceforge / jindolf / archiver / OptArg.java
1 /*
2  * option argument
3  *
4  * License : The MIT License
5  * Copyright(c) 2016 olyutorskii
6  */
7
8 package jp.sourceforge.jindolf.archiver;
9
10 import java.text.MessageFormat;
11 import java.util.Arrays;
12 import java.util.Collections;
13 import java.util.HashMap;
14 import java.util.Iterator;
15 import java.util.List;
16 import java.util.Map;
17
18 /**
19  * オプション指定子。
20  */
21 public enum OptArg implements Iterable<String> {
22
23     /** ヘルプ。 */
24     OPT_HELP   ("-h", "-help", "-?"),
25     /** 国名指定。 */
26     OPT_LAND   ("-land"),
27     /** 村ID指定。 */
28     OPT_VID    ("-vid"),
29     /** 指定ディレクトリに書き込む。 */
30     OPT_OUTDIR ("-outdir"),
31     /** 標準出力へ書き込む。 */
32     OPT_STDOUT ("-stdout"),
33     ;
34
35
36     private static final Map<String, OptArg> MAP_OPT;
37     private static final String FMT_HELP =
38         "\n"
39         + "{0} 人狼BBS アーカイブ作成ツール\n\n"
40         + "-h, -help, -?\n\tヘルプメッセージ\n"
41         + "-land 国識別子\n"
42         + "-vid 村番号\n"
43         + "-outdir 出力ディレクトリ\n"
44         + "-stdout\n\t標準出力へ出力\n\n"
45         + "※ -outdir と -stdout は排他指定\n\n"
46         + "利用可能な国識別子は {1}\n";
47
48
49     private final List<String> argList;
50
51
52     static{
53         Map<String, OptArg> map = new HashMap<>();
54
55         for(OptArg optArg : values()){
56             for(String argtxt : optArg){
57                 map.put(argtxt, optArg);
58             }
59         }
60
61         MAP_OPT = Collections.unmodifiableMap(map);
62     }
63
64
65     /**
66      * コンストラクタ。
67      * @param opts オプション文字列。
68      */
69     private OptArg(String ... opts){
70         List<String> list;
71         list = Arrays.asList(opts);
72         list = Collections.unmodifiableList(list);
73
74         this.argList = list;
75
76         return;
77     }
78
79
80     /**
81      * 文字列からオプション指定子を得る。
82      * @param txt 文字列
83      * @return オプション指定子。見つからなければnull
84      */
85     public static OptArg parseOptArg(String txt){
86         OptArg result = MAP_OPT.get(txt);
87         return result;
88     }
89
90     /**
91      * ヘルプメッセージを生成する。
92      * @param generator アプリ名
93      * @return メッセージ
94      */
95     public static String getHelpMessage(String generator){
96         String appName = "";
97         if(generator != null) appName = generator;
98         String catalog = LandUtils.getLandIdCatalog();
99
100         String result = MessageFormat.format(FMT_HELP, appName, catalog);
101
102         return result;
103     }
104
105
106     /**
107      * オプション文字列のリストを得る。
108      * @return オプション文字列のリスト
109      */
110     public List<String> getArgList(){
111         return this.argList;
112     }
113
114     /**
115      * {@inheritDoc}
116      * オプション文字列の列挙。
117      * @return {@inheritDoc}
118      */
119     @Override
120     public Iterator<String> iterator(){
121         return this.argList.iterator();
122     }
123
124 }