Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: fe1fe8177759d35f81917b9ac1a01ee6c95c886c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/*******************************************************************************
 * Copyright (c) 2006, 2014 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.core.runtime;

import org.eclipse.core.internal.registry.osgi.OSGIUtils;
import org.eclipse.core.runtime.spi.RegistryContributor;
import org.osgi.framework.Bundle;

/**
 * The contributor factory creates new registry contributors for use in OSGi-based
 * registries.
 * <p>
 * This class can not be extended or instantiated by clients.
 * </p>
 * @since org.eclipse.equinox.registry 3.2
 * @noinstantiate This class is not intended to be instantiated by clients.
 * @noextend This class is not intended to be subclassed by clients.
 */
public final class ContributorFactoryOSGi {

	/**
	 * Creates registry contributor object based on a Bundle. The bundle must not
	 * be <code>null</code>.
	 *
	 * @param contributor bundle associated with the contribution
	 * @return new registry contributor based on the Bundle
	 */
	public static IContributor createContributor(Bundle contributor) {
		String id = Long.toString(contributor.getBundleId());
		String name = contributor.getSymbolicName();
		String hostId = null;
		String hostName = null;

		// determine host properties, if any
		if (OSGIUtils.getDefault().isFragment(contributor)) {
			Bundle[] hosts = OSGIUtils.getDefault().getHosts(contributor);
			if (hosts != null) {
				Bundle hostBundle = hosts[0];
				hostId = Long.toString(hostBundle.getBundleId());
				hostName = hostBundle.getSymbolicName();
			}
		}

		return new RegistryContributor(id, name, hostId, hostName);
	}

	/**
	 * Returns the OSGi bundle used to define this contributor. If a fragment
	 * was used to create the contributor, the fragment is returned.
	 *
	 * <p>The method may return null if the contributor is not based on a bundle,
	 * if the bundle can't be found, or if the bundle is presently unresolved or
	 * uninstalled.</p>
	 *
	 * @param contributor bundle-based registry contributor
	 * @return the actual OSGi bundle associated with this contributor
	 * @since org.eclipse.equinox.registry 3.3
	 */
	public static Bundle resolve(IContributor contributor) {
		if (contributor == null)
			return null;
		if (!(contributor instanceof RegistryContributor))
			return null;
		String symbolicName = ((RegistryContributor) contributor).getActualName();
		return OSGIUtils.getDefault().getBundle(symbolicName);
	}
}

Back to the top