Additional launch configuration options
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 6 May 2010 07:47:25 +0000 (07:47 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 6 May 2010 07:47:25 +0000 (07:47 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@3556 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

eclipse/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/SlcIdeUiPlugin.java
eclipse/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/OsgiBootMainTab.java
eclipse/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/OsgiLaunchHelper.java
eclipse/plugins/org.argeo.slc.ide.ui/src/main/java/org/argeo/slc/ide/ui/launch/osgi/OsgiLauncherConstants.java

index 67374bf08f2aa25877b67cf32c89dace59102b8e..088b4f48b56cab5f9478fe921f01c53723e5611c 100644 (file)
@@ -70,30 +70,43 @@ public class SlcIdeUiPlugin extends AbstractUIPlugin {
 \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
index 95d32eb9552cd60f9fb9af92d97442e8be035ff1..c52c767cc3c23b1258f1744f30f51886aaceb36a 100644 (file)
@@ -23,6 +23,10 @@ import org.eclipse.swt.widgets.Text;
 public class OsgiBootMainTab extends AbstractLaunchConfigurationTab implements
                OsgiLauncherConstants {
        private Listener listener = new Listener();
+
+       private Button syncBundles;
+       private Button clearDataDirectory;
+
        private Button addJvmPaths;
        private Text additionalVmArgs;
 
@@ -32,12 +36,32 @@ public class OsgiBootMainTab extends AbstractLaunchConfigurationTab implements
                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");
@@ -92,6 +116,11 @@ public class OsgiBootMainTab extends AbstractLaunchConfigurationTab implements
        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(
@@ -106,6 +135,11 @@ public class OsgiBootMainTab extends AbstractLaunchConfigurationTab implements
 
        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
@@ -119,6 +153,8 @@ public class OsgiBootMainTab extends AbstractLaunchConfigurationTab implements
 
        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");
index 31aaf136f68dd9f82fc4f3aaf5fb0617e7c7092b..3646a7b6d03b82758e1b0be8d7756906e371497a 100644 (file)
@@ -26,6 +26,8 @@ import org.eclipse.jdt.launching.IVMInstall2;
 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;
 
@@ -68,8 +70,17 @@ public class OsgiLaunchHelper implements OsgiLauncherConstants {
                        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));
 
@@ -111,6 +122,12 @@ public class OsgiLaunchHelper implements OsgiLauncherConstants {
                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, "");
@@ -120,6 +137,17 @@ public class OsgiLaunchHelper implements OsgiLauncherConstants {
                                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();
@@ -180,6 +208,12 @@ public class OsgiLaunchHelper implements OsgiLauncherConstants {
                                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) {
index 208f384ae0704ad04dda0dfe8bd2141a72a777e5..7a2d531b61adc9a93a17b789c2d4ee1f7cf79238 100644 (file)
@@ -14,6 +14,11 @@ public interface OsgiLauncherConstants {
        // + ".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