</extension>\r
<extension\r
point="org.eclipse.debug.ui.launchShortcuts">\r
- <shortcut
- class="org.argeo.slc.ui.launch.script.SlcScriptLaunchShortcut"
- icon="icons/slcScriptLaunch.gif"
- id="org.argeo.slc.ui.launch.slcScriptLaunchShortcut"
- label="SLC script"
- modes="run,debug">
-
- <contextualLaunch>
- <enablement>
- <with variable="selection">
- <count value="1"/>
- <iterate>
- <or>
- <test property="org.eclipse.debug.ui.matchesPattern" value="*.xml"/>
- </or>
- </iterate>
- </with>
- </enablement>
- </contextualLaunch>
- </shortcut>
+ <shortcut\r
+ class="org.argeo.slc.ui.launch.osgi.SlcLaunchShortcut"\r
+ icon="icons/slcScriptLaunch.gif"\r
+ id="org.argeo.slc.ui.launch.slcOsgiLaunchShortcut"\r
+ label="SLC"\r
+ modes="run,debug">\r
+ \r
+ <contextualLaunch>\r
+ <enablement>\r
+ <with variable="selection">\r
+ <iterate>\r
+ <and>\r
+ <test property="org.eclipse.debug.ui.projectNature" value="org.eclipse.pde.PluginNature"/>\r
+ <or>\r
+ <adapt type="org.eclipse.core.resources.IProject"/>\r
+ <test property="org.eclipse.debug.ui.matchesPattern" value="MANIFEST.MF"/>\r
+ </or>\r
+ </and>\r
+ </iterate>\r
+ </with>\r
+ </enablement>\r
+ </contextualLaunch> \r
+ </shortcut>\r
+ <!--\r
+ <shortcut\r
+ class="org.argeo.slc.ui.launch.script.SlcScriptLaunchShortcut"\r
+ icon="icons/slcScriptLaunch.gif"\r
+ id="org.argeo.slc.ui.launch.slcScriptLaunchShortcut"\r
+ label="SLC script"\r
+ modes="run,debug">\r
+ \r
+ <contextualLaunch>\r
+ <enablement>\r
+ <with variable="selection">\r
+ <count value="1"/>\r
+ <iterate>\r
+ <or>\r
+ <test property="org.eclipse.debug.ui.matchesPattern" value="*.xml"/>\r
+ </or>\r
+ </iterate>\r
+ </with>\r
+ </enablement>\r
+ </contextualLaunch>\r
+ </shortcut>\r
<shortcut
class="org.argeo.slc.ui.launch.script.SlcScriptLaunchShortcutWithDialog"
icon="icons/slcScriptLaunch.gif"
</with>
</enablement>
</contextualLaunch>
- </shortcut>
+ </shortcut>\r
+-->
</extension>\r
+<!--\r
<extension\r
point="org.eclipse.debug.ui.launchConfigurationTabGroups">\r
<launchConfigurationTabGroup\r
type="org.argeo.slc.launch.slcScriptLaunchType">\r
</launchConfigurationTabGroup>\r
</extension>\r
-\r
+-->\r
<!-- See http://www.eclipseplugincentral.com/PNphpBB2-printview-t-4335-start-0.html -->\r
<extension point="org.eclipse.core.runtime.adapters">\r
<factory adaptableType="org.eclipse.core.resources.IResource" class="">\r
<adapter type="org.eclipse.debug.ui.actions.ILaunchable "/>\r
</factory>\r
</extension>\r
+<!--\r
<extension\r
point="org.eclipse.ui.preferencePages">\r
<page\r
name="SLC">\r
</page>\r
</extension>\r
+-->\r
<extension\r
point="org.eclipse.debug.ui.launchConfigurationTypeImages">\r
<launchConfigurationTypeImage\r
--- /dev/null
+package org.argeo.slc.ui.launch.osgi;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+import org.argeo.slc.ui.launch.SlcUiLaunchPlugin;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.debug.core.ILaunchConfigurationType;
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osgi.service.resolver.BundleDescription;
+import org.eclipse.pde.core.plugin.IPluginModelBase;
+import org.eclipse.pde.core.plugin.PluginRegistry;
+import org.eclipse.pde.ui.launcher.IPDELauncherConstants;
+import org.eclipse.pde.ui.launcher.OSGiLaunchShortcut;
+import org.eclipse.swt.widgets.Shell;
+
+public class SlcLaunchShortcut extends OSGiLaunchShortcut {
+ private Boolean debug = false;
+
+ private String springOsgiExtenderId = "org.springframework.osgi.extender";
+ // private String slcAgentId = "org.argeo.slc.agent";
+ // private String osgiBootId = "org.argeo.slc.osgiboot";
+
+ private ISelection selection = null;
+ private StringBuffer name = null;
+
+ private final List<String> defaultBundlesToStart = new ArrayList<String>();
+ private List<String> bundlesToStart = new ArrayList<String>();
+
+ public SlcLaunchShortcut() {
+ super();
+ defaultBundlesToStart.add(springOsgiExtenderId);
+ // defaultBundlesToStart.add(slcAgentId);
+ }
+
+ @Override
+ public void launch(ISelection selection, String mode) {
+ this.selection = selection;
+ this.name = new StringBuffer();
+
+ bundlesToStart = new ArrayList<String>();
+ bundlesToStart.addAll(defaultBundlesToStart);
+ // Evaluate selection
+ if (selection != null) {
+ addSelectedProjects(bundlesToStart);
+ }
+
+ super.launch(selection, mode);
+
+ // Reset
+ this.selection = null;
+ this.name = null;
+ bundlesToStart = null;
+ }
+
+ @Override
+ protected void initializeConfiguration(
+ ILaunchConfigurationWorkingCopy configuration) {
+ try {
+ super.initializeConfiguration(configuration);
+
+ // Convert bundle lists
+ String targetBundles = configuration.getAttribute(
+ IPDELauncherConstants.TARGET_BUNDLES, "");
+ configuration.setAttribute(IPDELauncherConstants.TARGET_BUNDLES,
+ convertBundleList(bundlesToStart, targetBundles));
+
+ String wkSpaceBundles = configuration.getAttribute(
+ IPDELauncherConstants.WORKSPACE_BUNDLES, "");
+ configuration.setAttribute(IPDELauncherConstants.WORKSPACE_BUNDLES,
+ convertBundleList(bundlesToStart, wkSpaceBundles));
+
+ // Update other default information
+ configuration.setAttribute(
+ IPDELauncherConstants.DEFAULT_AUTO_START, false);
+
+ } catch (CoreException e) {
+ Shell shell = SlcUiLaunchPlugin.getDefault().getWorkbench()
+ .getActiveWorkbenchWindow().getShell();
+ ErrorDialog.openError(shell, "Error",
+ "Cannot execute SLC launch shortcut", e.getStatus());
+ }
+
+ }
+
+ protected String convertBundleList(List<String> bundlesToStart,
+ String original) {
+ StringBuffer bufBundles = new StringBuffer(1024);
+ StringTokenizer stComa = new StringTokenizer(original, ",");
+ boolean first = true;
+ while (stComa.hasMoreTokens()) {
+ if (first)
+ first = false;
+ else
+ bufBundles.append(',');
+
+ String tkComa = stComa.nextToken();
+ int indexAt = tkComa.indexOf('@');
+ boolean modified = false;
+ if (indexAt >= 0) {
+ String bundelId = tkComa.substring(0, indexAt);
+
+ if (bundlesToStart.contains(bundelId)) {
+ bufBundles.append(bundelId).append('@').append(
+ "default:true");
+ modified = true;
+ if (debug)
+ System.out.println("Will start " + bundelId);
+ }
+ }
+
+ if (!modified)
+ bufBundles.append(tkComa);
+ }
+ String output = bufBundles.toString();
+ return output;
+ }
+
+ protected void addSelectedProjects(List<String> bundlesToStart) {
+ Assert.isNotNull(selection);
+
+ Map<String, IPluginModelBase> bundleProjects = new HashMap<String, IPluginModelBase>();
+ for (IPluginModelBase modelBase : PluginRegistry.getWorkspaceModels()) {
+ IProject bundleProject = modelBase.getUnderlyingResource()
+ .getProject();
+ bundleProjects.put(bundleProject.getName(), modelBase);
+ }
+
+ IStructuredSelection sSelection = (IStructuredSelection) selection;
+ for (Iterator<?> it = sSelection.iterator(); it.hasNext();) {
+ Object obj = it.next();
+ if (obj instanceof IProject) {
+ IProject project = (IProject) obj;
+ if (bundleProjects.containsKey(project.getName())) {
+ IPluginModelBase modelBase = bundleProjects.get(project
+ .getName());
+
+ BundleDescription bundleDescription = null;
+ if (modelBase.isFragmentModel()) {
+ BundleDescription[] hosts = modelBase
+ .getBundleDescription().getHost().getHosts();
+ for (BundleDescription bd : hosts) {
+ if (debug)
+ System.out.println("Host for "
+ + modelBase.getBundleDescription()
+ .getSymbolicName() + ": "
+ + bd.getSymbolicName());
+ bundleDescription = bd;
+ }
+ } else {
+ bundleDescription = modelBase.getBundleDescription();
+ }
+
+ if (bundleDescription != null) {
+ String symbolicName = bundleDescription
+ .getSymbolicName();
+ String bundleName = bundleDescription.getName();
+
+ bundlesToStart.add(symbolicName);
+
+ if (name.length() > 0)
+ name.append(" ");
+ if (bundleName != null)
+ name.append(bundleName);
+ else
+ name.append(symbolicName);
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ protected String getName(ILaunchConfigurationType type) {
+ if (name != null)
+ return name.toString();
+ else
+ return "SLC";
+ }
+
+}