-extension | bnd
Description: /** * Add any extensions listed * * @param list * @param rri */ @Override protected void addExtensions(Set<Object> list) { // // <bsn>; version=<range> // Parameters extensions = new Parameters(getProperty(EXTENSION)); Map<DownloadBlocker,Attrs> blockers = new HashMap<DownloadBlocker,Attrs>();

- # -extension
  Project

      /**
       * Add any extensions listed
       *
       * @param list
       * @param rri
       */
      @Override
      protected void addExtensions(Set<Object> list) {
      	//
      	// <bsn>; version=<range>
      	//
      	Parameters extensions = new Parameters(getProperty(EXTENSION));
      	Map<DownloadBlocker,Attrs> blockers = new HashMap<DownloadBlocker,Attrs>();

      	for (Entry<String,Attrs> i : extensions.entrySet()) {
      		String bsn = removeDuplicateMarker(i.getKey());
      		String stringRange = i.getValue().get(VERSION_ATTRIBUTE);

      		trace("Adding extension %s-%s", bsn, stringRange);

      		if (stringRange == null)
      			stringRange = Version.LOWEST.toString();
      		else if (!VersionRange.isVersionRange(stringRange)) {
      			error("Invalid version range %s on extension %s", stringRange, bsn);
      			continue;
      		}
      		try {
      			SortedSet<ResourceDescriptor> matches = resourceRepositoryImpl.find(null, bsn, new VersionRange(
      					stringRange));
      			if (matches.isEmpty()) {
      				error("Extension %s;version=%s not found in base repo", bsn, stringRange);
      				continue;
      			}

      			DownloadBlocker blocker = new DownloadBlocker(this);
      			blockers.put(blocker, i.getValue());
      			resourceRepositoryImpl.getResource(matches.last().id, blocker);
      		}
      		catch (Exception e) {
      			error("Failed to load extension %s-%s, %s", bsn, stringRange, e);
      		}
      	}

      	trace("Found extensions %s", blockers);

      	for (Entry<DownloadBlocker,Attrs> blocker : blockers.entrySet()) {
      		try {
      			String reason = blocker.getKey().getReason();
      			if (reason != null) {
      				error("Extension load failed: %s", reason);
      				continue;
      			}

      			URLClassLoader cl = new URLClassLoader(new URL[] {
      				blocker.getKey().getFile().toURI().toURL()
      			}, getClass().getClassLoader());
      			Enumeration<URL> manifests = cl.getResources("META-INF/MANIFEST.MF");
      			while (manifests.hasMoreElements()) {
      				Manifest m = new Manifest(manifests.nextElement().openStream());
      				Parameters activators = new Parameters(m.getMainAttributes().getValue("Extension-Activator"));
      				for (Entry<String,Attrs> e : activators.entrySet()) {
      					try {
      						Class< ? > c = cl.loadClass(e.getKey());
      						ExtensionActivator extensionActivator = (ExtensionActivator) c.newInstance();
      						customize(extensionActivator, blocker.getValue());
      						List< ? > plugins = extensionActivator.activate(this, blocker.getValue());
      						list.add(extensionActivator);

      						if (plugins != null)
      							for (Object plugin : plugins) {
      								list.add(plugin);
      							}
      					}
      					catch (ClassNotFoundException cnfe) {
      						error("Loading extension %s, extension activator missing: %s (ignored)", blocker,
      								e.getKey());
      					}
      				}
      			}
      		}
      		catch (Exception e) {
      			error("failed to install extension %s due to %s", blocker, e);
      		}
      	}
      }