OSDN Git Service

Vmd2XMLと共通化
[mikutoga/Pmd2XML.git] / src / main / java / jp / sfjp / mikutoga / pmd2xml / CmdLine.java
1 /*
2  * command line parser
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.ArrayList;
11 import java.util.Arrays;
12 import java.util.Iterator;
13 import java.util.LinkedList;
14 import java.util.List;
15
16 /**
17  * コマンドラインの1オプションとその引数群に相当。
18  */
19 final class CmdLine {
20
21     private OptSwitch opt;
22     private List<String> optArgs;
23
24
25     /**
26      * コンストラクタ。
27      */
28     private CmdLine() {
29         super();
30         return;
31     }
32
33
34     /**
35      * コマンドライン解析を行う。
36      * @param args コマンドライン
37      * @return 解析されたコマンドライン並び
38      */
39     static List<CmdLine> parse(String... args){
40         List<String> list = Arrays.asList(args);
41         return parse(list);
42     }
43
44     /**
45      * コマンドライン解析を行う。
46      * @param argList コマンドライン
47      * @return 解析されたコマンドライン並び
48      */
49     static List<CmdLine> parse(List<String> argList){
50         List<CmdLine> result = new LinkedList<CmdLine>();
51
52         Iterator<String> it = argList.iterator();
53         while (it.hasNext()) {
54             String arg = it.next();
55
56             CmdLine info = new CmdLine();
57             result.add(info);
58
59             info.opt = OptSwitch.parse(arg);
60
61             int exArgNum = 0;
62             if (info.opt != null) {
63                 exArgNum = info.opt.getExArgNum();
64             }
65             info.optArgs = new ArrayList<String>(exArgNum + 1);
66
67             info.optArgs.add(arg);
68
69             for (int argCt = 0; argCt < exArgNum; argCt++) {
70                 if ( ! it.hasNext()) {
71                     break;
72                 }
73                 String exarg = it.next();
74                 info.optArgs.add(exarg);
75             }
76         }
77
78         return result;
79     }
80
81
82     /**
83      * オプション識別子を返す。
84      * @return オプション識別子。
85      * オプションを伴わない単純なコマンドライン引数の場合はnullを返す。
86      */
87     OptSwitch getOptSwitch() {
88         return this.opt;
89     }
90
91     /**
92      * オプションに付随する引数群を返す。
93      * @return オプションに付随する引数群。
94      * 先頭要素はオプション識別子。
95      * 単純なコマンドライン引数の場合は自身が1要素のみを占める。
96      */
97     List<String> getOptArgs() {
98         return this.optArgs;
99     }
100
101 }