[Esbox-commits] r1557 - in branches/work_Ed: org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences org.maemo.esbox.vm/src/org/maemo/esbox/internal/api/vm/ui/preferences org.maemo.esbox.vm/src/org/maemo/esbox/internal/vm/ui/actions

eswartz at garage.maemo.org eswartz at garage.maemo.org
Fri May 8 02:08:55 EEST 2009


Author: eswartz
Date: 2009-05-08 02:08:54 +0300 (Fri, 08 May 2009)
New Revision: 1557

Modified:
   branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/BuildMachinePreferencePage.java
   branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/ValidateMachineRunner.java
   branches/work_Ed/org.maemo.esbox.vm/src/org/maemo/esbox/internal/api/vm/ui/preferences/CommonVirtualMachineSettingsPreferencePage.java
   branches/work_Ed/org.maemo.esbox.vm/src/org/maemo/esbox/internal/vm/ui/actions/ValidateVirtualMachineCommand.java
Log:
Move the virtual machine validation into a dialog.

Modified: branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/BuildMachinePreferencePage.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/BuildMachinePreferencePage.java	2009-05-07 22:00:37 UTC (rev 1556)
+++ branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/BuildMachinePreferencePage.java	2009-05-07 23:08:54 UTC (rev 1557)
@@ -60,6 +60,7 @@
 import org.maemo.mica.common.core.machine.MachineRegistry;
 import org.maemo.mica.common.core.sdk.SDKFactory;
 import org.maemo.mica.common.ui.common.PixelConverter;
