- make a single point change to output processing after running a command - read output from remote commands using IHostShell interface
Signed-off-by: Ioana Grigoropol <ioanax.grigoro...@intel.com> --- .../org/yocto/bc/remote/utils/CommandRunnable.java | 58 +------------------ .../org/yocto/bc/remote/utils/RemoteHelper.java | 61 ++++++++++++++++++++ .../org/yocto/bc/remote/utils/RemoteMachine.java | 59 +------------------ .../bc/remote/utils/YoctoRunnableWithProgress.java | 61 +------------------- 4 files changed, 68 insertions(+), 171 deletions(-) diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/CommandRunnable.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/CommandRunnable.java index 98c3758..7406f50 100644 --- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/CommandRunnable.java +++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/CommandRunnable.java @@ -1,11 +1,13 @@ package org.yocto.bc.remote.utils; import java.io.BufferedReader; +import java.io.InputStreamReader; import java.util.concurrent.locks.Lock; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.rse.core.model.IHost; +import org.eclipse.rse.services.shells.HostShellProcessAdapter; import org.eclipse.rse.services.shells.IHostShell; public class CommandRunnable implements Runnable{ @@ -26,7 +28,7 @@ public class CommandRunnable implements Runnable{ public void run() { try { hostShell = RemoteHelper.runCommandRemote(connection, cmd, monitor); - cmd.setProcessBuffer(processOutput()); + cmd.setProcessBuffer(RemoteHelper.processOutput(monitor, hostShell, cmdHandler, new char[]{'\n'})); } catch (CoreException e) { e.printStackTrace(); } catch (Exception e) { @@ -34,58 +36,4 @@ public class CommandRunnable implements Runnable{ } } - private ProcessStreamBuffer processOutput() throws Exception { - if (hostShell == null) - throw new Exception("An error has occured while trying to run remote command!"); - - Lock lock = hostShell.getStandardOutputReader().getReaderLock(); - lock.lock(); - ProcessStreamBuffer processBuffer = new ProcessStreamBuffer(); - BufferedReader inbr = hostShell.getStandardOutputReader().getReader(); - BufferedReader errbr = hostShell.getStandardErrorReader().getReader(); - boolean cancel = false; - while (!cancel) { - if(monitor.isCanceled()) { - cancel = true; - lock.unlock(); - throw new InterruptedException("User Cancelled"); - } - StringBuffer buffer = new StringBuffer(); - int c; - if (errbr != null) - while ((c = errbr.read()) != -1) { - char ch = (char) c; - buffer.append(ch); - if (ch == '\n'){ - String str = buffer.toString(); - processBuffer.addErrorLine(str); - System.out.println(str); - if (str.trim().equals(RemoteHelper.TERMINATOR)) { - break; - } - cmdHandler.response(str, true); - buffer.delete(0, buffer.length()); - } - } - if (inbr != null) - while ((c = inbr.read()) != -1) { - char ch = (char) c; - buffer.append(ch); - if (ch == '\n'){ - String str = buffer.toString(); - processBuffer.addOutputLine(str); - System.out.println(str); - if (str.trim().equals(RemoteHelper.TERMINATOR)) { - break; - } - cmdHandler.response(str, false); - buffer.delete(0, buffer.length()); - } - } - cancel = true; - } - lock.unlock(); - return processBuffer; - } - } diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/RemoteHelper.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/RemoteHelper.java index 9bce9e3..507ac54 100644 --- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/RemoteHelper.java +++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/RemoteHelper.java @@ -10,12 +10,16 @@ ********************************************************************************/ package org.yocto.bc.remote.utils; +import java.io.BufferedReader; import java.io.File; import java.io.InputStream; +import java.io.InputStreamReader; import java.net.URI; import java.net.URISyntaxException; +import java.util.Arrays; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.locks.Lock; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; @@ -35,6 +39,7 @@ import org.eclipse.rse.services.IService; import org.eclipse.rse.services.clientserver.messages.SystemMessageException; import org.eclipse.rse.services.files.IFileService; import org.eclipse.rse.services.files.IHostFile; +import org.eclipse.rse.services.shells.HostShellProcessAdapter; import org.eclipse.rse.services.shells.IHostShell; import org.eclipse.rse.services.shells.IShellService; import org.eclipse.rse.subsystems.files.core.model.RemoteFileUtility; @@ -78,6 +83,62 @@ public class RemoteHelper { return getRemoteMachine(connection).getHostShell(); } + public static ProcessStreamBuffer processOutput(IProgressMonitor monitor, IHostShell hostShell, CommandResponseHandler cmdHandler, char[] ending) throws Exception { + if (hostShell == null) + throw new Exception("An error has occured while trying to run remote command!"); + + Lock lock = hostShell.getLock(); + lock.lock(); + ProcessStreamBuffer processBuffer = new ProcessStreamBuffer(); + + BufferedReader inbr = hostShell.getReader(false); + BufferedReader errbr = hostShell.getReader(true); + + boolean cancel = false; + while (!cancel) { + if(monitor.isCanceled()) { + cancel = true; + lock.unlock(); + throw new InterruptedException("User Cancelled"); + } + StringBuffer buffer = new StringBuffer(); + int c; + if (errbr != null) + while ((c = errbr.read()) != -1) { + char ch = (char) c; + buffer.append(ch); + if (Arrays.asList(ending).contains(ch)){ + String str = buffer.toString(); + processBuffer.addErrorLine(str); + System.out.println(str); + if (str.trim().equals(RemoteHelper.TERMINATOR)) { + break; + } + cmdHandler.response(str, true); + buffer.delete(0, buffer.length()); + } + } + if (inbr != null) + while ((c = inbr.read()) != -1) { + char ch = (char) c; + buffer.append(ch); + if (ch == '\n'){ + String str = buffer.toString(); + processBuffer.addOutputLine(str); + System.out.println(str); + if (str.trim().equals(RemoteHelper.TERMINATOR)) { + break; + } + cmdHandler.response(str, false); + buffer.delete(0, buffer.length()); + } + } + cancel = true; + } + lock.unlock(); + return processBuffer; + } + public static IHost getRemoteConnectionByName(String remoteConnection) { if (remoteConnection == null) return null; diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/RemoteMachine.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/RemoteMachine.java index ba925ca..52bc011 100644 --- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/RemoteMachine.java +++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/RemoteMachine.java @@ -1,6 +1,7 @@ package org.yocto.bc.remote.utils; import java.io.BufferedReader; +import java.io.InputStreamReader; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -18,6 +19,7 @@ import org.eclipse.rse.core.subsystems.ISubSystem; import org.eclipse.rse.internal.services.local.shells.LocalShellService; import org.eclipse.rse.services.clientserver.messages.SystemMessageException; import org.eclipse.rse.services.files.IFileService; +import org.eclipse.rse.services.shells.HostShellProcessAdapter; import org.eclipse.rse.services.shells.IHostShell; import org.eclipse.rse.services.shells.IShellService; import org.eclipse.rse.subsystems.files.core.servicesubsystem.IFileServiceSubSystem; @@ -42,56 +44,6 @@ public class RemoteMachine { public RemoteMachine(IHost connection) { setConnection(connection); } - private ProcessStreamBuffer processOutput(IHostShell shell, IProgressMonitor monitor) throws Exception { - if (shell == null) - throw new Exception("An error has occured while trying to run remote command!"); - ProcessStreamBuffer processBuffer = new ProcessStreamBuffer(); - - Lock lock = shell.getStandardOutputReader().getReaderLock(); - lock.lock(); - BufferedReader inbr = shell.getStandardOutputReader().getReader(); - BufferedReader errbr = shell.getStandardErrorReader().getReader(); - - boolean cancel = false; - while (!cancel) { - if(monitor.isCanceled()) { - cancel = true; - throw new InterruptedException("User Cancelled"); - } - StringBuffer buffer = new StringBuffer(); - int c; - if (errbr != null) - while ((c = errbr.read()) != -1) { - char ch = (char) c; - buffer.append(ch); - if (ch == '\n'){ - String str = buffer.toString(); - processBuffer.addErrorLine(str); - System.out.println(str); - if (str.trim().equals(RemoteHelper.TERMINATOR)) { - break; - } - buffer.delete(0, buffer.length()); - } - } - if (inbr != null) - while ((c = inbr.read()) != -1) { - char ch = (char) c; - buffer.append(ch); - if (ch == '\n'){ - String str = buffer.toString(); - processBuffer.addOutputLine(str); - System.out.println(str); - if (str.trim().equals(RemoteHelper.TERMINATOR)) { - break; - } - buffer.delete(0, buffer.length()); - } - } - cancel = true; - } - return processBuffer; - } public String[] prepareEnvString(IProgressMonitor monitor){ String[] env = null; @@ -123,13 +75,11 @@ public class RemoteMachine { IShellService shellService = getShellService(new SubProgressMonitor(monitor, 7)); -// HostShellProcessAdapter p = null; ProcessStreamBuffer buffer = null; try { SubProgressMonitor subMonitor = new SubProgressMonitor(monitor, 3); IHostShell hostShell = shellService.runCommand("", "env" + " ; echo " + RemoteHelper.TERMINATOR + "; exit;", new String[]{}, subMonitor); -// p = new HostShellProcessAdapter(hostShell); - buffer = processOutput(hostShell, subMonitor); + buffer = RemoteHelper.processOutput(subMonitor, hostShell, cmdHandler, new char[]{'\n'}); for(int i = 0; i < buffer.getOutputLines().size(); i++) { String out = buffer.getOutputLines().get(i); String[] tokens = out.split("="); @@ -141,9 +91,6 @@ public class RemoteMachine { environment.put(varName, varValue); } } catch (Exception e) { -// if (p != null) { -// p.destroy(); -// } e.printStackTrace(); } diff --git a/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/YoctoRunnableWithProgress.java b/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/YoctoRunnableWithProgress.java index 5aa6fd2..e748be7 100644 --- a/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/YoctoRunnableWithProgress.java +++ b/plugins/org.yocto.bc.ui/src/org/yocto/bc/remote/utils/YoctoRunnableWithProgress.java @@ -1,9 +1,7 @@ package org.yocto.bc.remote.utils; -import java.io.BufferedReader; import java.io.IOException; import java.lang.reflect.InvocationTargetException; -import java.util.concurrent.locks.Lock; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -100,70 +98,13 @@ public class YoctoRunnableWithProgress implements IRunnableWithProgress { public void run() { try { hostShell = RemoteHelper.runCommandRemote(this.connection, command, monitor); - command.setProcessBuffer(processOutput()); + command.setProcessBuffer(RemoteHelper.processOutput(monitor, hostShell, cmdHandler, new char[]{'\n', '\r'})); } catch (CoreException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } - private ProcessStreamBuffer processOutput() throws Exception { - if (hostShell == null) - throw new Exception("An error has occured while trying to run remote command!"); - monitor.beginTask(taskName, RemoteHelper.TOTALWORKLOAD); - Lock lock = hostShell.getStandardOutputReader().getReaderLock(); - lock.lock(); - ProcessStreamBuffer processBuffer = new ProcessStreamBuffer(); - BufferedReader inbr = hostShell.getStandardOutputReader().getReader(); - BufferedReader errbr = hostShell.getStandardErrorReader().getReader(); - boolean cancel = false; - while (!cancel) { - if(monitor.isCanceled()) { - cancel = true; - lock.unlock(); - throw new InterruptedException("User Cancelled"); - } - StringBuffer buffer = new StringBuffer(); - int c; - if (errbr != null) { - while ((c = errbr.read()) != -1) { - char ch = (char) c; - buffer.append(ch); - if (ch == '\n' || ch == '\r'){ - String str = buffer.toString(); - processBuffer.addOutputLine(str); - System.out.println(str); - if (ch == '\r') - reportProgress(str); - if (str.trim().equals(RemoteHelper.TERMINATOR)) { - break; - } - cmdHandler.response(str, false); - buffer.delete(0, buffer.length()); - } - } - } - if (inbr != null) { - while ((c = inbr.read()) != -1) { - char ch = (char) c; - buffer.append(ch); - if (ch == '\n'){ - String str = buffer.toString(); - processBuffer.addOutputLine(str); - System.out.println(str); - if (str.trim().equals(RemoteHelper.TERMINATOR)) { - break; - } - cmdHandler.response(str, false); - buffer.delete(0, buffer.length()); - } - } - } - cancel = true; - } - lock.unlock(); - return processBuffer; - } } private void updateMonitor(final int work){ -- 1.7.9.5 _______________________________________________ yocto mailing list yocto@yoctoproject.org https://lists.yoctoproject.org/listinfo/yocto