diff options
Diffstat (limited to 'org.openembedded.bc.ui/src/org/openembedded/bc/ui/wizards/install/ProgressPage.java')
-rw-r--r-- | org.openembedded.bc.ui/src/org/openembedded/bc/ui/wizards/install/ProgressPage.java | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/org.openembedded.bc.ui/src/org/openembedded/bc/ui/wizards/install/ProgressPage.java b/org.openembedded.bc.ui/src/org/openembedded/bc/ui/wizards/install/ProgressPage.java new file mode 100644 index 0000000..6a54a6b --- /dev/null +++ b/org.openembedded.bc.ui/src/org/openembedded/bc/ui/wizards/install/ProgressPage.java @@ -0,0 +1,191 @@ +package org.openembedded.bc.ui.wizards.install; + + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.StringReader; +import java.util.Map; + +import org.eclipse.core.runtime.jobs.IJobChangeEvent; +import org.eclipse.core.runtime.jobs.IJobChangeListener; +import org.eclipse.jface.resource.JFaceResources; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.ProgressBar; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.PlatformUI; +import org.openembedded.bc.ui.wizards.FiniteStateWizardPage; + + +/** + * Select which flavor of OE is to be installed. + * @author kgilmer + * + */ +public class ProgressPage extends FiniteStateWizardPage { + + private static final String STARTED_INSTALL = "STARTED_INSTALL"; + private Text txtConsole; + private StringBuffer consoleBuffer; + private ProgressBar pbProgress; + private String lastError; + + protected static final int PRINT_CMD = 1; + protected static final int PRINT_OUT = 2; + protected static final int PRINT_ERR = 3; + + protected ProgressPage(Map model) { + super("Progress", model); + setTitle("Installing OpenEmbedded"); + setMessage(""); + } + + public void createControl(Composite parent) { + Composite top = new Composite(parent, SWT.None); + top.setLayout(new GridLayout()); + top.setLayoutData(new GridData(GridData.FILL_BOTH)); + + txtConsole = new Text(top, SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER); + txtConsole.setLayoutData(new GridData(GridData.FILL_BOTH)); + txtConsole.setFont(JFaceResources.getFont(JFaceResources.TEXT_FONT)); + txtConsole.setEditable(false); + + Label s = new Label(top, SWT.SEPARATOR | SWT.HORIZONTAL); + s.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + pbProgress = new ProgressBar(top, SWT.HORIZONTAL | SWT.BORDER); + + setControl(top); + } + + protected void printLine(String line, final int type) { + if (consoleBuffer == null) { + consoleBuffer = new StringBuffer(); + } + + if (type == PRINT_CMD) { + consoleBuffer.append("$ "); + } else if (type == PRINT_ERR) { + consoleBuffer.append("ERROR: "); + lastError = line; + } + + consoleBuffer.append(line); + consoleBuffer.append('\n'); + + PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { + + + public void run() { + txtConsole.setText(consoleBuffer.toString()); + txtConsole.setSelection(txtConsole.getText().length() - 1); + + if (type == PRINT_CMD) { + pbProgress.setSelection(pbProgress.getSelection() + 1); + } + } + + }); + } + + public void pageCleanup() { + + } + + public void pageDisplay() { + if (!model.containsKey(STARTED_INSTALL)) { + model.put(STARTED_INSTALL, new Boolean(true)); + + try { + pbProgress.setMaximum(getLineCount((String) model.get(FlavorPage.INSTALL_SCRIPT))); + } catch (IOException e) { + //TODO add logging here. + e.printStackTrace(); + return; + } + + executeInstall(); + } + } + + private int getLineCount(String str) throws IOException { + int count = 0; + + BufferedReader br = new BufferedReader(new StringReader(str)); + + while (br.readLine() != null) { + count++; + } + + return count; + } + + private void executeInstall() { + InstallJob j = new InstallJob(model, this); + j.addJobChangeListener(new IJobChangeListener() { + + public void aboutToRun(IJobChangeEvent event) { + } + + + public void awake(IJobChangeEvent event) { + } + + + public void done(final IJobChangeEvent event) { + PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { + + + public void run() { + if (event.getResult().isOK()) { + setMessage("Installation complete, next is to load into workspace."); + pbProgress.setVisible(false); + setPageComplete(true); + } else { + setErrorMessage("An error occurred while installing OpenEmbedded:\n" + lastError); + } + } + + }); + } + + public void running(IJobChangeEvent event) { + } + + + public void scheduled(IJobChangeEvent event) { + } + + + public void sleeping(IJobChangeEvent event) { + } + + }); + setMessage("Installing OpenEmbedded..."); + j.schedule(); + } + + + protected void updateModel() { + } + + + protected boolean validatePage() { + + return true; + } + + public void printDialog(final String msg) { + PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { + + + public void run() { + setMessage(msg); + } + }); + } + +} |