You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by oz...@apache.org on 2009/10/21 16:24:37 UTC

svn commit: r828032 - /incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintExtender.java

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



Re: svn commit: r828032 - /incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintExtender.java

Posted by The Dweller <ba...@gmail.com>.
Ouch.. chalk up another victim of eclipse making editor preferences 'per
workspace'. I'll revert the change, and have another bash =)

Ozzy.

On Thu, Oct 22, 2009 at 2:38 PM, Jarek Gawor <jg...@gmail.com> wrote:

> 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 <ba...@gmail.com> 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 <gn...@gmail.com>
> 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,  <oz...@apache.org> 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
> >>
> >
>

Re: svn commit: r828032 - /incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintExtender.java

Posted by Jarek Gawor <jg...@gmail.com>.
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 <ba...@gmail.com> 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 <gn...@gmail.com> 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,  <oz...@apache.org> 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
>>
>

Re: svn commit: r828032 - /incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintExtender.java

Posted by The Dweller <ba...@gmail.com>.
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 <gn...@gmail.com> 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,  <oz...@apache.org> 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
>

Re: svn commit: r828032 - /incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BlueprintExtender.java

Posted by Guillaume Nodet <gn...@gmail.com>.
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,  <oz...@apache.org> 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