1 12 13 package org.eclipse.equinox.http.registry.internal; 14 15 import java.util.ArrayList ; 16 import java.util.List ; 17 import org.eclipse.core.runtime.*; 18 import org.osgi.framework.*; 19 20 public class ResourceManager implements ExtensionPointTracker.Listener { 21 22 private static final String RESOURCES_EXTENSION_POINT = "org.eclipse.equinox.http.registry.resources"; 24 private static final String HTTPCONTEXT_NAME = "httpcontext-name"; 26 private static final String BASE_NAME = "base-name"; 28 private static final String ALIAS = "alias"; 30 private static final String RESOURCE = "resource"; 32 private static final String HTTPCONTEXT_ID = "httpcontextId"; 34 private static final String SERVICESELECTOR = "serviceSelector"; 36 private static final String CLASS = "class"; 38 private static final String FILTER = "filter"; 40 private ExtensionPointTracker tracker; 41 42 private List registered = new ArrayList (); 43 44 private HttpRegistryManager httpRegistryManager; 45 46 private ServiceReference reference; 47 48 public ResourceManager(HttpRegistryManager httpRegistryManager, ServiceReference reference, IExtensionRegistry registry) { 49 this.httpRegistryManager = httpRegistryManager; 50 this.reference = reference; 51 tracker = new ExtensionPointTracker(registry, RESOURCES_EXTENSION_POINT, this); 52 } 53 54 public void start() { 55 tracker.open(); 56 } 57 58 public void stop() { 59 tracker.close(); 60 } 61 62 public void added(IExtension extension) { 63 IConfigurationElement[] elements = extension.getConfigurationElements(); 64 for (int i = 0; i < elements.length; i++) { 65 IConfigurationElement serviceSelectorElement = elements[i]; 66 if (!SERVICESELECTOR.equals(serviceSelectorElement.getName())) 67 continue; 68 69 org.osgi.framework.Filter serviceSelector = null; 70 String clazz = serviceSelectorElement.getAttribute(CLASS); 71 if (clazz != null) { 72 try { 73 serviceSelector = (org.osgi.framework.Filter) serviceSelectorElement.createExecutableExtension(CLASS); 74 } catch (CoreException e) { 75 e.printStackTrace(); 77 return; 78 } 79 } else { 80 String filter = serviceSelectorElement.getAttribute(FILTER); 81 if (filter == null) 82 return; 83 84 try { 85 serviceSelector = FrameworkUtil.createFilter(filter); 86 } catch (InvalidSyntaxException e) { 87 e.printStackTrace(); 89 return; 90 } 91 } 92 93 if (! serviceSelector.match(reference)) 94 return; 95 96 break; 97 } 98 99 100 for (int i = 0; i < elements.length; i++) { 101 IConfigurationElement resourceElement = elements[i]; 102 if (!RESOURCE.equals(resourceElement.getName())) 103 continue; 104 105 String alias = resourceElement.getAttribute(ALIAS); 106 if (alias == null) 107 continue; 109 String baseName = resourceElement.getAttribute(BASE_NAME); 110 if (baseName == null) 111 baseName = ""; 113 String httpContextId = resourceElement.getAttribute(HTTPCONTEXT_ID); 114 if (httpContextId == null) { 115 httpContextId = resourceElement.getAttribute(HTTPCONTEXT_NAME); 116 } 117 118 if (httpContextId != null && httpContextId.indexOf('.') == -1) 119 httpContextId = resourceElement.getNamespaceIdentifier() + "." + httpContextId; 121 if (httpRegistryManager.addResourcesContribution(alias, baseName, httpContextId, extension.getContributor())) 122 registered.add(resourceElement); 123 } 124 } 125 126 public void removed(IExtension extension) { 127 IConfigurationElement[] elements = extension.getConfigurationElements(); 128 for (int i = 0; i < elements.length; i++) { 129 IConfigurationElement resourceElement = elements[i]; 130 if (registered.remove(resourceElement)) { 131 String alias = resourceElement.getAttribute(ALIAS); 132 httpRegistryManager.removeContribution(alias); 133 } 134 } 135 } 136 } 137 | Popular Tags |