\r
protected static class DebugEventListener implements IDebugEventSetListener {\r
public void handleDebugEvents(DebugEvent[] events) {\r
+ if (events == null)\r
+ return;\r
+\r
for (int i = 0; i < events.length; i++) {\r
DebugEvent event = events[i];\r
+ if (event == null)\r
+ continue;\r
Object source = event.getSource();\r
if (source instanceof IProcess\r
&& event.getKind() == DebugEvent.TERMINATE) {\r
IProcess process = (IProcess) source;\r
+ if (process == null)\r
+ continue;\r
ILaunch launch = process.getLaunch();\r
- if (launch != null) {\r
+ if (launch != null)\r
refreshOsgiBootLaunch(launch);\r
- }\r
+\r
}\r
}\r
}\r
\r
protected void refreshOsgiBootLaunch(ILaunch launch) {\r
try {\r
+ if (launch == null)\r
+ return;\r
IResource[] resources = launch.getLaunchConfiguration()\r
.getMappedResources();\r
+ if (resources == null)\r
+ return;\r
if (resources.length > 0) {\r
IResource propertiesFile = resources[0];\r
+ if (propertiesFile.getParent() == null)\r
+ return;\r
propertiesFile.getParent().refreshLocal(\r
IResource.DEPTH_INFINITE, null);\r
-// System.out.println("Refreshed "\r
-// + propertiesFile.getParent());\r
+ // System.out.println("Refreshed "\r
+ // + propertiesFile.getParent());\r
}\r
} catch (CoreException e) {\r
e.printStackTrace();\r
public class OsgiBootMainTab extends AbstractLaunchConfigurationTab implements
OsgiLauncherConstants {
private Listener listener = new Listener();
+
+ private Button syncBundles;
+ private Button clearDataDirectory;
+
private Button addJvmPaths;
private Text additionalVmArgs;
Composite container = new Composite(parent, SWT.NONE);
container.setLayout(new GridLayout());
container.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ createGeneral(container);
createAdditionalProgramArgs(container);
createAdditionalVmArgumentBlock(container);
Dialog.applyDialogFont(container);
setControl(container);
}
+ protected void createGeneral(Composite parent) {
+ Group container = new Group(parent, SWT.NONE);
+ container.setText("General");
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 2;
+ container.setLayout(layout);
+ container.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ syncBundles = new Button(container, SWT.CHECK);
+ syncBundles.addSelectionListener(listener);
+ new Label(container, SWT.NONE)
+ .setText("Always keep bundle in line with the target platform");
+ clearDataDirectory = new Button(container, SWT.CHECK);
+ clearDataDirectory.addSelectionListener(listener);
+ new Label(container, SWT.NONE)
+ .setText("Clear data directory before launch");
+ }
+
protected void createAdditionalProgramArgs(Composite parent) {
Group container = new Group(parent, SWT.NONE);
container.setText("Additional Program Arguments");
public void initializeFrom(ILaunchConfiguration configuration) {
// System.out.println("initializeFrom");
try {
+ syncBundles.setSelection(configuration.getAttribute(
+ ATTR_SYNC_BUNDLES, true));
+ clearDataDirectory.setSelection(configuration.getAttribute(
+ ATTR_CLEAR_DATA_DIRECTORY, false));
+
additionalProgramArgs.setText(configuration.getAttribute(
ATTR_ADDITIONAL_PROGRAM_ARGS, ""));
addJvmPaths.setSelection(configuration.getAttribute(
public void performApply(ILaunchConfigurationWorkingCopy configuration) {
// System.out.println("performApply");
+ configuration.setAttribute(ATTR_SYNC_BUNDLES, syncBundles
+ .getSelection());
+ configuration.setAttribute(ATTR_CLEAR_DATA_DIRECTORY,
+ clearDataDirectory.getSelection());
+
configuration.setAttribute(ATTR_ADDITIONAL_PROGRAM_ARGS,
additionalProgramArgs.getText());
configuration.setAttribute(ATTR_ADDITIONAL_VM_ARGS, additionalVmArgs
public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
// System.out.println("setDefaults");
+ configuration.setAttribute(ATTR_SYNC_BUNDLES, true);
+ configuration.setAttribute(ATTR_CLEAR_DATA_DIRECTORY, false);
configuration.setAttribute(ATTR_ADD_JVM_PATHS, false);
configuration.setAttribute(ATTR_ADDITIONAL_VM_ARGS, "-Xmx128m");
configuration.setAttribute(ATTR_ADDITIONAL_PROGRAM_ARGS, "-console");
import org.eclipse.jdt.launching.IVMInstallType;
import org.eclipse.jdt.launching.JavaRuntime;
import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.pde.core.plugin.IPluginModelBase;
+import org.eclipse.pde.core.plugin.PluginRegistry;
import org.eclipse.pde.ui.launcher.IPDELauncherConstants;
import org.eclipse.swt.widgets.Display;
Map<String, String> systemPropertiesToAppend, String dataDir)
throws CoreException {
// Convert bundle lists
- String targetBundles = configuration.getAttribute(
- IPDELauncherConstants.TARGET_BUNDLES, "");
+ final String targetBundles;
+ if (configuration.getAttribute(ATTR_SYNC_BUNDLES, true)) {
+ StringBuffer buf = new StringBuffer();
+ for (IPluginModelBase model : PluginRegistry.getExternalModels()) {
+ buf.append(model.getBundleDescription().getSymbolicName());
+ buf.append(',');
+ }
+ targetBundles = buf.toString();
+ } else
+ targetBundles = configuration.getAttribute(
+ IPDELauncherConstants.TARGET_BUNDLES, "");
configuration.setAttribute(IPDELauncherConstants.TARGET_BUNDLES,
convertBundleList(bundlesToStart, targetBundles));
if (dataDir != null) {
progArgs.append("-data ");
progArgs.append(surroundSpaces(dataDir));
+
+ if (configuration.getAttribute(ATTR_CLEAR_DATA_DIRECTORY, false)) {
+ File dataDirFile = new File(dataDir);
+ deleteDir(dataDirFile);
+ dataDirFile.mkdirs();
+ }
}
String additionalProgramArgs = configuration.getAttribute(
OsgiLauncherConstants.ATTR_ADDITIONAL_PROGRAM_ARGS, "");
progArgs.toString());
}
+ private static void deleteDir(File dir) {
+ File[] files = dir.listFiles();
+ for (File file : files) {
+ if (file.isDirectory())
+ deleteDir(file);
+ else
+ file.delete();
+ }
+ dir.delete();
+ }
+
protected static void addVms(StringBuffer vmArgs) {
addVmSysProperty(vmArgs, "default", JavaRuntime.getDefaultVMInstall());
IVMInstallType[] vmTypes = JavaRuntime.getVMInstallTypes();
bufBundles.append(',');
String bundleId = stComa.nextToken();
+ if (bundleId.indexOf('*') >= 0)
+ throw new RuntimeException(
+ "Bundle id "
+ + bundleId
+ + " not properly formatted, clean your workspace projects");
+
int indexAt = bundleId.indexOf('@');
boolean modified = false;
if (indexAt >= 0) {
// + ".defaultProgramArgs";
// Configuration
+ public final static String ATTR_SYNC_BUNDLES = SlcIdeUiPlugin.ID
+ + ".syncBundles";
+ public final static String ATTR_CLEAR_DATA_DIRECTORY = SlcIdeUiPlugin.ID
+ + ".clearDataDirectory";
+
public final static String ATTR_DEFAULT_VM_ARGS = SlcIdeUiPlugin.ID
+ ".defaultVmArgs";
public final static String ATTR_ADDITIONAL_PROGRAM_ARGS = SlcIdeUiPlugin.ID