+import org.maemo.mica.common.ui.dialogs.StyledTextProgressDialog;
 
 /**
  * Configure virtual machine preferences.  This allows the user to select which
@@ -520,11 +521,19 @@
 					Display.getDefault().asyncExec(new Runnable() {
 
 						public void run() {
-							ProgressMonitorDialog dialog = new ProgressMonitorDialog(getShell());
+							StyledTextProgressDialog dialog = new StyledTextProgressDialog(
+									getShell(), 
+									"Virtual Machine Validation");
+							
+							dialog.open();
+							
+							ValidateMachineRunner runner = new ValidateMachineRunner(
+									dialog.getProgressReporter(),
+									selectedMachine);
 							try {
-								dialog.run(false, true, new ValidateMachineRunner(getShell(), selectedMachine));
+								dialog.run(true, true, runner);
 							} catch (Exception e) {
-								UIActivator.getErrorLogger().logAndShowError("Unexpected error when testing machine", e);
+								UIActivator.getErrorLogger().logAndShowError("Unexpected exception running tests", e);
 							}
 						}
 						

Modified: branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/ValidateMachineRunner.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/ValidateMachineRunner.java	2009-05-07 22:00:37 UTC (rev 1556)
+++ branches/work_Ed/org.maemo.esbox.maemosdk.ui/src/org/maemo/esbox/internal/api/maemosdk/ui/preferences/ValidateMachineRunner.java	2009-05-07 23:08:54 UTC (rev 1557)
@@ -11,27 +11,47 @@
 
 package org.maemo.esbox.internal.api.maemosdk.ui.preferences;
 
-import org.eclipse.core.filesystem.*;
+import java.io.OutputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.filesystem.EFS;
+import org.eclipse.core.filesystem.IFileInfo;
+import org.eclipse.core.filesystem.IFileStore;
 import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.*;
-import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.SubProgressMonitor;
 import org.eclipse.jface.dialogs.ProgressMonitorDialog;
 import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.console.MessageConsole;
 import org.maemo.esbox.internal.maemosdk.ui.UIActivator;
-import org.maemo.mica.common.core.*;
-import org.maemo.mica.common.core.machine.*;
-import org.maemo.mica.common.core.process.*;
+import org.maemo.mica.common.core.IProgressReporter;
+import org.maemo.mica.common.core.MicaCanceledException;
+import org.maemo.mica.common.core.MicaException;
+import org.maemo.mica.common.core.Policy;
+import org.maemo.mica.common.core.ProgressReporterStreamTextMonitor;
+import org.maemo.mica.common.core.machine.IMachine;
+import org.maemo.mica.common.core.machine.ISharedFilesystemProvider;
+import org.maemo.mica.common.core.machine.ISharedFolder;
+import org.maemo.mica.common.core.machine.MachineUtils;
+import org.maemo.mica.common.core.process.CommandLineArguments;
+import org.maemo.mica.common.core.process.IProcessLauncher;
+import org.maemo.mica.common.core.process.IProcessLauncherFactory;
+import org.maemo.mica.common.core.process.IStreamMonitor;
+import org.maemo.mica.common.core.process.ProcessLauncherCreator;
+import org.maemo.mica.common.core.process.ProcessLauncherUtils;
 import org.maemo.mica.common.core.sdk.ISDKTarget;
 import org.maemo.mica.common.core.sdk.SDKFactory;
 
-import java.io.OutputStream;
-import java.lang.reflect.InvocationTargetException;
-import java.text.MessageFormat;
-import java.util.*;
-
 /**
  * This class validates that a machine is properly configured.
  * @author eswartz
@@ -40,43 +60,36 @@
 public class ValidateMachineRunner implements IRunnableWithProgress {
 
 	private IMachine machine;
+	private final IProgressReporter reporter;
 
-	public ValidateMachineRunner(Shell shell, IMachine machine) {
-		this.shell = shell;
+	public ValidateMachineRunner(IProgressReporter reporter,
+			IMachine machine) {
+		if (reporter == null || machine == null)
+			throw new NullPointerException();
+		this.reporter = reporter;
 		this.machine = machine;
 	}
 	
 	private Shell shell;
 
 	protected void fail(final String msg, final Object... param) {
-		Display.getDefault().syncExec(new Runnable() {
-
-			public void run() {
-				MessageDialog.openError(shell, "Validation Failure", MessageFormat.format(msg, param));
-			}
-			
-		});
+		reporter.log(UIActivator.createErrorStatus(
+				MessageFormat.format(msg, param), null));
 	}
 	
 	protected void info(final String msg, final Object... param) {
-		Display.getDefault().syncExec(new Runnable() {
-
-			public void run() {
-				MessageDialog.openInformation(shell, "Validation Information", MessageFormat.format(msg, param));
-			}
-			
-		});
+		reporter.logInfo(MessageFormat.format(msg, param));
 	}
 	
 	protected void warn(final String msg, final Object... param) {
-		Display.getDefault().syncExec(new Runnable() {
-
-			public void run() {
-				MessageDialog.openWarning(shell, "Validation Information", MessageFormat.format(msg, param));
-			}
-			
-		});
+		reporter.log(UIActivator.createStatus(IStatus.WARNING,
+				MessageFormat.format(msg, param), null));
 	}
+	
+	protected void step(IProgressMonitor monitor, String msg) {
+		monitor.subTask(msg);
+		reporter.logInfo(msg);
+	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.operation.IRunnableWithProgress#run(org.eclipse.core.runtime.IProgressMonitor)
@@ -133,31 +146,26 @@
 	 */
 	private boolean testProcessLaunching(final IMachine machine, IProgressMonitor monitor) {
 		monitor.beginTask("", 1);
-		monitor.subTask("Testing process launching");
+		step(monitor, "Testing process launching");
 		
 		// check the process launcher
 		IProcessLauncherFactory processLauncherFactory = machine.getProcessLauncherFactory();
 		IProcessLauncher processLauncher = ProcessLauncherCreator.createProcessLauncher(processLauncherFactory, 
 				"ls " + machine.getUserHome());
-		MessageConsole console = CoreConsoleManager.getInstance().getConsole(
-				true, null, "Remote "+machine.getUserHome()+" directory listing");
 		
-		Process process;
+		reporter.logInfo(MessageFormat.format("Launching ''{0}''", CommandLineArguments.toCommandLine(processLauncher.getLaunchCommandArguments())));
 		try {
-			process = processLauncher.createProcess();
+			ProcessLauncherUtils.launchAndMonitorStandardStreams(processLauncher, 
+				new IStreamMonitor[] {
+					new ProgressReporterStreamTextMonitor(reporter)
+				},
+				monitor);
 		} catch (MicaException e) {
 			fail("Could not run 'ls' on " + machine.getUserHome() + " directory.\nIf SSH connections to machine are failing, ensure the \nthat the virtual machine has booted properly and is running an SSH daemon:\n{0}", 
 					e);
 			return false;
 		}
-		processLauncher.redirectToConsole(console);
 		
-		try {
-			process.waitFor();
-		} catch (InterruptedException e) {
-					
-		}
-		
 		return true;
 	}
 
