[yocto] [PATCH 6/8] Refactor RemoteApplication implementation
Ioana Grigoropol
ioanax.grigoropol at intel.com
Tue Apr 30 07:36:29 PDT 2013
- remove references that are not used for running remote commands:
- remote directory where the command will be ran
- remove environment on remote host
- rename class to RemoteShellExec since it is a wrapper over a remote shell execution of a command
Signed-off-by: Ioana Grigoropol <ioanax.grigoropol at intel.com>
---
.../sdk/remotetools/actions/OprofileModel.java | 18 +--
.../sdk/remotetools/actions/PowertopModel.java | 25 +---
.../yocto/sdk/remotetools/actions/Ust2Model.java | 19 ++-
.../sdk/remotetools/remote/RemoteApplication.java | 155 --------------------
.../sdk/remotetools/remote/RemoteShellExec.java | 149 +++++++++++++++++++
5 files changed, 174 insertions(+), 192 deletions(-)
delete mode 100644 plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/remote/RemoteApplication.java
create mode 100644 plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/remote/RemoteShellExec.java
diff --git a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/OprofileModel.java b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/OprofileModel.java
index 794a101..d11c343 100644
--- a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/OprofileModel.java
+++ b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/OprofileModel.java
@@ -26,7 +26,7 @@ import org.yocto.sdk.ide.preferences.PreferenceConstants;
import org.yocto.sdk.remotetools.CommonHelper;
import org.yocto.sdk.remotetools.LocalJob;
import org.yocto.sdk.remotetools.Messages;
-import org.yocto.sdk.remotetools.remote.RemoteApplication;
+import org.yocto.sdk.remotetools.remote.RemoteShellExec;
public class OprofileModel extends BaseModel {
@@ -45,17 +45,17 @@ public class OprofileModel extends BaseModel {
private void startServer(IProgressMonitor monitor) throws Exception {
int exit_code;
- RemoteApplication app = new RemoteApplication(host, null, remoteExec, null);
+ RemoteShellExec exec = new RemoteShellExec(host, remoteExec);
String args="start -d oprofile-server";
try {
monitor.beginTask("Starting oprofile-server", 2);
//starting oprofile-server
- app.start(null,args,monitor);
+ exec.start(null,args,monitor);
monitor.worked(1);
- exit_code=app.waitFor(monitor);
- app.terminate();
+ exit_code = exec.waitFor(monitor);
+ exec.terminate();
if(exit_code!=0) {
throw new RuntimeException("Starting oprofile-server failed with exit code " + new Integer(exit_code).toString());
}
@@ -66,15 +66,15 @@ public class OprofileModel extends BaseModel {
private void stopServer(IProgressMonitor monitor) throws Exception {
- RemoteApplication app = new RemoteApplication(host, null, remoteExec, null);
+ RemoteShellExec exec = new RemoteShellExec(host, remoteExec);
String args = "stop -d oprofile-server";
try {
monitor.beginTask("Stopping oprofile-server", 2);
- app.start(null,args,monitor);
+ exec.start(null, args, monitor);
monitor.worked(1);
//no cancel for stop server
- app.waitFor(null);
- app.terminate();
+ exec.waitFor(null);
+ exec.terminate();
}finally {
monitor.done();
}
diff --git a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/PowertopModel.java b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/PowertopModel.java
index ae1f8bf..37af342 100644
--- a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/PowertopModel.java
+++ b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/PowertopModel.java
@@ -24,7 +24,7 @@ import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.yocto.sdk.remotetools.RSEHelper;
-import org.yocto.sdk.remotetools.remote.RemoteApplication;
+import org.yocto.sdk.remotetools.remote.RemoteShellExec;
import org.yocto.sdk.remotetools.views.BaseFileView;
public class PowertopModel extends BaseModel {
@@ -59,22 +59,11 @@ public class PowertopModel extends BaseModel {
private void generateData(IProgressMonitor monitor) throws Exception {
int exit_code;
- RemoteApplication app = new RemoteApplication(host, null, remoteExec, null);
- String currentDate=new SimpleDateFormat("yyyyMMddHHmmssSSS").format(Calendar.getInstance().getTime()).toString();
+ RemoteShellExec exec = new RemoteShellExec(host, remoteExec);
+ String currentDate = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(Calendar.getInstance().getTime()).toString();
remoteFile = new String(REMOTE_FILE_PREFIX + currentDate);
localFile = new String(remoteFile + LOCAL_FILE_SUFFIX);
- ArrayList <String> param= new ArrayList <String>();
- param.add(remoteExec);
- param.add("start");
- param.add("-l");
- param.add(remoteFile);
- param.add("powertop");
- param.add("-d");
- param.add("-t");
- param.add(time.toString());
- if(showpid)
- param.add("-p");
String args = "start -l " + remoteFile + " powertop -d -t " + time.toString();
if(showpid)
args += " -p";
@@ -82,11 +71,11 @@ public class PowertopModel extends BaseModel {
try {
monitor.beginTask("Starting powertop", 2);
//starting oprofile-server
- app.start(null,args,monitor);
+ exec.start(null,args,monitor);
monitor.worked(1);
- exit_code=app.waitFor(monitor);
- app.terminate();
- if(exit_code!=0) {
+ exit_code = exec.waitFor(monitor);
+ exec.terminate();
+ if(exit_code != 0) {
throw new Exception("Starting powertop failed with exit code " + new Integer(exit_code).toString());
}
}finally {
diff --git a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/Ust2Model.java b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/Ust2Model.java
index f767965..ce58546 100644
--- a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/Ust2Model.java
+++ b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/actions/Ust2Model.java
@@ -26,7 +26,7 @@ import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.rse.core.model.IHost;
import org.eclipse.ui.IWorkbenchWindow;
-import org.yocto.sdk.remotetools.remote.RemoteApplication;
+import org.yocto.sdk.remotetools.remote.RemoteShellExec;
public class Ust2Model extends BaseModel {
@@ -57,26 +57,25 @@ public class Ust2Model extends BaseModel {
private void generateData(IProgressMonitor monitor) throws Exception {
int exit_code;
- RemoteApplication app = new RemoteApplication(host, null, remoteExec, null);
-
+ RemoteShellExec exec = new RemoteShellExec(host, remoteExec);
try {
String temp;
int idx;
monitor.beginTask("Getting remote ust2 trace", 2);
//starting usttrace
- app.start(null,trace_loc,monitor);
+ exec.start(null, trace_loc, monitor);
monitor.worked(1);
- BufferedReader in=new BufferedReader(new InputStreamReader(app.getInputStream()));
- while((temp=in.readLine())!=null) {
- idx=temp.indexOf(DATAFILE_PREFIX);
- if(idx!=-1) {
+ BufferedReader in = new BufferedReader(new InputStreamReader(exec.getInputStream()));
+ while((temp = in.readLine())!=null) {
+ idx = temp.indexOf(DATAFILE_PREFIX);
+ if(idx != -1) {
remoteFile = temp.substring(idx + DATAFILE_PREFIX.length());
break;
}
}
- exit_code=app.waitFor(monitor);
- app.terminate();
+ exit_code = exec.waitFor(monitor);
+ exec.terminate();
if(exit_code!=0) {
throw new Exception("Getting remote ust2 trace failed with exit code " + new Integer(exit_code).toString());
}
diff --git a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/remote/RemoteApplication.java b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/remote/RemoteApplication.java
deleted file mode 100644
index c8ae9c5..0000000
--- a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/remote/RemoteApplication.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Intel Corporation.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Intel - initial API and implementation
- *******************************************************************************/
-package org.yocto.sdk.remotetools.remote;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-//import org.eclipse.tcf.protocol.IToken;
-//import org.eclipse.tcf.services.IStreams;
-//import org.eclipse.tcf.services.IProcesses;
-//import org.eclipse.tcf.util.TCFTask;
-import org.eclipse.rse.core.model.IHost;
-import org.yocto.sdk.remotetools.RSEHelper;
-
-public class RemoteApplication {
-
- public static final int
- STATE_NULL = 0,
- STATE_RUNNING = 1,
- STATE_EXITED = 2;
-
- private String directory;
- private String command;
- private String []environment;
- private IHost target;
-
- private InputStream fInStream;
- private OutputStream fOutStream;
- private InputStream fErrStream;
- private Process remoteShellProcess;
-
- private int exit_code=0;
- private int status=STATE_NULL;
-
- private String RETURN_VALUE_TAG = "org.yocto.sdk.remotetools.RVTAG";
- private String RETURN_VALUE_CMD = ";echo \"" + RETURN_VALUE_TAG + "$?\"";
-
- public RemoteApplication(IHost target,
- String directory,
- String command,
- String[] environment) {
- assert(target!=null);
- this.target = target;
- this.directory=directory;
- this.command=command;
- this.environment=environment;
- }
-
- public int getStatus()
- {
- return status;
- }
-
- public int getExitCode()
- {
- return exit_code;
- }
-
- private void reset() {
- fInStream=null;
- fOutStream=null;
- fErrStream=null;
-
- remoteShellProcess=null;
- exit_code=0;
- status=STATE_NULL;
- }
-
- public InputStream getInputStream() {
- return fInStream;
- }
-
- public OutputStream getOutputStream() {
- return fOutStream;
- }
-
- public InputStream getErrStream() {
- return fErrStream;
- }
-
- public synchronized void start(String prelaunchCmd, String argument, IProgressMonitor monitor) throws Exception {
- if(status==STATE_RUNNING)
- return;
-
- reset();
- remoteShellProcess = RSEHelper.remoteShellExec(this.target, prelaunchCmd, this.command, argument==null?RETURN_VALUE_CMD:argument+RETURN_VALUE_CMD, monitor);
- fInStream = remoteShellProcess.getInputStream();
- fOutStream = remoteShellProcess.getOutputStream();
- fErrStream = remoteShellProcess.getErrorStream();
- status=STATE_RUNNING;
- }
-
- public synchronized void terminate() throws Exception {
-
- if(status != STATE_RUNNING || remoteShellProcess != null)
- return;
-
- remoteShellProcess.destroy();
- reset();
- }
-
- public int waitFor(IProgressMonitor monitor) throws InterruptedException {
- while(status==STATE_RUNNING) {
- if(monitor!=null) {
- if(monitor.isCanceled()) {
- throw new InterruptedException("User Cancelled");
- }
- }
-
- try {
- remoteShellProcess.waitFor();
- }catch(InterruptedException e){
- //get the return value
- try {
- if(fInStream.available() != 0) {
- BufferedReader in=new BufferedReader(new InputStreamReader(fInStream));
- String thisline;
- int idx;
- while((thisline=in.readLine()) != null) {
- if(thisline.indexOf(RETURN_VALUE_CMD)==-1) {
- idx=thisline.indexOf(RETURN_VALUE_TAG);
- if(idx != -1) {
- try {
- exit_code=(new Integer(thisline.substring(idx+RETURN_VALUE_TAG.length()))).intValue();
- }catch(NumberFormatException e2) {
- //
- }
- break;
- }
- }
- }
- }
- }catch(IOException e1) {
- //do nothing
- }
- }finally {
- status=STATE_EXITED;
- }
- }
- return exit_code;
- }
-}
-
diff --git a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/remote/RemoteShellExec.java b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/remote/RemoteShellExec.java
new file mode 100644
index 0000000..bb4859d
--- /dev/null
+++ b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/remote/RemoteShellExec.java
@@ -0,0 +1,149 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Intel Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Intel - initial API and implementation
+ *******************************************************************************/
+package org.yocto.sdk.remotetools.remote;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+//import org.eclipse.tcf.protocol.IToken;
+//import org.eclipse.tcf.services.IStreams;
+//import org.eclipse.tcf.services.IProcesses;
+//import org.eclipse.tcf.util.TCFTask;
+import org.eclipse.rse.core.model.IHost;
+import org.yocto.sdk.remotetools.RSEHelper;
+
+public class RemoteShellExec {
+
+ public static final int
+ STATE_NULL = 0,
+ STATE_RUNNING = 1,
+ STATE_EXITED = 2;
+
+ private String command;
+ private IHost host;
+
+ private InputStream fInStream;
+ private OutputStream fOutStream;
+ private InputStream fErrStream;
+ private Process remoteShellProcess;
+
+ private int exit_code=0;
+ private int status=STATE_NULL;
+
+ private String RETURN_VALUE_TAG = "org.yocto.sdk.remotetools.RVTAG";
+ private String RETURN_VALUE_CMD = ";echo \"" + RETURN_VALUE_TAG + "$?\"";
+
+ public RemoteShellExec(IHost host, String command) {
+ assert(host != null);
+ this.host = host;
+ this.command=command;
+ }
+
+ public int getStatus()
+ {
+ return status;
+ }
+
+ public int getExitCode()
+ {
+ return exit_code;
+ }
+
+ private void reset() {
+ fInStream=null;
+ fOutStream=null;
+ fErrStream=null;
+
+ remoteShellProcess=null;
+ exit_code=0;
+ status=STATE_NULL;
+ }
+
+ public InputStream getInputStream() {
+ return fInStream;
+ }
+
+ public OutputStream getOutputStream() {
+ return fOutStream;
+ }
+
+ public InputStream getErrStream() {
+ return fErrStream;
+ }
+
+ public synchronized void start(String prelaunchCmd, String argument, IProgressMonitor monitor) throws Exception {
+ if(status == STATE_RUNNING)
+ return;
+
+ reset();
+ argument = (argument == null ? RETURN_VALUE_CMD : argument + RETURN_VALUE_CMD);
+ remoteShellProcess = RSEHelper.remoteShellExec(this.host, prelaunchCmd, this.command, argument, monitor);
+ fInStream = remoteShellProcess.getInputStream();
+ fOutStream = remoteShellProcess.getOutputStream();
+ fErrStream = remoteShellProcess.getErrorStream();
+ status = STATE_RUNNING;
+ }
+
+ public synchronized void terminate() throws Exception {
+
+ if(status != STATE_RUNNING || remoteShellProcess != null)
+ return;
+
+ remoteShellProcess.destroy();
+ reset();
+ }
+
+ public int waitFor(IProgressMonitor monitor) throws InterruptedException {
+ while(status==STATE_RUNNING) {
+ if(monitor!=null) {
+ if(monitor.isCanceled()) {
+ throw new InterruptedException("User Cancelled");
+ }
+ }
+
+ try {
+ remoteShellProcess.waitFor();
+ }catch(InterruptedException e){
+ //get the return value
+ try {
+ if(fInStream.available() != 0) {
+ BufferedReader in=new BufferedReader(new InputStreamReader(fInStream));
+ String thisline;
+ int idx;
+ while((thisline=in.readLine()) != null) {
+ if(thisline.indexOf(RETURN_VALUE_CMD)==-1) {
+ idx=thisline.indexOf(RETURN_VALUE_TAG);
+ if(idx != -1) {
+ try {
+ exit_code=(new Integer(thisline.substring(idx+RETURN_VALUE_TAG.length()))).intValue();
+ }catch(NumberFormatException e2) {
+ //
+ }
+ break;
+ }
+ }
+ }
+ }
+ }catch(IOException e1) {
+ //do nothing
+ }
+ }finally {
+ status=STATE_EXITED;
+ }
+ }
+ return exit_code;
+ }
+}
+
--
1.7.9.5
More information about the yocto
mailing list