[Esbox-commits] r1029 - in branches/work_Petr: org.maemo.esbox.scratchbox.core/src/org/maemo/esbox/scratchbox/core/command org.maemo.esbox.scratchbox.sb2/src/org/maemo/esbox/internal/scratchbox/sb2/command

baranov at garage.maemo.org baranov at garage.maemo.org
Wed Dec 3 15:27:16 EET 2008


Author: baranov
Date: 2008-12-03 15:27:15 +0200 (Wed, 03 Dec 2008)
New Revision: 1029

Modified:
   branches/work_Petr/org.maemo.esbox.scratchbox.core/src/org/maemo/esbox/scratchbox/core/command/AbstractSDKCommand.java
   branches/work_Petr/org.maemo.esbox.scratchbox.sb2/src/org/maemo/esbox/internal/scratchbox/sb2/command/AbstractSb2Command.java
   branches/work_Petr/org.maemo.esbox.scratchbox.sb2/src/org/maemo/esbox/internal/scratchbox/sb2/command/MaemoRootstrapCommand.java
Log:
sb2 rootstrap installation processes write to console when they are stopped

Modified: branches/work_Petr/org.maemo.esbox.scratchbox.core/src/org/maemo/esbox/scratchbox/core/command/AbstractSDKCommand.java
===================================================================
--- branches/work_Petr/org.maemo.esbox.scratchbox.core/src/org/maemo/esbox/scratchbox/core/command/AbstractSDKCommand.java	2008-12-02 23:46:40 UTC (rev 1028)
+++ branches/work_Petr/org.maemo.esbox.scratchbox.core/src/org/maemo/esbox/scratchbox/core/command/AbstractSDKCommand.java	2008-12-03 13:27:15 UTC (rev 1029)
@@ -54,16 +54,5 @@
 	 */
 	public abstract String replaceScratchboxConfigCommand(String action,
 			String[] options) throws InvalidParameterException;
-	// {
-	// String sboxCommand;
-	//		
-	// if (sboxVersion == 1)
-	// sboxCommand = commandAbstractor.getPreferenceValue(
-	// SB1PreferenceConstants.SB1_SBOX_COMMAND);
-	// else
-	// sboxCommand = commandAbstractor.getPreferenceValue(
-	// SB2PreferenceConstants.SB2_CONFIG_COMMAND);
-	//
-	// return replaceScratchboxCommand(sboxCommand, action, options);
-	// }
+	
 }

Modified: branches/work_Petr/org.maemo.esbox.scratchbox.sb2/src/org/maemo/esbox/internal/scratchbox/sb2/command/AbstractSb2Command.java
===================================================================
--- branches/work_Petr/org.maemo.esbox.scratchbox.sb2/src/org/maemo/esbox/internal/scratchbox/sb2/command/AbstractSb2Command.java	2008-12-02 23:46:40 UTC (rev 1028)
+++ branches/work_Petr/org.maemo.esbox.scratchbox.sb2/src/org/maemo/esbox/internal/scratchbox/sb2/command/AbstractSb2Command.java	2008-12-03 13:27:15 UTC (rev 1029)
@@ -1,4 +1,4 @@
-/*******************************************************************************
+ /*******************************************************************************
  * Copyright (c) 2008 Nokia Corporation
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -10,21 +10,35 @@
  *******************************************************************************/
 package org.maemo.esbox.internal.scratchbox.sb2.command;
 
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.PrintStream;
+import java.security.InvalidParameterException;
+import java.util.Arrays;
+import java.util.List;
+
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.ui.console.MessageConsole;
 import org.maemo.esbox.internal.api.scratchbox.sb2.core.SB2PreferenceConstants;
+import org.maemo.esbox.internal.scratchbox.sb2.Activator;
 import org.maemo.esbox.scratchbox.core.command.AbstractSDKCommand;
+import org.maemo.mica.common.core.CoreConsoleManager;
 import org.maemo.mica.common.core.MicaException;
-import org.maemo.mica.common.core.process.*;
+import org.maemo.mica.common.core.Policy;
+import org.maemo.mica.common.core.process.IProcessLauncher;
+import org.maemo.mica.common.core.process.IProcessLauncherFactory;
+import org.maemo.mica.common.core.process.ProcessLauncherUtils;
 import org.maemo.mica.common.core.process.ProcessLauncherUtils.Results;
 import org.maemo.mica.common.core.sdk.commands.ICommandAbstractor;
 
