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
144 public void addEqualsArg(String name, String value)
145 {
146 if ((value != null) && (value.length() > 0))
147 {
148 args.add(quote(name + "=" + value));
149 }
150 else
151 {
152 args.add(quote(name));
153 }
154 }
155
156
157
158
159
160
161
162
163
164 public void addRawArg(String arg)
165 {
166 if (arg != null)
167 {
168 args.add(arg);
169 }
170 }
171
172 public List<String> getArgs()
173 {
174 return args;
175 }
176
177 @Override
178 public String toString()
179 {
180 StringBuilder buf = new StringBuilder();
181
182 boolean delim = false;
183 for (String arg : args)
184 {
185 if (delim)
186 {
187 buf.append(' ');
188 }
189 buf.append(quote(arg));
190 delim = true;
191 }
192
193 return buf.toString();
194 }
195 }