1 11 package org.eclipse.core.internal.runtime; 12 13 import java.util.*; 14 import org.eclipse.core.runtime.*; 15 16 22 public final class AdapterManagerListener implements IRegistryChangeListener, IAdapterManagerProvider { 23 public static final String ADAPTER_POINT_ID = "org.eclipse.core.runtime.adapters"; 25 private AdapterManager theAdapterManager; 26 27 30 public AdapterManagerListener() { 31 theAdapterManager = AdapterManager.getDefault(); 32 theAdapterManager.registerLazyFactoryProvider(this); 33 } 34 35 40 public boolean addFactories(AdapterManager adapterManager) { 41 IExtensionPoint point = RegistryFactory.getRegistry().getExtensionPoint(ADAPTER_POINT_ID); 42 if (point == null) 43 return false; 44 45 boolean factoriesAdded = false; 46 IExtension[] extensions = point.getExtensions(); 47 for (int i = 0; i < extensions.length; i++) { 48 IConfigurationElement[] elements = extensions[i].getConfigurationElements(); 49 for (int j = 0; j < elements.length; j++) { 50 AdapterFactoryProxy proxy = AdapterFactoryProxy.createProxy(elements[j]); 51 if (proxy != null) { 52 adapterManager.registerFactory(proxy, proxy.getAdaptableType()); 53 factoriesAdded = true; 54 } 55 } 56 } 57 RegistryFactory.getRegistry().addRegistryChangeListener(this); 58 return factoriesAdded; 59 } 60 61 private void registerExtension(IExtension extension) { 62 IConfigurationElement[] elements = extension.getConfigurationElements(); 63 for (int j = 0; j < elements.length; j++) { 64 AdapterFactoryProxy proxy = AdapterFactoryProxy.createProxy(elements[j]); 65 if (proxy != null) 66 theAdapterManager.registerFactory(proxy, proxy.getAdaptableType()); 67 } 68 } 69 70 73 public synchronized void registryChanged(IRegistryChangeEvent event) { 74 HashSet toRemove = null; 76 IExtensionDelta[] deltas = event.getExtensionDeltas(); 77 boolean found = false; 78 for (int i = 0; i < deltas.length; i++) { 79 if (!ADAPTER_POINT_ID.equals(deltas[i].getExtensionPoint().getUniqueIdentifier())) 81 continue; 82 found = true; 83 if (deltas[i].getKind() == IExtensionDelta.ADDED) 84 registerExtension(deltas[i].getExtension()); 85 else { 86 if (toRemove == null) 88 toRemove = new HashSet(); 89 toRemove.add(deltas[i].getExtension().getUniqueIdentifier()); 90 } 91 } 92 if (found) 94 theAdapterManager.flushLookup(); 95 if (toRemove == null) 96 return; 97 for (Iterator it = theAdapterManager.getFactories().values().iterator(); it.hasNext();) { 99 for (Iterator it2 = ((List) it.next()).iterator(); it2.hasNext();) { 100 IAdapterFactory factory = (IAdapterFactory) it2.next(); 101 if (factory instanceof AdapterFactoryProxy) { 102 String ext = ((AdapterFactoryProxy) factory).getOwnerId(); 103 if (toRemove.contains(ext)) 104 it2.remove(); 105 } 106 } 107 } 108 } 109 110 114 public synchronized void stop() { 115 RegistryFactory.getRegistry().removeRegistryChangeListener(this); 116 } 117 } 118 | Popular Tags |