-import java.security.InvalidParameterException;
-import java.util.Arrays;
-import java.util.List;
-
 public abstract class AbstractSb2Command extends AbstractSDKCommand {
-
 	private final IProcessLauncherFactory processLauncherFactory;
+	private static final String lineSeparator = System.getProperty("line.separator");
 	
 	public AbstractSb2Command(ICommandAbstractor commandAbstractor, IProcessLauncherFactory launcherFactory) {
 		super(commandAbstractor);
@@ -51,16 +65,7 @@
 		return replaceScratchboxCommand(sboxCommand, action, options);
 	}
 
-	protected Results runProcess(String...args) throws MicaException{
-		return runProcess(this.processLauncherFactory,args);
-	}
-	
-	protected Results runProcess( IProgressMonitor monitor,String...args) throws MicaException{
-		List<String> cli = Arrays.asList(args);
-		IProcessLauncher launcher = processLauncherFactory.createProcessLauncher(null, cli,null);
-		return ProcessLauncherUtils.launchAndReadStandardStreams(launcher, monitor);
-	}
-	
+
 	/**
 	 * run process in host environment
 	 * @param processLauncherFactory
@@ -72,4 +77,114 @@
 		return ProcessLauncherUtils.launchAndReadStandardStreams(processLauncherFactory, Arrays.asList(args));
 	}
 	
+	protected Results runProcess(String...args) throws MicaException{
+		Results results = runProcess(this.processLauncherFactory,args);
+		return results;
+	}
+	
+	protected Results runProcess( IProgressMonitor monitor,String...args) throws MicaException{
+		final List<String> cli = Arrays.asList(args);
+		final String cliStr = toCli(args);
+		
+		final IProcessLauncher launcher = processLauncherFactory.createProcessLauncher(null, cli,null);
+		final MessageConsole console = getConsole();
+		final Process process = launcher.createProcess();
+		
+		Job job = createJob(monitor, cliStr, process);
+		
+		String inputStr = toString(process.getInputStream());
+		String errStr = toString(process.getErrorStream());
+		int exitCode = process.exitValue();
+		
+		printToConsole(cliStr, console, inputStr, errStr);
+		if(job.getResult()!=null&&job.getResult().getSeverity()==IStatus.OK){
+			return new Results(exitCode,inputStr,errStr);
+		}
+		return null;
+	}
+
+	//--private
+	private Job createJob(IProgressMonitor monitor, final String cliStr,
+			final Process process) {
+		Job job = new Job(cliStr){
+			@Override
+			protected IStatus run(IProgressMonitor monitor) {
+				monitor.beginTask(cliStr, 100);
+				monitor.subTask(cliStr);
+				try{
+					try{
+						process.waitFor();
+						monitor.worked(100);	
+					}catch(InterruptedException e){
+						return Status.CANCEL_STATUS;
+					}
+				}finally{
+					monitor.done();
+				}
+				return Status.OK_STATUS;
+			}
+
+			@Override
+			protected void canceling() {
+				super.canceling();
+				
+			}
+			
+		};
+		job.schedule();
+		try{
+			while(job.getResult()==null){
+				Thread.sleep(500);
+				if(monitor.isCanceled()){
+					process.destroy();
+					job.cancel();
+				}
+			}
+		}catch (InterruptedException e){
+			// write to console
+		}
+		return job;
+	}
+
+	private void printToConsole(final String cliStr,
+			final MessageConsole console, String inputStr, String errStr) {
+		PrintStream stream = new PrintStream(console.newMessageStream());
+		stream.println("running:"+cliStr);
+		stream.println(inputStr);
+		if(errStr.length()!=0){
+			stream.println("Errors:");
+			stream.println(errStr);
+		}
+	}
+	
+	private String toCli(String[] args) {
+		String result = "";
+		for (int i = 0; i < args.length; i++) {
+			result += " "+args[i];
+		}
+		return result;
+	}
+
+	private String toString(InputStream stream) {
+		BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
+		String result="";
+		String line=null;
+		try{
+			while ((line = reader.readLine()) != null) {
+				result += line+lineSeparator;
+			}
+		}catch(IOException e){
+			Activator.getErrorLogger().log(IStatus.WARNING, "Problem while reading result", e);
+		}
+		return result;
+	}
+	
+	private MessageConsole getConsole() {
+		if(console==null){
+			console=CoreConsoleManager.getInstance().getConsole(true, null, "SB2 command console");
+		}
+		return console;
+	}
+
+	
 }

Modified: branches/work_Petr/org.maemo.esbox.scratchbox.sb2/src/org/maemo/esbox/internal/scratchbox/sb2/command/MaemoRootstrapCommand.java
===================================================================
--- branches/work_Petr/org.maemo.esbox.scratchbox.sb2/src/org/maemo/esbox/internal/scratchbox/sb2/command/MaemoRootstrapCommand.java	2008-12-02 23:46:40 UTC (rev 1028)
+++ branches/work_Petr/org.maemo.esbox.scratchbox.sb2/src/org/maemo/esbox/internal/scratchbox/sb2/command/MaemoRootstrapCommand.java	2008-12-03 13:27:15 UTC (rev 1029)
@@ -160,6 +160,12 @@
 		
 	}
 
+	/**
+	 * run mameo-roostraps new <name>
+	 * @param name of the new rootstrap 
+	 * @return
+	 * @throws MicaException
+	 */
 	public boolean newRootstrap(String name) throws MicaException {
 		Results result =  runProcess(MAEMO_ROOTSTRAP,COMMAND_NEW,name);
 		return result.exitCode==0;



More information about the Esbox-commits mailing list