Lines 10-25
Link Here
|
10 |
*******************************************************************************/ |
10 |
*******************************************************************************/ |
11 |
package org.eclipse.pde.internal.runtime.registry; |
11 |
package org.eclipse.pde.internal.runtime.registry; |
12 |
|
12 |
|
13 |
import java.util.ArrayList; |
13 |
import java.util.*; |
14 |
import java.util.Hashtable; |
|
|
15 |
import org.eclipse.core.runtime.*; |
14 |
import org.eclipse.core.runtime.*; |
16 |
import org.eclipse.jface.viewers.ITreeContentProvider; |
15 |
import org.eclipse.jface.viewers.ITreeContentProvider; |
17 |
import org.eclipse.jface.viewers.Viewer; |
16 |
import org.eclipse.jface.viewers.Viewer; |
18 |
import org.eclipse.osgi.util.ManifestElement; |
17 |
import org.eclipse.osgi.util.ManifestElement; |
|
|
18 |
import org.eclipse.pde.internal.runtime.PDERuntimePlugin; |
19 |
import org.osgi.framework.*; |
19 |
import org.osgi.framework.*; |
20 |
|
20 |
|
21 |
public class RegistryBrowserContentProvider implements ITreeContentProvider { |
21 |
public class RegistryBrowserContentProvider implements ITreeContentProvider { |
22 |
private Hashtable fPluginMap = new Hashtable(); |
|
|
23 |
private Hashtable fExtensionPointMap = new Hashtable(); |
22 |
private Hashtable fExtensionPointMap = new Hashtable(); |
24 |
public boolean isInExtensionSet; |
23 |
public boolean isInExtensionSet; |
25 |
|
24 |
|
Lines 44-49
Link Here
|
44 |
return children; |
43 |
return children; |
45 |
} |
44 |
} |
46 |
|
45 |
|
|
|
46 |
/** |
47 |
* Resets folder's previously cached knowledge about it's children. |
48 |
*/ |
49 |
public void refresh() { |
50 |
children = null; |
51 |
} |
52 |
|
47 |
public int getFolderId() { |
53 |
public int getFolderId() { |
48 |
return id; |
54 |
return id; |
49 |
} |
55 |
} |
Lines 92-97
Link Here
|
92 |
} |
98 |
} |
93 |
} |
99 |
} |
94 |
|
100 |
|
|
|
101 |
/** |
102 |
* Creates contents adapter for given folder id. |
103 |
* @param object Folder contents to be wrapped in adapter |
104 |
* @param id Type of folder |
105 |
* @return Adapter |
106 |
*/ |
95 |
static protected PluginObjectAdapter createAdapter(Object object, int id) { |
107 |
static protected PluginObjectAdapter createAdapter(Object object, int id) { |
96 |
if (id == IBundleFolder.F_EXTENSIONS) |
108 |
if (id == IBundleFolder.F_EXTENSIONS) |
97 |
return new ExtensionAdapter(object); |
109 |
return new ExtensionAdapter(object); |
Lines 100-115
Link Here
|
100 |
return new PluginObjectAdapter(object); |
112 |
return new PluginObjectAdapter(object); |
101 |
} |
113 |
} |
102 |
|
114 |
|
103 |
protected Object[] createPluginFolders(Bundle bundle) { |
|
|
104 |
Object[] array = new Object[5]; |
105 |
array[0] = new BundleFolder(bundle, IBundleFolder.F_LOCATION); |
106 |
array[1] = new BundleFolder(bundle, IBundleFolder.F_IMPORTS); |
107 |
array[2] = new BundleFolder(bundle, IBundleFolder.F_LIBRARIES); |
108 |
array[3] = new BundleFolder(bundle, IBundleFolder.F_EXTENSION_POINTS); |
109 |
array[4] = new BundleFolder(bundle, IBundleFolder.F_EXTENSIONS); |
110 |
return array; |
111 |
} |
112 |
|
113 |
public void dispose() { // nothing to dispose |
115 |
public void dispose() { // nothing to dispose |
114 |
} |
116 |
} |
115 |
|
117 |
|
Lines 131-157
Link Here
|
131 |
if (element instanceof ConfigurationElementAdapter) |
133 |
if (element instanceof ConfigurationElementAdapter) |
132 |
return ((ConfigurationElementAdapter) element).getChildren(); |
134 |
return ((ConfigurationElementAdapter) element).getChildren(); |
133 |
|
135 |
|
134 |
if (element instanceof PluginObjectAdapter) |
136 |
if (element instanceof PluginAdapter) { |
135 |
element = ((PluginObjectAdapter) element).getObject(); |
137 |
PluginAdapter bundle = (PluginAdapter) element; |
136 |
|
138 |
|
137 |
if (element instanceof Bundle) { |
139 |
Object[] folders = bundle.getChildren(); |
138 |
Bundle bundle = (Bundle) element; |
|
|
139 |
String bundleID = new Long(bundle.getBundleId()).toString(); |
140 |
Object[] folders = (Object[]) fPluginMap.get(bundleID); |
141 |
if (folders == null) { |
142 |
folders = createPluginFolders(bundle); |
143 |
|
144 |
ArrayList folderList = new ArrayList(); |
145 |
for (int i = 0; i < folders.length; i++) { |
146 |
if (folders[i] != null && ((IBundleFolder) folders[i]).getChildren() != null || ((IBundleFolder) folders[i]).getFolderId() == IBundleFolder.F_LOCATION) |
147 |
folderList.add(folders[i]); |
148 |
} |
149 |
folders = folderList.toArray(new Object[folderList.size()]); |
150 |
|
140 |
|
151 |
fPluginMap.put(bundleID, folders); |
141 |
// filter out empty folders |
|
|
142 |
ArrayList folderList = new ArrayList(); |
143 |
for (int i = 0; i < folders.length; i++) { |
144 |
if (folders[i] != null && ((IBundleFolder) folders[i]).getChildren() != null || ((IBundleFolder) folders[i]).getFolderId() == IBundleFolder.F_LOCATION) |
145 |
folderList.add(folders[i]); |
152 |
} |
146 |
} |
|
|
147 |
folders = folderList.toArray(new Object[folderList.size()]); |
148 |
|
153 |
return folders; |
149 |
return folders; |
154 |
} |
150 |
} |
|
|
151 |
|
152 |
if (element instanceof PluginObjectAdapter) |
153 |
element = ((PluginObjectAdapter) element).getObject(); |
154 |
|
155 |
if (element instanceof IBundleFolder) { |
155 |
if (element instanceof IBundleFolder) { |
156 |
IBundleFolder folder = (IBundleFolder) element; |
156 |
IBundleFolder folder = (IBundleFolder) element; |
157 |
isInExtensionSet = folder.getFolderId() == IBundleFolder.F_EXTENSIONS; |
157 |
isInExtensionSet = folder.getFolderId() == IBundleFolder.F_EXTENSIONS; |
Lines 185-191
Link Here
|
185 |
return null; |
185 |
return null; |
186 |
} |
186 |
} |
187 |
|
187 |
|
188 |
static Object[] getFolderChildren(Bundle bundle, int id) { |
188 |
protected static Object[] getFolderChildren(Bundle bundle, int id) { |
189 |
Object[] array = null; |
189 |
Object[] array = null; |
190 |
String bundleId = bundle.getSymbolicName(); |
190 |
String bundleId = bundle.getSymbolicName(); |
191 |
switch (id) { |
191 |
switch (id) { |
Lines 201-206
Link Here
|
201 |
case IBundleFolder.F_LIBRARIES : |
201 |
case IBundleFolder.F_LIBRARIES : |
202 |
array = getManifestHeaderArray(bundle, Constants.BUNDLE_CLASSPATH); |
202 |
array = getManifestHeaderArray(bundle, Constants.BUNDLE_CLASSPATH); |
203 |
break; |
203 |
break; |
|
|
204 |
case IBundleFolder.F_REGISTERED_SERVICES : |
205 |
return getServices(bundle, IBundleFolder.F_REGISTERED_SERVICES); |
206 |
case IBundleFolder.F_SERVICES_IN_USE : |
207 |
return getServices(bundle, IBundleFolder.F_SERVICES_IN_USE); |
204 |
} |
208 |
} |
205 |
Object[] result = null; |
209 |
Object[] result = null; |
206 |
if (array != null && array.length > 0) { |
210 |
if (array != null && array.length > 0) { |
Lines 212-217
Link Here
|
212 |
return result; |
216 |
return result; |
213 |
} |
217 |
} |
214 |
|
218 |
|
|
|
219 |
protected static Object[] getServices(Bundle bundle, int type) { |
220 |
Set result = new HashSet(); |
221 |
|
222 |
try { |
223 |
ServiceReference[] references = PDERuntimePlugin.getDefault().getBundleContext().getAllServiceReferences(null, null); |
224 |
|
225 |
for (int i = 0; i < references.length; i++) { |
226 |
ServiceReference ref = references[i]; |
227 |
|
228 |
if ((type == IBundleFolder.F_REGISTERED_SERVICES) && (bundle.equals(ref.getBundle()))) { |
229 |
result.add(new ServiceReferenceAdapter(ref)); |
230 |
} |
231 |
|
232 |
Bundle[] usingBundles = ref.getUsingBundles(); |
233 |
if ((type == IBundleFolder.F_SERVICES_IN_USE) && (usingBundles != null && Arrays.asList(usingBundles).contains(bundle))) { |
234 |
result.add(new ServiceReferenceAdapter(ref)); |
235 |
} |
236 |
} |
237 |
|
238 |
} catch (InvalidSyntaxException e) { // nothing |
239 |
} |
240 |
|
241 |
if (result.size() == 0) |
242 |
return null; |
243 |
|
244 |
return result.toArray(new ServiceReferenceAdapter[result.size()]); |
245 |
} |
246 |
|
215 |
public Object getParent(Object element) { |
247 |
public Object getParent(Object element) { |
216 |
return null; |
248 |
return null; |
217 |
} |
249 |
} |