//! Beanshell script = "C:/Program Files (x86)/FirstSpirit5/deployment/XXX/XXX.bat"; import java.util.*; tasklist = context.getTasks(); t = context.getTask(); s = t.getScheduleEntry(); p = s.getProject(); log = ""; // project id, schedule entry id, master language projectId = "" +p.getId(); scheduleEntryId = "" +s.getId(); language = p.getMasterLanguage().getAbbreviation().toLowerCase(); // Command-Stack cmd = new Vector(); cmd1 = new Vector(); cmd1.addAll(Arrays.asList(new String[]{script})); //cmd1.addAll(Arrays.asList(new String[]{projectId})); //cmd1.addAll(Arrays.asList(new String[]{scheduleEntryId})); //cmd1.addAll(Arrays.asList(new String[]{language})); cmd.add(cmd1); class StreamCapture extends Thread { InputStream i; boolean useErrlog; StreamCapture(InputStream inputstream, boolean useErrorlog) { i = inputstream; useErrlog = useErrorlog; } public void run() { try { InputStreamReader reader = new InputStreamReader(i); BufferedReader buffr = new BufferedReader(reader); String l = null; while ((l = buffr.readLine()) != null) { if(useErrlog) { context.logError(log + l); } else { context.logInfo(log + l); } } //buffr.close(); //reader.close(); } catch (IOException ex) { context.logError(log + " failed: " + ex); } } } for(c: cmd) { cmdstr = ""; for (String s : c) { cmdstr += " " + s; } cmdstr = "ProcessBuilder(" + cmdstr.substring(1) + ")"; context.logInfo(log + cmdstr); // Fixme: launch as Thread with given timeout try { Process p = new ProcessBuilder(c).start(); InputStream is = p.getInputStream(); StreamCapture stdout = new StreamCapture(p.getInputStream(), false); StreamCapture stderr = new StreamCapture(p.getErrorStream(), true); stdout.start(); stderr.start(); result = p.waitFor(); //is.close(); if ( result == 0 ) { context.logInfo(log + " command completed"); } else { context.logError(log + "failed with exitcode " + result + " for " + cmdstr); // wait 3 seconds as otherwise stderr is closed too early // to get all error messages. Thread.sleep(3000); } } catch (InterruptedException e) { context.logError(log + "timeout for " + cmdstr + ": " + e); } catch (Exception e) { context.logError(log + "failed for " + cmdstr + ": " + e); } } context.logInfo(log + " script completed"); |