@@ -167,7 +175,7 @@
 	 */
 	private boolean testBasicFileSystem(final IMachine machine, IProgressMonitor monitor) {
 		monitor.beginTask("", 2);
-		monitor.subTask("Testing basic filesystem access");
+		step(monitor, "Testing basic filesystem access");
 		
 		// check the basic filesystem access
 		IFileStore store = machine.getFileSystemAccess().getFileStore(machine.getUserHome());
@@ -204,14 +212,14 @@
 		
 		List<ISharedFolder> sharedFolders = sharedFilesystemProvider.getSharedFolders();
 		monitor.beginTask("", sharedFolders.size() + 1);
-		monitor.subTask("Checking shared folders");
+		step(monitor, "Checking shared folders");
 		
 		// ping them all
 		IStatus status = machine.ensureSharesMounted(new SubProgressMonitor(monitor, 1));
 		if (status.getSeverity() == IStatus.WARNING)
-			UIActivator.getErrorLogger().show(status);
+			reporter.log(status);
 		else if (status.getSeverity() == IStatus.ERROR) {
-			UIActivator.getErrorLogger().show(status);
+//			reporter.log(status);
 			return false;
 		}
 		
@@ -233,7 +241,7 @@
 		
 		// check the shared folder
 		monitor.beginTask("", 5);
-		monitor.subTask("Checking " + shared + " -> " + mounted);
+		step(monitor, "Checking " + shared + " -> " + mounted);
 		
 		// look at the actual shared folder ("local" from the POV of who provides the share)
 		IFileStore shareProviderStore = share.isHostProvidedShare() 
@@ -356,7 +364,7 @@
 		IFileStore remoteStore;
 		
 		monitor.beginTask("", 2);
-		monitor.subTask("Testing visibility of shared folders in installed targets");
+		step(monitor, "Testing visibility of shared folders in installed targets");
 		
 		SDKFactory.getInstance().waitForRefreshComplete(new SubProgressMonitor(monitor,  1));
 		ISDKTarget[] sdkTargets = getMachineProvidedTargets();

Modified: branches/work_Ed/org.maemo.esbox.vm/src/org/maemo/esbox/internal/api/vm/ui/preferences/CommonVirtualMachineSettingsPreferencePage.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.vm/src/org/maemo/esbox/internal/api/vm/ui/preferences/CommonVirtualMachineSettingsPreferencePage.java	2009-05-07 22:00:37 UTC (rev 1556)
+++ branches/work_Ed/org.maemo.esbox.vm/src/org/maemo/esbox/internal/api/vm/ui/preferences/CommonVirtualMachineSettingsPreferencePage.java	2009-05-07 23:08:54 UTC (rev 1557)
@@ -11,11 +11,12 @@
 
 package org.maemo.esbox.internal.api.vm.ui.preferences;
 
+import java.lang.reflect.InvocationTargetException;
 import java.net.InetAddress;
 
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.preference.IntegerFieldEditor;
 import org.eclipse.jface.preference.StringFieldEditor;
@@ -23,18 +24,16 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
 import org.maemo.esbox.internal.vm.Activator;
 import org.maemo.esbox.vm.core.IVirtualMachineConfiguration;
 import org.maemo.esbox.vm.core.VirtualMachinePreferenceConstants;
 import org.maemo.mica.common.core.PasswordStorage;
 import org.maemo.mica.common.ui.StyledTextProgressReporter;
+import org.maemo.mica.common.ui.dialogs.StyledTextProgressDialog;
 import org.maemo.mica.common.ui.preferences.BaseComposableFieldEditorPreferencePage;
 
 /**
@@ -45,81 +44,6 @@
  */
 public class CommonVirtualMachineSettingsPreferencePage extends BaseComposableFieldEditorPreferencePage 
 	implements IVirtualMachineSettingsPreferencePage {
-	/**
-	 * @author eswartz
-	 *
-	 */
-	private static class StyledTextProgressDialog extends Dialog {
-		private StyledTextProgressReporter reporter;
-		private final String title;
-		/**
-		 * @param parent
-		 * @param title 
-		 */
-		private StyledTextProgressDialog(Shell parent, String title) {
-			super(parent);
-			setShellStyle(getShellStyle() | SWT.RESIZE);
-			this.title = title;
-			setBlockOnOpen(false);
-		}
-
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
-		 */
-		@Override
-		protected void configureShell(Shell newShell) {
-			super.configureShell(newShell);
-			newShell.setText(title);
-			newShell.setCursor(newShell.getDisplay().getSystemCursor(SWT.CURSOR_WAIT));
-			
-		}
-		
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.dialogs.Dialog#getInitialSize()
-		 */
-		@Override
-		protected Point getInitialSize() {
-			return new Point(500, 300);
-		}
-		
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.dialogs.ProgressMonitorDialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
-		 */
-		@Override
-		protected void createButtonsForButtonBar(Composite parent) {
-			super.createButtonsForButtonBar(parent);
-		}
-		
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
-		 */
-		@Override
-		protected Control createDialogArea(Composite parent) {
-			Composite composite = (Composite) super.createDialogArea(parent);
-			
-			reporter = new StyledTextProgressReporter(composite);
-			GridDataFactory.fillDefaults().grab(true, true).applyTo(
-					reporter.getStyledText());
-			
-			return composite;
-		}
-
-		/**
-		 * Get the progress reporter
-		 * @return
-		 */
-		public StyledTextProgressReporter getProgressReporter() {
-			return reporter;
-		}
-		
-		public void done() {
-			getButton(IDialogConstants.OK_ID).setEnabled(true);
-			getButton(IDialogConstants.CANCEL_ID).setEnabled(false);
-			getShell().setCursor(null);
-		}
-	}
-	
-	
 	private StringFieldEditor feUserName;
 	private StringFieldEditor feUserPassword;
 	private AddressFieldEditor feSshTargetAddr;
@@ -326,12 +250,17 @@
 		
 		final StyledTextProgressDialog dialog = new StyledTextProgressDialog(
 				getShell(), "Configuring network...");
-		dialog.open();  // no block
-		
+
+		// open to ensure we have the reporter
+		dialog.open();
+
 		try {
-			doConfigureNetwork(dialog.getProgressReporter());
-			
-			dialog.done();
+			dialog.run(true, true, new IRunnableWithProgress() {
+				public void run(IProgressMonitor monitor)
+						throws InvocationTargetException, InterruptedException {
+					doConfigureNetwork(dialog.getProgressReporter());
+				}
+			});
 		} catch (Exception e) {
 			Activator.getErrorLogger().logAndShowError("Unexpected error configuring network defaults", e);
 		}

Modified: branches/work_Ed/org.maemo.esbox.vm/src/org/maemo/esbox/internal/vm/ui/actions/ValidateVirtualMachineCommand.java
===================================================================
--- branches/work_Ed/org.maemo.esbox.vm/src/org/maemo/esbox/internal/vm/ui/actions/ValidateVirtualMachineCommand.java	2009-05-07 22:00:37 UTC (rev 1556)
+++ branches/work_Ed/org.maemo.esbox.vm/src/org/maemo/esbox/internal/vm/ui/actions/ValidateVirtualMachineCommand.java	2009-05-07 23:08:54 UTC (rev 1557)
@@ -11,17 +11,22 @@
 
 package org.maemo.esbox.internal.vm.ui.actions;
 
-import org.eclipse.core.commands.*;
-import org.eclipse.core.runtime.*;
+import java.text.MessageFormat;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
 import org.maemo.esbox.internal.api.maemosdk.ui.preferences.ValidateMachineRunner;
 import org.maemo.esbox.internal.vm.Activator;
-import org.maemo.mica.common.core.machine.*;
+import org.maemo.mica.common.core.machine.IBuildMachine;
+import org.maemo.mica.common.core.machine.MachineRegistry;
+import org.maemo.mica.common.ui.dialogs.StyledTextProgressDialog;
 
-import java.text.MessageFormat;
-
 /**
  * @author eswartz
  *
@@ -40,16 +45,6 @@
 		});
 	}
 	
-	protected void info(final String msg, final Object... param) {
-		Display.getDefault().syncExec(new Runnable() {
-
-			public void run() {
-				MessageDialog.openInformation(getShell(), "Validation Information", MessageFormat.format(msg, param));
-			}
-			
-		});
-	}
-	
 	/**
 	 * @return
 	 */
@@ -63,15 +58,23 @@
 	public Object execute(ExecutionEvent event) throws ExecutionException {
 		setupContext(event.getApplicationContext());
 		
+		// make a dialog
+		StyledTextProgressDialog dialog = new StyledTextProgressDialog(
+				shell, "Virtual Machine Validation");
+		
+		// open to ensure we have the reporter
+		dialog.open();
+		
 		// find a virtual machine
 		boolean found = false;
 		
 		IBuildMachine[] machines = MachineRegistry.getInstance().getBuildMachines();
 		for (IBuildMachine machine : machines) {
 			ValidateMachineRunner runner = new ValidateMachineRunner(
-					shell, machine);
+					dialog.getProgressReporter(),
+					machine);
 			try {
-				runner.run(new NullProgressMonitor());
+				dialog.run(true, true, runner);
 			} catch (Exception e) {
 				Activator.getErrorLogger().logAndShowError("Unexpected exception running tests", e);
 			}
@@ -79,10 +82,11 @@
 		}
 		
 		if (!found) {
-			fail("No build machine registered -- please consult ESbox > Build Machines to configure.");
-			return null;
+			dialog.getProgressReporter().log(Activator.createErrorStatus(
+					"No build machine registered -- please consult ESbox > Build Machines to configure.",
+					null));
 		}
-
+		
 		return null;
 	}
 



More information about the Esbox-commits mailing list