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
>>
>

Reply via email to