1 package eu.javaexperience.electronic.uartbus.cli.apps;
7 import java.io.BufferedReader;
8 import java.io.IOException;
9 import java.io.InputStreamReader;
10 import java.io.OutputStream;
11 import java.lang.ProcessBuilder.Redirect;
12 import java.util.ArrayList;
13 import java.util.List;
15 import java.util.StringTokenizer;
27 public static final CliEntry<String> PROGRAM = CliEntry.createFirstArgParserEntry
30 "Application with arguments",
34 protected static final CliEntry[] PROG_CLI_ENTRIES =
43 public static void main(String[] args)
throws Exception
45 JavaExperienceLoggingFacility.addStdOut();
46 Map<String, List<String>> pa = CliTools.parseCliOpts(args);
47 String un = CliTools.getFirstUnknownParam(pa, PROG_CLI_ENTRIES);
50 CliTools.printHelpAndExit(
"UartbusAttachProcess", 1, PROG_CLI_ENTRIES);
53 String prog = PROGRAM.tryParse(pa);
57 System.err.println(
"No program specified");
58 CliTools.printHelpAndExit(
"UartbusAttachProcess", 1, PROG_CLI_ENTRIES);
62 pb.redirectError(Redirect.INHERIT);
63 Process proc = pb.start();
67 RPC_HOST.tryParseOrDefault(pa,
"127.0.0.1"),
68 RPC_PORT.tryParseOrDefault(pa, 2112),
71 if(LOOPBACK.hasOption(pa))
75 connection.setAttribute(
"loopback_send_packets",
"true");
77 catch (IOException e1)
86 rpc.getPacketStreamer().addEventListener
93 OutputStream os = proc.getOutputStream();
96 os.write(write.getBytes());
99 catch (IOException e1)
101 e1.printStackTrace();
106 rpc.startStreaming();
110 BufferedReader br =
new BufferedReader(
new InputStreamReader(proc.getInputStream()));
113 while(null != (line = br.readLine()))
126 System.out.println(
"Process STDOUT closed");
139 if (toProcess == null || toProcess.length() == 0) {
141 return new String[0];
145 final int normal = 0;
146 final int inQuote = 1;
147 final int inDoubleQuote = 2;
149 final StringTokenizer tok =
new StringTokenizer(toProcess,
"\"\' ",
true);
150 final ArrayList<String> result =
new ArrayList<String>();
151 final StringBuilder current =
new StringBuilder();
152 boolean lastTokenHasBeenQuoted =
false;
154 while (tok.hasMoreTokens()) {
155 String nextTok = tok.nextToken();
158 if (
"\'".equals(nextTok)) {
159 lastTokenHasBeenQuoted =
true;
162 current.append(nextTok);
166 if (
"\"".equals(nextTok)) {
167 lastTokenHasBeenQuoted =
true;
170 current.append(nextTok);
174 if (
"\'".equals(nextTok)) {
176 }
else if (
"\"".equals(nextTok)) {
177 state = inDoubleQuote;
178 }
else if (
" ".equals(nextTok)) {
179 if (lastTokenHasBeenQuoted || current.length() != 0) {
180 result.add(current.toString());
181 current.setLength(0);
184 current.append(nextTok);
186 lastTokenHasBeenQuoted =
false;
190 if (lastTokenHasBeenQuoted || current.length() != 0) {
191 result.add(current.toString());
193 if (state == inQuote || state == inDoubleQuote) {
194 throw new RuntimeException(
"unbalanced quotes in " + toProcess);
196 return result.toArray(
new String[result.size()]);
static String [] translateCommandline(String toProcess)