- the main page did not check whether in the build location there is an conf directory with bblayers.conf and local.conf -> added checks on main page (if directory does not exist it will be created) - the main page had the field for meta-data location disabled and could only be populated by browsing -> changed to enabled in order to be able to manually set location (checks are done on the value of this text) - the properties page shows an empty error pop-up - the process that collects all kernel branches outputs errors on a different channel than the input one -> redirect error channel to output and collect errors - all process invocations on the properties page are done on the GUI thread and the interface blocks waiting them to finish -> show progress of background threads that loads kernel branches
[YOCTO #2922] Signed-off-by: Ioana Grigoropol <ioanax.grigoro...@intel.com> --- .../sdk/remotetools/wizards/bsp/MainPage.java | 329 +++++++++++++------- .../remotetools/wizards/bsp/PropertiesPage.java | 188 +++++++---- .../remotetools/wizards/bsp/YoctoBSPWizard.java | 33 +- 3 files changed, 348 insertions(+), 202 deletions(-) diff --git a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/wizards/bsp/MainPage.java b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/wizards/bsp/MainPage.java index d80dd75..9c09236 100644 --- a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/wizards/bsp/MainPage.java +++ b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/wizards/bsp/MainPage.java @@ -20,24 +20,21 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Event; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Widget; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.DirectoryDialog; - +import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; - - +import org.eclipse.swt.widgets.Widget; import org.yocto.sdk.remotetools.YoctoBspElement; /** @@ -47,39 +44,46 @@ import org.yocto.sdk.remotetools.YoctoBspElement; * @author jzhang */ public class MainPage extends WizardPage { - public static final String PAGE_NAME = "Main"; - private static final String META_DATA_LOC = "MetadataLoc"; - private static final String BSP_OUT_LOC = "BspOutLoc"; - private static final String BUILD_DIR_LOC = "BuilddirLoc"; - private static final String KARCH_CMD = "yocto-bsp list karch"; - private static final String QARCH_CMD = "yocto-bsp list qemu property qemuarch"; - private static final String BSP_SCRIPT = "yocto-bsp"; - private static final String PROPERTIES_CMD_PREFIX = "yocto-bsp list "; - private static final String PROPERTIES_CMD_SURFIX = " properties -o "; - private static final String PROPERTIES_FILE = "/tmp/properties.json"; + public static final String PAGE_NAME = "Main"; +// private static final String META_DATA_LOC = "MetadataLoc"; +// private static final String BSP_OUT_LOC = "BspOutLoc"; +// private static final String BUILD_DIR_LOC = "BuilddirLoc"; +// private static final String BSP_NAME = "BspName"; + private static final String KARCH_CMD = "yocto-bsp list karch"; + private static final String QARCH_CMD = "yocto-bsp list qemu property qemuarch"; + private static final String BSP_SCRIPT = "yocto-bsp"; + private static final String BBLAYERS_CONF = "bblayers.conf"; + private static final String LOCAL_CONF = "local.conf"; + private static final String PROPERTIES_CMD_PREFIX = "yocto-bsp list "; + private static final String PROPERTIES_CMD_SURFIX = " properties -o "; + private static final String PROPERTIES_FILE = "/tmp/properties.json"; - private Button btnMetadataLoc; - private Button btnBspOutLoc; - private Button btnBuilddirLoc; - private Text textMetadataLoc; - private Text textBspName; - private Text textBspOutLoc; - private Text textBuilddirLoc; - private Combo karchCombo; - private Combo qarchCombo; - private Label metadata_label; - private Label builddir_label; - private Label bspname_label; - private Label bspout_label; - private Label karch_label; - private Label qarch_label; + private Button btnMetadataLoc; + private Text textMetadataLoc; + private Label labelMetadata; + + private Button btnBspOutputLoc; + private Text textBspOutputLoc; + private Label labelBspOutput; + + private Button btnBuildLoc; + private Text textBuildLoc; + private Label labelBuildLoc; + + private Text textBspName; + private Label labelBspName; + + private Combo comboKArch; + private Label labelKArch; + + private Combo comboQArch; + private Label labelQArch; private YoctoBspElement bspElem; public MainPage(YoctoBspElement element) { super(PAGE_NAME, "yocto-bsp main page", null); - //setTitle("Yocto-bsp main page"); setMessage("Enter the required fields(with *) to create new Yocto Project BSP!"); this.bspElem = element; } @@ -87,78 +91,100 @@ public class MainPage extends WizardPage { public void createControl(Composite parent) { setErrorMessage(null); Composite composite = new Composite(parent, SWT.NONE); - GridData gd = new GridData(SWT.FILL, SWT.CENTER, true, false); - GridLayout layout = new GridLayout(2, false); + GridData gd = new GridData(SWT.FILL, SWT.CENTER, true, false); + GridLayout layout = new GridLayout(2, false); composite.setLayout(layout); - gd.horizontalSpan= 2; + gd.horizontalSpan = 2; composite.setLayoutData(gd); - metadata_label = new Label(composite, SWT.NONE); - metadata_label.setText("Meta_data location*: "); + labelMetadata = new Label(composite, SWT.NONE); + labelMetadata.setText("Meta_data location*: "); + Composite textContainer = new Composite(composite, SWT.NONE); textContainer.setLayout(new GridLayout(2, false)); textContainer.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); - textMetadataLoc = (Text)addTextControl(textContainer,META_DATA_LOC, ""); - textMetadataLoc.setEnabled(false); + + textMetadataLoc = (Text)addTextControl(textContainer, ""); + textMetadataLoc.setEnabled(true); textMetadataLoc.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { controlChanged(e.widget); } }); - btnMetadataLoc = addFileSelectButton(textContainer, textMetadataLoc); + setBtnMetadataLoc(addFileSelectButton(textContainer, textMetadataLoc)); - builddir_label = new Label(composite, SWT.NONE); - builddir_label.setText("Build location: "); - textContainer = new Composite(composite, SWT.NONE); + labelBuildLoc = new Label(composite, SWT.NONE); + labelBuildLoc.setText("Build location*: "); + textContainer = new Composite(composite, SWT.NONE); textContainer.setLayout(new GridLayout(2, false)); textContainer.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); - textBuilddirLoc = (Text)addTextControl(textContainer, BUILD_DIR_LOC, ""); - btnBuilddirLoc = addFileSelectButton(textContainer, textBuilddirLoc); + textBuildLoc = (Text)addTextControl(textContainer, ""); + textBuildLoc.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent e) { + controlChanged(e.widget); + } + }); + + setBtnBuilddirLoc(addFileSelectButton(textContainer, textBuildLoc)); - bspname_label = new Label(composite, SWT.NONE); - bspname_label.setText("BSP Name*: "); - textBspName = new Text(composite, SWT.BORDER | SWT.SINGLE); - gd = new GridData(GridData.FILL_HORIZONTAL); - textBspName.setLayoutData(gd); + labelBspName = new Label(composite, SWT.NONE); + labelBspName.setText("BSP Name*: "); +// textBspName = new Text(composite, SWT.BORDER | SWT.SINGLE); + textContainer = new Composite(composite, SWT.NONE); + textContainer.setLayout(new GridLayout(2, false)); + textContainer.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); +// gd = new GridData(GridData.FILL_HORIZONTAL); +// textBspName.setLayoutData(gd); + textBspName = (Text)addTextControl(textContainer, ""); textBspName.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { controlChanged(e.widget); } }); - bspout_label = new Label(composite, SWT.NONE); - bspout_label.setText("Bsp output location: "); + labelBspOutput = new Label(composite, SWT.NONE); + labelBspOutput.setText("Bsp output location: "); textContainer = new Composite(composite, SWT.NONE); textContainer.setLayout(new GridLayout(2, false)); textContainer.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); - textBspOutLoc = (Text)addTextControl(textContainer, BSP_OUT_LOC, ""); - textBspOutLoc.addModifyListener(new ModifyListener() { + textBspOutputLoc = (Text)addTextControl(textContainer, ""); + textBspOutputLoc.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { controlChanged(e.widget); } }); - btnBspOutLoc = addFileSelectButton(textContainer, textBspOutLoc); - karch_label= new Label(composite, SWT.NONE); - karch_label.setText("kernel Architecture*: "); - karchCombo= new Combo(composite, SWT.READ_ONLY); - karchCombo.setLayout(new GridLayout(2, false)); - karchCombo.setLayoutData(new GridData(SWT.FILL, SWT.LEFT, true, false)); - karchCombo.setEnabled(false); - karchCombo.addModifyListener(new ModifyListener() { + setBtnBspOutLoc(addFileSelectButton(textContainer, textBspOutputLoc)); + labelKArch= new Label(composite, SWT.NONE); + labelKArch.setText("kernel Architecture*: "); + + textContainer = new Composite(composite, SWT.NONE); + textContainer.setLayout(new GridLayout(2, false)); + textContainer.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); + + comboKArch= new Combo(textContainer, SWT.READ_ONLY); + comboKArch.setLayout(new GridLayout(2, false)); + comboKArch.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + comboKArch.setEnabled(false); + comboKArch.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { controlChanged(e.widget); } }); - qarch_label = new Label(composite, SWT.NONE); - qarch_label.setText("Qemu Architecture(* for karch as qemu): "); - qarch_label.setEnabled(false); - qarchCombo = new Combo(composite, SWT.READ_ONLY); - qarchCombo.setLayout(new GridLayout(2, false)); - qarchCombo.setLayoutData(new GridData(SWT.FILL, SWT.LEFT, true, false)); - qarchCombo.setEnabled(false); - qarchCombo.addModifyListener(new ModifyListener() { + labelQArch = new Label(composite, SWT.NONE); + labelQArch.setText("Qemu Architecture(* for karch as qemu): "); + labelQArch.setEnabled(false); + + textContainer = new Composite(composite, SWT.NONE); + textContainer.setLayout(new GridLayout(2, false)); + textContainer.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); + + comboQArch = new Combo(textContainer, SWT.READ_ONLY); + comboQArch.setLayout(new GridLayout(2, false)); + comboQArch.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); + comboQArch.setEnabled(false); + comboQArch.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { controlChanged(e.widget); } @@ -168,7 +194,7 @@ public class MainPage extends WizardPage { validatePage(); } - private Control addTextControl(final Composite parent, String key, String value) { + private Control addTextControl(final Composite parent, String value) { final Text text; text = new Text(parent, SWT.SINGLE | SWT.LEAD | SWT.BORDER); @@ -197,62 +223,84 @@ public class MainPage extends WizardPage { private void controlChanged(Widget widget) { Status status = new Status(IStatus.OK, "not_used", 0, "", null); setErrorMessage(null); - String metadata_loc = textMetadataLoc.getText(); + String metadataLoc = textMetadataLoc.getText(); + if (widget == textMetadataLoc) { resetKarchCombo(); - - if (metadata_loc.length() == 0) { + + if (metadataLoc.length() == 0) { status = new Status(IStatus.ERROR, "not_used", 0, "Meta data location can't be empty!", null); } else { - File meta_data = new File(metadata_loc); + File meta_data = new File(metadataLoc); if (!meta_data.exists() || !meta_data.isDirectory()) { status = new Status(IStatus.ERROR, "not_used", 0, "Invalid meta data location: Make sure it exists and is a directory!", null); } else { - File bsp_script = new File(metadata_loc + "/scripts/" + BSP_SCRIPT); + File bsp_script = new File(metadataLoc + "/scripts/" + BSP_SCRIPT); if (!bsp_script.exists() || !bsp_script.canExecute()) status = new Status(IStatus.ERROR, "not_used", 0, - "Make sure yocto-bsp exists under \"" + metadata_loc + "/scripts\" and is executable!", null); + "Make sure yocto-bsp exists under \"" + metadataLoc + "/scripts\" and is executable!", null); else { kernelArchesHandler(); } } } - } - if (widget == karchCombo) { - String selection = karchCombo.getText(); + } else if (widget == comboKArch) { + String selection = comboKArch.getText(); if (!bspElem.getKarch().contentEquals(selection)) bspElem = new YoctoBspElement(); if (selection.matches("qemu")) { - qarch_label.setEnabled(true); - qarchCombo.setEnabled(true); + labelQArch.setEnabled(true); + comboQArch.setEnabled(true); } else { - qarch_label.setEnabled(false); - qarchCombo.setEnabled(false); + labelQArch.setEnabled(false); + comboQArch.setEnabled(false); } - } - - checkBuildDir(); - - String build_dir = textBuilddirLoc.getText(); - String output_dir = textBspOutLoc.getText(); - String bsp_name = textBspName.getText(); + } else if (widget == textBuildLoc){ + String buildLoc = textBuildLoc.getText(); + if (buildLoc.length() == 0) { + status = new Status(IStatus.ERROR, "not_used", 0, "Build location can't be empty!", null); + } else { + File buildLocDir = new File(buildLoc); + if (!buildLocDir.isDirectory()) { + status = new Status(IStatus.ERROR, "not_used", 0, + "Invalid build location: Make sure the build location is a directory!", null); + } else { + boolean createBuildDir = false; + File bblayersConf = new File(buildLoc + "/conf/" + BBLAYERS_CONF); + File localConf = new File(buildLoc + "/conf/" + LOCAL_CONF); + if (!bblayersConf.exists() || !localConf.exists()) + createBuildDir = true; + + if (createBuildDir){ + if (createBuildDir() != 0) + status = new Status(IStatus.ERROR, "not_used", 0, + "Invalid build location: Make sure the build location is a directory and is writable!", null); + + } + + } + } + + } +// checkBuildDir(); + String build_dir = textBuildLoc.getText(); + String output_dir = textBspOutputLoc.getText(); + String bsp_name = textBspName.getText(); if (!output_dir.isEmpty() && output_dir.matches(build_dir)) { status = new Status(IStatus.ERROR, "not_used", 0, "You've set BSP output directory the same as build directory, please leave output directory empty for this scenario!", null); } - if (build_dir.startsWith(metadata_loc) && output_dir.isEmpty() && !bsp_name.isEmpty()) { - String bsp_dir_str = metadata_loc + "/meta-" + bsp_name; + if (build_dir.startsWith(metadataLoc) && output_dir.isEmpty() && !bsp_name.isEmpty()) { + String bsp_dir_str = metadataLoc + "/meta-" + bsp_name; File bsp_dir = new File(bsp_dir_str); if (bsp_dir.exists()) { status = new Status(IStatus.ERROR, "not_used", 0, "Your BSP with name: " + bsp_name + " already exist under directory: " + bsp_dir_str + ", please change your bsp name!", null); } } - validatePage(); - if (status.getSeverity() == IStatus.ERROR) setErrorMessage(status.getMessage()); @@ -262,7 +310,7 @@ public class MainPage extends WizardPage { private void checkBuildDir() { String metadata_dir = textMetadataLoc.getText(); - String builddir_str = textBuilddirLoc.getText(); + String builddir_str = textBuildLoc.getText(); File build_dir = null; if ((builddir_str == null) || builddir_str.isEmpty()) @@ -274,7 +322,6 @@ public class MainPage extends WizardPage { String create_builddir_cmd = metadata_dir + "/oe-init-build-env " + builddir_str; try { Runtime rt = Runtime.getRuntime(); - //Process proc = rt.exec(create_builddir_cmd); Process proc = rt.exec(new String[] {"sh", "-c", create_builddir_cmd}); InputStream stdin = proc.getInputStream(); InputStreamReader isr = new InputStreamReader(stdin); @@ -282,6 +329,7 @@ public class MainPage extends WizardPage { String line = null; while ( (line = br.readLine()) != null) { + } int exitVal = proc.waitFor(); @@ -291,7 +339,33 @@ public class MainPage extends WizardPage { } } - public YoctoBspElement bspElement() { + private int createBuildDir() { + String metadataDir = textMetadataLoc.getText(); + String buildLoc = textBuildLoc.getText(); + + String createBuildDirCmd = "cd " + metadataDir + " ;" + metadataDir + "/oe-init-build-env " + buildLoc; + try { + ProcessBuilder builder = new ProcessBuilder(new String[] {"sh", "-c", createBuildDirCmd}); + builder.redirectErrorStream(true); + Process proc = builder.start(); + +// InputStream stdin = proc.getInputStream(); +// InputStreamReader isr = new InputStreamReader(stdin); +// BufferedReader br = new BufferedReader(isr); +// String line = null; +// +// while ( (line = br.readLine()) != null) { +// System.out.println(line); +// } + + return proc.waitFor(); + } catch (Throwable t) { + t.printStackTrace(); + return 1; + } + } + + public YoctoBspElement getBSPElement() { return this.bspElem; } @@ -301,11 +375,11 @@ public class MainPage extends WizardPage { } private void resetKarchCombo() { - karchCombo.deselectAll(); - qarchCombo.deselectAll(); - karchCombo.setEnabled(false); - qarch_label.setEnabled(false); - qarchCombo.setEnabled(false); + comboKArch.deselectAll(); + comboQArch.deselectAll(); + comboKArch.setEnabled(false); + labelQArch.setEnabled(false); + comboQArch.setEnabled(false); } private void kernelArchesHandler() { @@ -313,14 +387,14 @@ public class MainPage extends WizardPage { if (!karches.isEmpty()) { String[] kitems = new String[karches.size()]; kitems = karches.toArray(kitems); - karchCombo.setItems(kitems); - karchCombo.setEnabled(true); + comboKArch.setItems(kitems); + comboKArch.setEnabled(true); } ArrayList<String> qarches = getQArches(); if (!qarches.isEmpty()) { String[] qitems = new String[qarches.size()]; qitems = qarches.toArray(qitems); - qarchCombo.setItems(qitems); + comboQArch.setItems(qitems); } } @@ -336,27 +410,24 @@ public class MainPage extends WizardPage { public boolean validatePage() { String metadata_loc = textMetadataLoc.getText(); - String bspname = textBspName.getText(); - String karch = karchCombo.getText(); - String qarch = qarchCombo.getText(); + String bspname = textBspName.getText(); + String karch = comboKArch.getText(); + String qarch = comboQArch.getText(); if (metadata_loc.isEmpty() || bspname.isEmpty() || karch.isEmpty()) { - return false; - } else { - if (karch.matches("qemu")) - if (qarch.isEmpty()) - return false; + } else if (karch.matches("qemu") && qarch.isEmpty()) { + return false; } bspElem.setBspName(bspname); - if (!textBspOutLoc.getText().isEmpty()) - bspElem.setBspOutLoc(textBspOutLoc.getText()); + if (!textBspOutputLoc.getText().isEmpty()) + bspElem.setBspOutLoc(textBspOutputLoc.getText()); else bspElem.setBspOutLoc(""); - if (!textBuilddirLoc.getText().isEmpty()) - bspElem.setBuildLoc(textBuilddirLoc.getText()); + if (!textBuildLoc.getText().isEmpty()) + bspElem.setBuildLoc(textBuildLoc.getText()); else bspElem.setBuildLoc(""); bspElem.setMetadataLoc(metadata_loc); @@ -449,4 +520,28 @@ public class MainPage extends WizardPage { return qarches; } + + public Button getBtnMetadataLoc() { + return btnMetadataLoc; + } + + public void setBtnMetadataLoc(Button btnMetadataLoc) { + this.btnMetadataLoc = btnMetadataLoc; + } + + public Button getBtnBspOutLoc() { + return btnBspOutputLoc; + } + + public void setBtnBspOutLoc(Button btnBspOutLoc) { + this.btnBspOutputLoc = btnBspOutLoc; + } + + public Button getBtnBuilddirLoc() { + return btnBuildLoc; + } + + public void setBtnBuilddirLoc(Button btnBuilddirLoc) { + this.btnBuildLoc = btnBuilddirLoc; + } } diff --git a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/wizards/bsp/PropertiesPage.java b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/wizards/bsp/PropertiesPage.java index 44dc43b..0d38187 100644 --- a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/wizards/bsp/PropertiesPage.java +++ b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/wizards/bsp/PropertiesPage.java @@ -11,16 +11,18 @@ package org.yocto.sdk.remotetools.wizards.bsp; import java.io.BufferedReader; -import java.io.InputStream; import java.io.InputStreamReader; - +import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; +import java.util.Enumeration; +import java.util.HashSet; import java.util.Hashtable; import java.util.Iterator; -import java.util.HashSet; -import java.util.Enumeration; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.dialogs.ProgressMonitorDialog; +import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ScrolledComposite; @@ -28,21 +30,20 @@ import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Combo; +import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.Widget; - import org.yocto.sdk.remotetools.YoctoBspElement; -import org.yocto.sdk.remotetools.YoctoJSONHelper; import org.yocto.sdk.remotetools.YoctoBspPropertyElement; +import org.yocto.sdk.remotetools.YoctoJSONHelper; /** * * Setting up the parameters for creating the new Yocto Bitbake project @@ -73,7 +74,6 @@ public class PropertiesPage extends WizardPage { private Button smpButton; private Composite kcContainer = null; private Group kbGroup = null; - private Composite scContainer = null; private ScrolledComposite sc = null; private Composite controlContainer = null; private Group propertyGroup = null; @@ -85,18 +85,14 @@ public class PropertiesPage extends WizardPage { this.bspElem = element; } - public void test() { - - } - public void onEnterPage(YoctoBspElement element) { String[] values; if (!element.getValidPropertiesFile()) { - setErrorMessage("There's no valid properties file created, please choose \"Back\" to reselect kernel architectur!"); + setErrorMessage("There's no valid properties file created, please choose \"Back\" to reselect kernel architecture!"); return; } - if ((this.bspElem == null) || (!this.bspElem.getKarch().contentEquals(element.getKarch()))) { + if (this.bspElem == null || this.bspElem.getKarch().isEmpty() || !this.bspElem.getKarch().contentEquals(element.getKarch())) { karch_changed = true; } else karch_changed = false; @@ -439,52 +435,136 @@ public class PropertiesPage extends WizardPage { getWizard().getContainer().updateButtons(); } + + class SleepThread extends Thread { + private long ms; + public SleepThread(long ms) { + this.ms = ms; + } + + public void run() { + try { + sleep(ms); + } catch (InterruptedException e) {} + } + } + private String[] getValues(String property) { - ArrayList<String> values = new ArrayList<String>(); + final ValuesGetter runnable = new ValuesGetter(property); - String build_dir = ""; - if ((bspElem.getBuildLoc() == null) || bspElem.getBuildLoc().isEmpty()) - build_dir = bspElem.getMetadataLoc()+"/build"; - else - build_dir = bspElem.getBuildLoc(); - - String values_cmd = "export BUILDDIR=" + build_dir + ";"+bspElem.getMetadataLoc() + "/scripts/" + VALUES_CMD_PREFIX + bspElem.getKarch() + VALUES_CMD_SURFIX + property; - + ProgressMonitorDialog dialog = new ProgressMonitorDialog(getShell()); try { - Runtime rt = Runtime.getRuntime(); + dialog.run(true, true, new IRunnableWithProgress(){ + public void run(IProgressMonitor monitor) { + monitor.beginTask("Loading Kernel branches ...", 100); + runnable.run(); + monitor.done(); + } + }); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + return runnable.items; + +// ArrayList<String> values = new ArrayList<String>(); +// +// String build_dir = ""; +// if ((bspElem.getBuildLoc() == null) || bspElem.getBuildLoc().isEmpty()) +// build_dir = bspElem.getMetadataLoc()+"/build"; +// else +// build_dir = bspElem.getBuildLoc(); +// +// String values_cmd = "export BUILDDIR=" + build_dir + ";" + bspElem.getMetadataLoc() + "/scripts/" + VALUES_CMD_PREFIX + bspElem.getKarch() + VALUES_CMD_SURFIX + property; +// +// try { +// ProcessBuilder builder = new ProcessBuilder(new String[] {"sh", "-c", values_cmd}); +// builder.redirectErrorStream(true); +// Process process = builder.start(); +//// Runtime rt = Runtime.getRuntime(); +//// Process proc = rt.exec(new String[] {"sh", "-c", values_cmd}); +// BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); +// String line = null; +// String error_message = ""; +// while ( (line = br.readLine()) != null) { +// if (!line.startsWith("[")) { +// error_message += line + "\n"; +// continue; +// } +// String[] items = line.split(","); +// +// String value = items[0]; +// value = value.replace("[\"", ""); +// value = value.replaceAll("\"$", ""); +// values.add(value); +// } +// int exitVal = process.waitFor(); +// if (exitVal != 0) { +// MessageDialog.openError(getShell(),"Yocto-BSP", error_message); +// return null; +// } +// } catch (Throwable t) { +// t.printStackTrace(); +// } +// if (!values.isEmpty()) { +// String[] vitems = new String[values.size()]; +// vitems = values.toArray(vitems); +// return vitems; +// } else +// return null; + } - Process proc = rt.exec(new String[] {"sh", "-c", values_cmd}); - InputStream stdin = proc.getInputStream(); - InputStreamReader isr = new InputStreamReader(stdin); - BufferedReader br = new BufferedReader(isr); - String line = null; - String error_message = ""; + class ValuesGetter implements Runnable { + String property; + String[] items; + + public ValuesGetter(String property) { + this.property = property; + } + + public void run() { + ArrayList<String> values = new ArrayList<String>(); + + String build_dir = ""; + if ((bspElem.getBuildLoc() == null) || bspElem.getBuildLoc().isEmpty()) + build_dir = bspElem.getMetadataLoc()+"/build"; + else + build_dir = bspElem.getBuildLoc(); - while ( (line = br.readLine()) != null) { - if (!line.startsWith("[")) { - error_message = error_message + line; - continue; + String values_cmd = "export BUILDDIR=" + build_dir + ";" + bspElem.getMetadataLoc() + "/scripts/" + VALUES_CMD_PREFIX + bspElem.getKarch() + VALUES_CMD_SURFIX + property; + try { + ProcessBuilder builder = new ProcessBuilder(new String[] {"sh", "-c", values_cmd}); + builder.redirectErrorStream(true); + Process process = builder.start(); + BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); + String line = null; + String error_message = ""; + while ( (line = br.readLine()) != null) { + if (!line.startsWith("[")) { + error_message += line + "\n"; + continue; + } + String[] items = line.split(","); + + String value = items[0]; + value = value.replace("[\"", ""); + value = value.replaceAll("\"$", ""); + values.add(value); } - String[] items = line.split(","); - - String value = items[0]; - value = value.replace("[\"", ""); - value = value.replaceAll("\"$", ""); - values.add(value); + int exitVal = process.waitFor(); + if (exitVal != 0) { + MessageDialog.openError(getShell(),"Yocto-BSP", error_message); + items = null; + } + } catch (Throwable t) { + t.printStackTrace(); + } + if (!values.isEmpty()) { + items = new String[values.size()]; + items = values.toArray(items); } - int exitVal = proc.waitFor(); - if (exitVal != 0) { - MessageDialog.openError(getShell(),"Yocto-BSP", error_message); - return null; - } - } catch (Throwable t) { - t.printStackTrace(); } - if (!values.isEmpty()) { - String[] vitems = new String[values.size()]; - vitems = values.toArray(vitems); - return vitems; - } else - return null; } + } diff --git a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/wizards/bsp/YoctoBSPWizard.java b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/wizards/bsp/YoctoBSPWizard.java index 368b2ad..454a705 100644 --- a/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/wizards/bsp/YoctoBSPWizard.java +++ b/plugins/org.yocto.sdk.remotetools/src/org/yocto/sdk/remotetools/wizards/bsp/YoctoBSPWizard.java @@ -11,42 +11,13 @@ package org.yocto.sdk.remotetools.wizards.bsp; import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileDescriptor; import java.io.InputStream; -import java.io.IOException; import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.Writer; -import java.util.ArrayList; import java.util.HashSet; -import java.util.Hashtable; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.lang.reflect.InvocationTargetException; -import java.net.URL; -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.Status; import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.IWizardPage; -import org.eclipse.jface.wizard.WizardPage; import org.eclipse.jface.wizard.Wizard; - -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchWizard; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.progress.IProgressService; - import org.yocto.sdk.remotetools.YoctoBspElement; import org.yocto.sdk.remotetools.YoctoBspPropertyElement; import org.yocto.sdk.remotetools.YoctoJSONHelper; @@ -72,7 +43,7 @@ public class YoctoBSPWizard extends Wizard { @Override public IWizardPage getNextPage(IWizardPage page) { - propertiesPage.onEnterPage(mainPage.bspElement()); + propertiesPage.onEnterPage(mainPage.getBSPElement()); return propertiesPage; } @@ -89,7 +60,7 @@ public class YoctoBSPWizard extends Wizard { if (propertiesPage.validatePage()) { HashSet<YoctoBspPropertyElement> properties = propertiesPage.getProperties(); YoctoJSONHelper.createBspJSONFile(properties); - YoctoBspElement element = mainPage.bspElement(); + YoctoBspElement element = mainPage.getBSPElement(); String create_bsp_cmd = element.getMetadataLoc() + CREATE_CMD + element.getBspName() + " " + element.getKarch(); -- 1.7.9.5 _______________________________________________ yocto mailing list yocto@yoctoproject.org https://lists.yoctoproject.org/listinfo/yocto