Wouldn't it be nicer to do that on the fly in the addEntry / addEntries method instead of iterating after the list has been built ?
On Wed, Oct 21, 2009 at 16:24, <[email protected]> wrote: > Author: ozzy > Date: Wed Oct 21 14:24:37 2009 > New Revision: 828032 > > URL: http://svn.apache.org/viewvc?rev=828032&view=rev > Log: > ARIES-25 allow Blueprint extender to find blueprint XML within bundle private > storage. > > Modified: > > incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintExtender.java > > Modified: > incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintExtender.java > URL: > http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintExtender.java?rev=828032&r1=828031&r2=828032&view=diff > ============================================================================== > --- > incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintExtender.java > (original) > +++ > incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintExtender.java > Wed Oct 21 14:24:37 2009 > @@ -18,12 +18,15 @@ > */ > package org.apache.aries.blueprint.container; > > +import java.io.File; > +import java.net.MalformedURLException; > import java.net.URL; > import java.util.ArrayList; > import java.util.Collections; > import java.util.Comparator; > import java.util.Enumeration; > import java.util.HashMap; > +import java.util.Iterator; > import java.util.List; > import java.util.Map; > import java.util.concurrent.Executors; > @@ -38,8 +41,8 @@ > import org.osgi.framework.BundleContext; > import org.osgi.framework.BundleEvent; > import org.osgi.framework.Constants; > -import org.osgi.framework.SynchronousBundleListener; > import org.osgi.framework.ServiceReference; > +import org.osgi.framework.SynchronousBundleListener; > import org.osgi.service.blueprint.container.BlueprintContainer; > import org.osgi.service.blueprint.container.BlueprintEvent; > import org.slf4j.Logger; > @@ -172,6 +175,18 @@ > } > } > > + private String getFilePart(URL url) > + { > + String path = url.getPath(); > + int index = path.lastIndexOf('/'); > + return path.substring(index+1); > + } > + > + private String cachePath(Bundle bundle, String filePath) > + { > + return bundle.getSymbolicName() + "/" + bundle.getVersion() + "/" + > filePath; > + } > + > private void checkBundle(Bundle bundle) { > LOGGER.debug("Scanning bundle {} for blueprint application", > bundle.getSymbolicName()); > try { > @@ -202,7 +217,45 @@ > addEntry(bundle, name, pathList); > } > } > - } > + } > + > + //Override bundle specified blueprint XML with > + //XML already in the private storage. > + Iterator<Object> pathIter = pathList.iterator(); > + List<Object> overridden = new ArrayList<Object>(); > + while (pathIter.hasNext()) { > + Object path = pathIter.next(); > + if (path instanceof URL) { > + URL url = (URL) path; > + File privateDataVersion = > context.getDataFile(cachePath( > + bundle, > "OSGI-INF/blueprint/" + getFilePart(url))); > + if (privateDataVersion != null && > privateDataVersion.exists()) { > + try { > + > overridden.add(privateDataVersion.toURL()); > + pathIter.remove(); > + } catch > (MalformedURLException e) { > + > LOGGER.error("Unexpected URL Conversion Issue", e); > + } > + } > + } else if (path instanceof String) { > + String s = (String) path; > + File privateDataVersion = > context.getDataFile(cachePath( > + bundle, s)); > + if (privateDataVersion != null && > privateDataVersion.exists()) { > + try { > + > overridden.add(privateDataVersion.toURL()); > + pathIter.remove(); > + } catch > (MalformedURLException e) { > + > LOGGER.error("Unexpected URL Conversion Issue", e); > + } > + } > + } else { > + throw new > IllegalArgumentException("Unexpected path type: " > + + path.getClass()); > + } > + } > + pathList.addAll(overridden); > + > if (!pathList.isEmpty()) { > LOGGER.debug("Found blueprint application in bundle {} with > paths: {}", bundle.getSymbolicName(), pathList); > // Check compatibility > > > -- Cheers, Guillaume Nodet ------------------------ Blog: http://gnodet.blogspot.com/ ------------------------ Open Source SOA http://fusesource.com
