1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.start;
20
21 import java.io.File;
22 import java.util.ArrayList;
23 import java.util.List;
24
25 public class CommandLineBuilder
26 {
27 public static File findExecutable(File root, String path)
28 {
29 String npath = path.replace('/',File.separatorChar);
30 File exe = new File(root,npath);
31 if (!exe.exists())
32 {
33 return null;
34 }
35 return exe;
36 }
37
38 public static String findJavaBin()
39 {
40 File javaHome = new File(System.getProperty("java.home"));
41 if (!javaHome.exists())
42 {
43 return null;
44 }
45
46 File javabin = findExecutable(javaHome,"bin/java");
47 if (javabin != null)
48 {
49 return javabin.getAbsolutePath();
50 }
51
52 javabin = findExecutable(javaHome,"bin/java.exe");
53 if (javabin != null)
54 {
55 return javabin.getAbsolutePath();
56 }
57
58 return "java";
59 }
60
61
62
63
64
65
66
67
68 public static String quote(String arg)
69 {
70 boolean needsQuoting = (arg.indexOf(' ') >= 0) || (arg.indexOf('"') >= 0);
71 if (!needsQuoting)
72 {
73 return arg;
74 }
75 StringBuilder buf = new StringBuilder();
76
77 boolean escaped = false;
78 boolean quoted = false;
79 for (char c : arg.toCharArray())
80 {
81 if (!quoted && !escaped && ((c == '"') || (c == ' ')))
82 {
83 buf.append("\\");
84 }
85
86 if (!escaped && (c == '\''))
87 {
88 quoted = !quoted;
89 }
90 escaped = (c == '\\');
91 buf.append(c);
92 }
93
94 return buf.toString();
95 }
96
97 private List<String> args;
98
99 public CommandLineBuilder()
100 {
101 args = new ArrayList<String>();
102 }
103
104 public CommandLineBuilder(String bin)
105 {
106 this();
107 args.add(bin);
108 }
109
110
111
112
113
114
115
116
117
118 public void addArg(String arg)
119 {
120 if (arg != null)
121 {
122 args.add(quote(arg));
123 }
124 }
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143 public void addEqualsArg(String name, String value)
144 {
145 if ((value != null) && (value.length() > 0))
146 {
147 args.add(quote(name + "=" + value));
148 }
149 else
150 {
151 args.add(quote(name));
152 }
153 }
154
155
156
157
158
159
160
161
162
163 public void addRawArg(String arg)
164 {
165 if (arg != null)
166 {
167 args.add(arg);
168 }
169 }
170
171 public List<String> getArgs()
172 {
173 return args;
174 }
175
176 @Override
177 public String toString()
178 {
179 return toString(" ");
180 }
181
182 public String toString(String delim)
183 {
184 StringBuilder buf = new StringBuilder();
185
186 for (String arg : args)
187 {
188 if (buf.length()>0)
189 {
190 buf.append(delim);
191 }
192 buf.append(quote(arg));
193 }
194
195 return buf.toString();
196 }
197
198 public void debug()
199 {
200 if (!StartLog.isDebugEnabled())
201 {
202 return;
203 }
204
205 int len = args.size();
206 StartLog.debug("Command Line: %,d entries",args.size());
207 for (int i = 0; i < len; i++)
208 {
209 StartLog.debug(" [%d]: \"%s\"",i,args.get(i));
210 }
211 }
212 }