1 package net.sf.jhylafax;
2
3 import static net.sf.jhylafax.JHylaFAX.i18n;
4 import java.util.ArrayList;
5 import java.util.Arrays;
6 import java.util.LinkedList;
7 import java.util.List;
8
9 public class ArgsHandler {
10
11 private LinkedList<String> args;
12 private List<String> filenames = new ArrayList<String>();
13 private String logConfigFilename = "logging-default.properties";
14 private List<String> numbers = new ArrayList<String>();
15 private boolean readStdin = false;
16 private boolean quitAfterSending;
17
18 public ArgsHandler()
19 {
20 }
21
22 private void error(String error)
23 {
24 System.err.println(error);
25 System.exit(1);
26 }
27
28 public void evaluate(String[] args)
29 {
30 this.args = new LinkedList<String>(Arrays.asList(args));
31
32 while (hasNext()) {
33 String arg = pop();
34 if (!arg.startsWith("-")) {
35 filenames.add(arg);
36 }
37 else {
38 if ("-n".equals(arg)) {
39 numbers.add(popArg("-n"));
40 }
41 else if ("-d".equals(arg)) {
42 logConfigFilename = "logging-info.properties";
43 }
44 else if ("-dd".equals(arg)) {
45 logConfigFilename = "logging-debug.properties";
46 }
47 else if ("--stdin".equals(arg)) {
48 readStdin = true;
49 }
50 else if ("-q".equals(arg)) {
51 quitAfterSending = true;
52 }
53 else if ("-h".equals(arg) | "-?".equals(arg) | "-help".equals(arg) | "--help".equals(arg)) {
54 System.out.println("Usage: java -jar jhylafax.jar [options] [files]");
55 System.out.println();
56 System.out.println(" -d Output debug information to stderr");
57 System.out.println(" -dd Output more debug information to stderr");
58 System.out.println(" -h --help Print this help message");
59 System.out.println(" -n number Send fax to number");
60 System.out.println(" -q Quit after sending fax");
61 System.out.println(" --stdin Read PostScript from stdin");
62 System.exit(0);
63 }
64 else {
65 error(i18n.tr("Invalid parameter. Use -h for help."));
66 }
67 }
68 }
69
70 }
71
72 public String[] getFilenames()
73 {
74 return filenames.toArray(new String[0]);
75 }
76
77 public String getLogConfigFilename()
78 {
79 return logConfigFilename;
80 }
81
82 public String[] getNumbers()
83 {
84 return numbers.toArray(new String[0]);
85 }
86
87 public boolean getReadStdin()
88 {
89 return readStdin;
90 }
91
92 public boolean getQuitAfterSending()
93 {
94 return quitAfterSending;
95 }
96
97 private boolean hasNext()
98 {
99 return !args.isEmpty();
100 }
101
102 private String pop()
103 {
104 return args.remove();
105 }
106
107 private String popArg(String parameter)
108 {
109 if (!hasNext()) {
110 error(i18n.tr("{0} parameter requires argument", parameter));
111 }
112 String arg = pop();
113 if (arg.startsWith("-")) {
114 error(i18n.tr("{0} parameter requires argument", parameter));
115 }
116 return arg;
117 }
118 }