I agree with Guillaume plus I think it would be good to keep the formatting consistent.
Jarek On Thu, Oct 22, 2009 at 6:41 AM, The Dweller <[email protected]> wrote: > I put the override processing afterward to keep it together logically as a > unit. It's certainly more efficient to tie it into the initial list build, > at the cost of mixing the two concerns of building a list, and finding > overrides for items on a list. > > I guess if we're happy that the approach of building the list isnt likely to > change, or that if it does it will do so in a manner that remains close > enough the the current, then I'm fine with moving the override check into > addEntry/addEntries. (or rather into a method invoked from both). > > The concern would be mainly that if the list building is modified to call a > new 'addXXX' method, that such a change would need to also invoke the > 'checkOverride' method. > > Regards, > Ozzy > > On Wed, Oct 21, 2009 at 5:02 PM, Guillaume Nodet <[email protected]> wrote: > >> 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 >> >
