### Eclipse Workspace Patch 1.0 #P org.eclipse.pde.ui.tests Index: src/org/eclipse/pde/ui/tests/runtime/AbstractRegistryModelTest.java =================================================================== RCS file: /cvsroot/eclipse/pde/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/runtime/AbstractRegistryModelTest.java,v retrieving revision 1.7 diff -u -r1.7 AbstractRegistryModelTest.java --- src/org/eclipse/pde/ui/tests/runtime/AbstractRegistryModelTest.java 24 Feb 2009 17:35:09 -0000 1.7 +++ src/org/eclipse/pde/ui/tests/runtime/AbstractRegistryModelTest.java 10 Mar 2009 12:19:32 -0000 @@ -1,194 +1,184 @@ -/******************************************************************************* - * Copyright (c) 2008, 2009 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.pde.ui.tests.runtime; - -import java.net.URISyntaxException; - -import java.util.*; -import junit.framework.TestCase; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.pde.internal.runtime.registry.model.*; -import org.eclipse.pde.internal.ui.tests.macro.MacroPlugin; -import org.osgi.framework.BundleException; -import org.osgi.framework.Constants; - -public abstract class AbstractRegistryModelTest extends TestCase { - - public static class TestModelChangeListener implements ModelChangeListener { - - private static final int FRAMEWORK_EVENT_TIMEOUT = 5000; - - private List fDeltas = new ArrayList(); - private int notificationsCount = 0; - private Thread testsThread; - private int expected; - - public TestModelChangeListener() { - // get the thread in which tests are run - testsThread = Thread.currentThread(); - } - - public void modelChanged(ModelChangeDelta[] deltas) { - notificationsCount += deltas.length; - fDeltas.addAll(Arrays.asList(deltas)); - - // notify tests thread if it's waiting in waitForNotifications sleep - if ((expected > 0) && (notificationsCount >= expected)) - testsThread.interrupt(); - } - - public ModelChangeDelta[] getDeltas() { - return (ModelChangeDelta[]) fDeltas.toArray(new ModelChangeDelta[fDeltas.size()]); - } - - public int waitForNotifications(int count) { - expected = count; - - try { - Thread.sleep(expected * FRAMEWORK_EVENT_TIMEOUT); - } catch (InterruptedException e) { - } - - return notificationsCount; - } - } - - private static final String TESTBUNDLE_PATH = "/testplugins/org.eclipse.pde.runtime.tests.testbundle_1.0.0.jar"; - - private static final String TESTBUNDLE = "org.eclipse.pde.runtime.tests.testbundle"; - - protected RegistryModel f; - - abstract protected RegistryModel createModel() throws URISyntaxException; - - protected void setUp() throws Exception { - f = createModel(); - f.connect(new NullProgressMonitor()); - } - - protected void tearDown() { - f.disconnect(); - } - - /** - * Verifies that model provides correct list of installed bundles - */ - public void testInstalledBundles() { - int bundlesCount = 0; - org.osgi.framework.Bundle[] origBundles = MacroPlugin.getBundleContext().getBundles(); - - // ignore all bundle fragments - for (int i = 0; i < origBundles.length; i++) { - if (origBundles[i].getHeaders().get(Constants.FRAGMENT_HOST) == null) { - bundlesCount++; - } - } - - Bundle[] bundles = f.getBundles(); - - assertEquals(bundlesCount, bundles.length); - } - - public void testBundleChangedNotification() throws BundleException { - TestModelChangeListener listener = new TestModelChangeListener(); - - f.addModelChangeListener(listener); - org.osgi.framework.Bundle bundle = MacroPlugin.getBundleContext().installBundle(TestUtils.findPath(TESTBUNDLE_PATH)); - bundle.start(); // resolved, started - bundle.stop(); // stopped, unresolved - bundle.update(); - bundle.uninstall(); - - listener.waitForNotifications(7); - - f.removeModelChangeListener(listener); - - ModelChangeDelta[] deltas = listener.getDeltas(); - - // bundle install - ModelChangeDelta delta = deltas[0]; - assertTrue(delta.getModelObject() instanceof Bundle); - assertEquals(TESTBUNDLE, ((Bundle)delta.getModelObject()).getSymbolicName()); - assertEquals(ModelChangeDelta.ADDED, delta.getFlag()); - - // bundle starting - delta = deltas[1]; - assertTrue(delta.getModelObject() instanceof Bundle); - assertEquals(TESTBUNDLE, ((Bundle)delta.getModelObject()).getSymbolicName()); - assertEquals(ModelChangeDelta.RESOLVED, delta.getFlag()); - - // bundle started - delta = deltas[2]; - assertTrue(delta.getModelObject() instanceof Bundle); - assertEquals(TESTBUNDLE, ((Bundle)delta.getModelObject()).getSymbolicName()); - assertEquals(ModelChangeDelta.STARTED, delta.getFlag()); - - // bundle stopping - delta = deltas[3]; - assertTrue(delta.getModelObject() instanceof Bundle); - assertEquals(TESTBUNDLE, ((Bundle)delta.getModelObject()).getSymbolicName()); - assertEquals(ModelChangeDelta.STOPPED, delta.getFlag()); - - // bundle stopped - delta = deltas[4]; - assertTrue(delta.getModelObject() instanceof Bundle); - assertEquals(TESTBUNDLE, ((Bundle)delta.getModelObject()).getSymbolicName()); - assertEquals(ModelChangeDelta.UNRESOLVED, delta.getFlag()); - - // bundle update - delta = deltas[5]; - assertTrue(delta.getModelObject() instanceof Bundle); - assertEquals(TESTBUNDLE, ((Bundle)delta.getModelObject()).getSymbolicName()); - assertEquals(ModelChangeDelta.UPDATED, delta.getFlag()); - - // bundle uninstall - delta = deltas[6]; - assertTrue(delta.getModelObject() instanceof Bundle); - assertEquals(TESTBUNDLE, ((Bundle)delta.getModelObject()).getSymbolicName()); - assertEquals(ModelChangeDelta.REMOVED, delta.getFlag()); - - assertEquals(7, deltas.length); - } - - public void testServiceChangedNotification() throws BundleException { - TestModelChangeListener listener = new TestModelChangeListener(); - - f.addModelChangeListener(listener); - org.osgi.framework.ServiceRegistration registration = MacroPlugin.getBundleContext().registerService(getClass().getName(), this, null); - registration.unregister(); - - listener.waitForNotifications(3); - - f.removeModelChangeListener(listener); - - ModelChangeDelta[] deltas = listener.getDeltas(); - - // service register - ModelChangeDelta delta = deltas[0]; - assertTrue(delta.getModelObject() instanceof ServiceName); - assertEquals(getClass().getName(), ((ServiceName)delta.getModelObject()).getClasses()[0]); - assertEquals(ModelChangeDelta.ADDED, delta.getFlag()); - - delta = deltas[1]; - assertTrue(delta.getModelObject() instanceof ServiceRegistration); - assertEquals(getClass().getName(), ((ServiceRegistration)delta.getModelObject()).getName().getClasses()[0]); - assertEquals(ModelChangeDelta.ADDED, delta.getFlag()); - - // service unregister - delta = deltas[2]; - assertTrue(delta.getModelObject() instanceof ServiceRegistration); - assertEquals(getClass().getName(), ((ServiceRegistration)delta.getModelObject()).getName().getClasses()[0]); - assertEquals(ModelChangeDelta.REMOVED, delta.getFlag()); - - assertEquals(3, deltas.length); - } - -} +/******************************************************************************* + * Copyright (c) 2008, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.pde.ui.tests.runtime; + +import java.net.URISyntaxException; + +import java.util.*; +import junit.framework.TestCase; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.pde.internal.runtime.registry.model.*; +import org.eclipse.pde.internal.ui.tests.macro.MacroPlugin; +import org.osgi.framework.BundleException; + +public abstract class AbstractRegistryModelTest extends TestCase { + + public static class TestModelChangeListener implements ModelChangeListener { + + private static final int FRAMEWORK_EVENT_TIMEOUT = 5000; + + private List fDeltas = new ArrayList(); + private int notificationsCount = 0; + private Thread testsThread; + private int expected; + + public TestModelChangeListener() { + // get the thread in which tests are run + testsThread = Thread.currentThread(); + } + + public void modelChanged(ModelChangeDelta[] deltas) { + notificationsCount += deltas.length; + fDeltas.addAll(Arrays.asList(deltas)); + + // notify tests thread if it's waiting in waitForNotifications sleep + if ((expected > 0) && (notificationsCount >= expected)) + testsThread.interrupt(); + } + + public ModelChangeDelta[] getDeltas() { + return (ModelChangeDelta[]) fDeltas.toArray(new ModelChangeDelta[fDeltas.size()]); + } + + public int waitForNotifications(int count) { + expected = count; + + try { + Thread.sleep(expected * FRAMEWORK_EVENT_TIMEOUT); + } catch (InterruptedException e) { + } + + return notificationsCount; + } + } + + private static final String TESTBUNDLE_PATH = "/testplugins/org.eclipse.pde.runtime.tests.testbundle_1.0.0.jar"; + + private static final String TESTBUNDLE = "org.eclipse.pde.runtime.tests.testbundle"; + + protected RegistryModel f; + + abstract protected RegistryModel createModel() throws URISyntaxException; + + protected void setUp() throws Exception { + f = createModel(); + f.connect(new NullProgressMonitor()); + } + + protected void tearDown() { + f.disconnect(); + } + + /** + * Verifies that model provides correct list of installed bundles + */ + public void testInstalledBundles() { + org.osgi.framework.Bundle[] origBundles = MacroPlugin.getBundleContext().getBundles(); + Bundle[] bundles = f.getBundles(); + + assertEquals(origBundles.length, bundles.length); + } + + public void testBundleChangedNotification() throws BundleException { + TestModelChangeListener listener = new TestModelChangeListener(); + + f.addModelChangeListener(listener); + org.osgi.framework.Bundle bundle = MacroPlugin.getBundleContext().installBundle(TestUtils.findPath(TESTBUNDLE_PATH)); + bundle.start(); // resolved, started + bundle.stop(); // stopped, unresolved + bundle.update(); + bundle.uninstall(); + + listener.waitForNotifications(7); + + f.removeModelChangeListener(listener); + + ModelChangeDelta[] deltas = listener.getDeltas(); + + // bundle install + ModelChangeDelta delta = deltas[0]; + assertTrue(delta.getModelObject() instanceof Bundle); + assertEquals(TESTBUNDLE, ((Bundle)delta.getModelObject()).getSymbolicName()); + assertEquals(ModelChangeDelta.ADDED, delta.getFlag()); + + // bundle starting + delta = deltas[1]; + assertTrue(delta.getModelObject() instanceof Bundle); + assertEquals(TESTBUNDLE, ((Bundle)delta.getModelObject()).getSymbolicName()); + assertEquals(ModelChangeDelta.RESOLVED, delta.getFlag()); + + // bundle started + delta = deltas[2]; + assertTrue(delta.getModelObject() instanceof Bundle); + assertEquals(TESTBUNDLE, ((Bundle)delta.getModelObject()).getSymbolicName()); + assertEquals(ModelChangeDelta.STARTED, delta.getFlag()); + + // bundle stopping + delta = deltas[3]; + assertTrue(delta.getModelObject() instanceof Bundle); + assertEquals(TESTBUNDLE, ((Bundle)delta.getModelObject()).getSymbolicName()); + assertEquals(ModelChangeDelta.STOPPED, delta.getFlag()); + + // bundle stopped + delta = deltas[4]; + assertTrue(delta.getModelObject() instanceof Bundle); + assertEquals(TESTBUNDLE, ((Bundle)delta.getModelObject()).getSymbolicName()); + assertEquals(ModelChangeDelta.UNRESOLVED, delta.getFlag()); + + // bundle update + delta = deltas[5]; + assertTrue(delta.getModelObject() instanceof Bundle); + assertEquals(TESTBUNDLE, ((Bundle)delta.getModelObject()).getSymbolicName()); + assertEquals(ModelChangeDelta.UPDATED, delta.getFlag()); + + // bundle uninstall + delta = deltas[6]; + assertTrue(delta.getModelObject() instanceof Bundle); + assertEquals(TESTBUNDLE, ((Bundle)delta.getModelObject()).getSymbolicName()); + assertEquals(ModelChangeDelta.REMOVED, delta.getFlag()); + + assertEquals(7, deltas.length); + } + + public void testServiceChangedNotification() throws BundleException { + TestModelChangeListener listener = new TestModelChangeListener(); + + f.addModelChangeListener(listener); + org.osgi.framework.ServiceRegistration registration = MacroPlugin.getBundleContext().registerService(getClass().getName(), this, null); + registration.unregister(); + + listener.waitForNotifications(3); + + f.removeModelChangeListener(listener); + + ModelChangeDelta[] deltas = listener.getDeltas(); + + // service register + ModelChangeDelta delta = deltas[0]; + assertTrue(delta.getModelObject() instanceof ServiceName); + assertEquals(getClass().getName(), ((ServiceName)delta.getModelObject()).getClasses()[0]); + assertEquals(ModelChangeDelta.ADDED, delta.getFlag()); + + delta = deltas[1]; + assertTrue(delta.getModelObject() instanceof ServiceRegistration); + assertEquals(getClass().getName(), ((ServiceRegistration)delta.getModelObject()).getName().getClasses()[0]); + assertEquals(ModelChangeDelta.ADDED, delta.getFlag()); + + // service unregister + delta = deltas[2]; + assertTrue(delta.getModelObject() instanceof ServiceRegistration); + assertEquals(getClass().getName(), ((ServiceRegistration)delta.getModelObject()).getName().getClasses()[0]); + assertEquals(ModelChangeDelta.REMOVED, delta.getFlag()); + + assertEquals(3, deltas.length); + } + +} #P org.eclipse.pde.runtime Index: src/org/eclipse/pde/internal/runtime/registry/model/RegistryModel.java =================================================================== RCS file: /cvsroot/eclipse/pde/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/model/RegistryModel.java,v retrieving revision 1.5 diff -u -r1.5 RegistryModel.java --- src/org/eclipse/pde/internal/runtime/registry/model/RegistryModel.java 13 Feb 2009 15:38:37 -0000 1.5 +++ src/org/eclipse/pde/internal/runtime/registry/model/RegistryModel.java 10 Mar 2009 12:19:34 -0000 @@ -12,6 +12,8 @@ import java.util.*; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.osgi.service.resolver.VersionRange; +import org.osgi.framework.Version; /** * Model entry point for Eclipse runtime. Provides information about runtime bundles, services and extension points. @@ -25,6 +27,17 @@ bundles.put(new Long(adapter.getId()), adapter); + if (adapter.getFragmentHost() != null) { + addFragment(adapter); + + Bundle host = getBundle(adapter.getFragmentHost(), adapter.getFragmentHostVersion()); + if (host != null) { + ModelChangeDelta d2 = new ModelChangeDelta(host, ModelChangeDelta.UPDATED); + fireModelChangeEvent(new ModelChangeDelta[] {delta, d2}); + return; + } + } + fireModelChangeEvent(new ModelChangeDelta[] {delta}); } @@ -33,6 +46,17 @@ bundles.remove(new Long(adapter.getId())); + if (adapter.getFragmentHost() != null) { + removeFragment(adapter); + + Bundle host = getBundle(adapter.getFragmentHost(), adapter.getFragmentHostVersion()); + if (host != null) { + ModelChangeDelta d2 = new ModelChangeDelta(host, ModelChangeDelta.UPDATED); + fireModelChangeEvent(new ModelChangeDelta[] {delta, d2}); + return; + } + } + fireModelChangeEvent(new ModelChangeDelta[] {delta}); adapter.setModel(null); } @@ -43,6 +67,10 @@ bundles.put(new Long(adapter.getId()), adapter); // replace old with new one + if (adapter.getFragmentHost() != null) { + addFragment(adapter); + } + fireModelChangeEvent(new ModelChangeDelta[] {delta}); } @@ -167,6 +195,7 @@ private Map services; private Map extensionPoints; private Set serviceNames; + private Map fragments; protected RegistryBackend backend; @@ -175,11 +204,35 @@ services = Collections.synchronizedMap(new HashMap()); extensionPoints = Collections.synchronizedMap(new HashMap()); serviceNames = Collections.synchronizedSet(new HashSet()); + fragments = Collections.synchronizedMap(new HashMap()); this.backend = backend; backend.setRegistryListener(backendListener); } + protected void addFragment(Bundle fragment) { + Set hostFragments = (Set) fragments.get(fragment.getFragmentHost()); + if (hostFragments == null) { + hostFragments = Collections.synchronizedSet(new HashSet()); + fragments.put(fragment.getFragmentHost(), hostFragments); + } + + if (!hostFragments.add(fragment)) { + // not added if element already exists. So remove old and add it again. + hostFragments.remove(fragment); + hostFragments.add(fragment); + } + } + + protected void removeFragment(Bundle fragment) { + Set hostFragments = (Set) fragments.get(fragment.getFragmentHost()); + if (hostFragments == null) { + return; + } + + hostFragments.remove(fragment); + } + public void connect(IProgressMonitor monitor) { backend.connect(monitor); @@ -245,10 +298,85 @@ return (Bundle) bundles.get(id); } + public Bundle getBundle(String symbolicName, String versionRange) { + for (Iterator i = bundles.values().iterator(); i.hasNext();) { + Bundle bundle = (Bundle) i.next(); + + if (bundle.getSymbolicName().equals(symbolicName)) { + if (versionMatches(bundle.getVersion(), versionRange)) + return bundle; + } + } + + return null; + } + public ExtensionPoint getExtensionPoint(String extensionPointUniqueIdentifier) { return (ExtensionPoint) extensionPoints.get(extensionPointUniqueIdentifier); } + public Bundle[] getFragments(Bundle bundle) { + Set set = (Set) fragments.get(bundle.getSymbolicName()); + if (set == null) + return new Bundle[0]; + + List result = new ArrayList(set.size()); + Version hostVersion = Version.parseVersion(bundle.getVersion()); + for (Iterator i = set.iterator(); i.hasNext();) { + Bundle fragment = (Bundle) i.next(); + String fragmentVersionOrRange = fragment.getFragmentHostVersion(); + + if (versionMatches(hostVersion, fragmentVersionOrRange)) + result.add(fragment); + } + + return (Bundle[]) result.toArray(new Bundle[result.size()]); + } + + private boolean versionMatches(String hostVersion, String versionOrRange) { + try { + Version version = Version.parseVersion(hostVersion); + return versionMatches(version, versionOrRange); + + } catch (IllegalArgumentException e) { + // ignore + } + + return false; + } + + /** + * Check if hostVersion is greater or equal fragmentVersion, or is included in fragment version range + * @param hostVersion Version + * @param versionOrRange Version or VersionRange + * @return true if matches, false otherwise + */ + private boolean versionMatches(Version hostVersion, String versionOrRange) { + if (versionOrRange == null) { + return true; + } + + try { + Version version = Version.parseVersion(versionOrRange); + if (hostVersion.compareTo(version) >= 0) + return true; + + } catch (IllegalArgumentException e) { + // wrong formatting, try VersionRange + } + + try { + VersionRange range = new VersionRange(versionOrRange); + if (range.isIncluded(hostVersion)) + return true; + + } catch (IllegalArgumentException e2) { + // wrong range formatting + } + + return false; + } + /* void setEnabled(Bundle bundle, boolean enabled); void start(Bundle bundle) throws BundleException; // XXX Create custom Exception Index: src/org/eclipse/pde/internal/runtime/registry/model/Folder.java =================================================================== RCS file: /cvsroot/eclipse/pde/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/model/Folder.java,v retrieving revision 1.2 diff -u -r1.2 Folder.java --- src/org/eclipse/pde/internal/runtime/registry/model/Folder.java 6 Jan 2009 15:37:49 -0000 1.2 +++ src/org/eclipse/pde/internal/runtime/registry/model/Folder.java 10 Mar 2009 12:19:34 -0000 @@ -20,6 +20,7 @@ public static final int F_SERVICES_IN_USE = 6; public static final int F_PROPERTIES = 7; public static final int F_USING_BUNDLES = 8; + public static final int F_FRAGMENTS = 9; private int id; private Object parent; @@ -55,6 +56,8 @@ return ((ServiceRegistration) parent).getProperties(); case F_USING_BUNDLES : return ((ServiceRegistration) parent).getUsingBundles(); + case F_FRAGMENTS : + return ((Bundle) parent).getFragments(); } return null; Index: src/org/eclipse/pde/internal/runtime/registry/model/Bundle.java =================================================================== RCS file: /cvsroot/eclipse/pde/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/model/Bundle.java,v retrieving revision 1.3 diff -u -r1.3 Bundle.java --- src/org/eclipse/pde/internal/runtime/registry/model/Bundle.java 6 Jan 2009 15:37:49 -0000 1.3 +++ src/org/eclipse/pde/internal/runtime/registry/model/Bundle.java 10 Mar 2009 12:19:34 -0000 @@ -29,6 +29,25 @@ private long id; private BundleLibrary[] libraries = new BundleLibrary[0]; + private String fragmentHost; + private String fragmentHostVersion; + + public void setFragmentHost(String fragmentHost) { + this.fragmentHost = fragmentHost; + } + + public String getFragmentHost() { + return fragmentHost; + } + + public String getFragmentHostVersion() { + return fragmentHostVersion; + } + + public void setFragmentHostVersion(String fragmentHostVersion) { + this.fragmentHostVersion = fragmentHostVersion; + } + public void setSymbolicName(String symbolicName) { this.symbolicName = symbolicName; } @@ -196,4 +215,10 @@ public int hashCode() { return (int) id; } + + public Bundle[] getFragments() { + if (model == null) + return new Bundle[0]; + return model.getFragments(this); + } } Index: src/org/eclipse/pde/internal/runtime/registry/model/LocalRegistryBackend.java =================================================================== RCS file: /cvsroot/eclipse/pde/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/model/LocalRegistryBackend.java,v retrieving revision 1.6 diff -u -r1.6 LocalRegistryBackend.java --- src/org/eclipse/pde/internal/runtime/registry/model/LocalRegistryBackend.java 13 Feb 2009 15:38:37 -0000 1.6 +++ src/org/eclipse/pde/internal/runtime/registry/model/LocalRegistryBackend.java 10 Mar 2009 12:19:34 -0000 @@ -111,10 +111,8 @@ if (monitor.isCanceled()) return; - if (newBundles[i].getHeaders().get(Constants.FRAGMENT_HOST) == null) { - Bundle ba = createBundleAdapter(newBundles[i]); - listener.addBundle(ba); - } + Bundle ba = createBundleAdapter(newBundles[i]); + listener.addBundle(ba); } } @@ -165,6 +163,25 @@ adapter.setEnabled(getIsEnabled(bundle)); adapter.setLocation(createLocation(bundle)); + String fragmentHost = (String) bundle.getHeaders().get(Constants.FRAGMENT_HOST); + if (fragmentHost != null) { + ManifestElement[] header; + try { + header = ManifestElement.parseHeader(Constants.FRAGMENT_HOST, fragmentHost); + + if (header.length > 0) { + ManifestElement host = header[0]; + adapter.setFragmentHost(host.getValue()); + String version = host.getAttribute(Constants.BUNDLE_VERSION_ATTRIBUTE); + if (version != null) { + adapter.setFragmentHostVersion(version); + } + } + } catch (BundleException e) { + PDERuntimePlugin.log(e); + } + } + BundlePrerequisite[] imports = (BundlePrerequisite[]) getManifestHeaderArray(bundle, Constants.REQUIRE_BUNDLE); if (imports != null) adapter.setImports(imports); Index: src/org/eclipse/pde/internal/runtime/pderuntimeresources.properties =================================================================== RCS file: /cvsroot/eclipse/pde/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/pderuntimeresources.properties,v retrieving revision 1.81 diff -u -r1.81 pderuntimeresources.properties --- src/org/eclipse/pde/internal/runtime/pderuntimeresources.properties 28 Jan 2009 15:07:45 -0000 1.81 +++ src/org/eclipse/pde/internal/runtime/pderuntimeresources.properties 10 Mar 2009 12:19:34 -0000 @@ -35,6 +35,8 @@ RegistryBrowser_Service=&Service RegistryBrowser_Services=services RegistryBrowserLabelProvider_contributedBy=contributed by: {0} +RegistryBrowserLabelProvider_fragment=\ fragment +RegistryBrowserLabelProvider_Fragments=Fragments RegistryBrowserLabelProvider_nameIdBind={0} [{1}] RegistryBrowserLabelProvider_Properties=Properties RegistryBrowserLabelProvider_RegisteredBy=Registered by Index: src/org/eclipse/pde/internal/runtime/PDERuntimeMessages.java =================================================================== RCS file: /cvsroot/eclipse/pde/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/PDERuntimeMessages.java,v retrieving revision 1.31 diff -u -r1.31 PDERuntimeMessages.java --- src/org/eclipse/pde/internal/runtime/PDERuntimeMessages.java 28 Jan 2009 15:07:45 -0000 1.31 +++ src/org/eclipse/pde/internal/runtime/PDERuntimeMessages.java 10 Mar 2009 12:19:34 -0000 @@ -95,6 +95,10 @@ public static String RegistryBrowserLabelProvider_contributedBy; + public static String RegistryBrowserLabelProvider_fragment; + + public static String RegistryBrowserLabelProvider_Fragments; + public static String RegistryBrowserLabelProvider_Properties; public static String RegistryBrowserLabelProvider_RegisteredBy; Index: src/org/eclipse/pde/internal/runtime/registry/RegistryBrowserContentProvider.java =================================================================== RCS file: /cvsroot/eclipse/pde/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/RegistryBrowserContentProvider.java,v retrieving revision 1.36 diff -u -r1.36 RegistryBrowserContentProvider.java --- src/org/eclipse/pde/internal/runtime/registry/RegistryBrowserContentProvider.java 13 Feb 2009 15:51:15 -0000 1.36 +++ src/org/eclipse/pde/internal/runtime/registry/RegistryBrowserContentProvider.java 10 Mar 2009 12:19:34 -0000 @@ -80,6 +80,8 @@ folders.add(new Folder(Folder.F_REGISTERED_SERVICES, bundle)); if (bundle.getServicesInUse().length > 0) folders.add(new Folder(Folder.F_SERVICES_IN_USE, bundle)); + if (bundle.getFragments().length > 0) + folders.add(new Folder(Folder.F_FRAGMENTS, bundle)); return folders.toArray(); } Index: src/org/eclipse/pde/internal/runtime/registry/RegistryBrowserLabelProvider.java =================================================================== RCS file: /cvsroot/eclipse/pde/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/RegistryBrowserLabelProvider.java,v retrieving revision 1.39 diff -u -r1.39 RegistryBrowserLabelProvider.java --- src/org/eclipse/pde/internal/runtime/registry/RegistryBrowserLabelProvider.java 12 Jan 2009 20:05:15 -0000 1.39 +++ src/org/eclipse/pde/internal/runtime/registry/RegistryBrowserLabelProvider.java 10 Mar 2009 12:19:34 -0000 @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2008 IBM Corporation and others. + * Copyright (c) 2000, 2009 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -168,6 +168,8 @@ return fPropertyImage; case Folder.F_USING_BUNDLES : return fPluginsImage; + case Folder.F_FRAGMENTS : + return fPluginsImage; } return null; } @@ -203,11 +205,15 @@ public String getText(Object element) { if (element instanceof Bundle) { - String id = ((Bundle) element).getSymbolicName(); - String version = ((Bundle) element).getVersion(); - if (version == null) - return id; - return id + " (" + version + ")"; //$NON-NLS-1$ //$NON-NLS-2$ + Bundle bundle = ((Bundle) element); + StringBuffer sb = new StringBuffer(bundle.getSymbolicName()); + String version = bundle.getVersion(); + if (version != null) + sb.append(" (").append(version).append(")"); //$NON-NLS-1$ //$NON-NLS-2$ + String host = bundle.getFragmentHost(); + if (host != null) + sb.append("; ").append(host).append(PDERuntimeMessages.RegistryBrowserLabelProvider_fragment);// XXX NLSize //$NON-NLS-1$ + return sb.toString(); } if (element instanceof ServiceRegistration) { @@ -244,6 +250,8 @@ return PDERuntimeMessages.RegistryBrowserLabelProvider_Properties; case Folder.F_USING_BUNDLES : return PDERuntimeMessages.RegistryBrowserLabelProvider_UsingBundles; + case Folder.F_FRAGMENTS : + return PDERuntimeMessages.RegistryBrowserLabelProvider_Fragments; } } if (element instanceof Extension) {