You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2011/03/15 12:29:44 UTC

svn commit: r1081738 - /karaf/branches/karaf-2.1.x/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java

Author: jbonofre
Date: Tue Mar 15 11:29:44 2011
New Revision: 1081738

URL: http://svn.apache.org/viewvc?rev=1081738&view=rev
Log:
[KARAF-505] Karaf now supports the OBR resolver including optional "flag".

Modified:
    karaf/branches/karaf-2.1.x/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java

Modified: karaf/branches/karaf-2.1.x/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.1.x/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java?rev=1081738&r1=1081737&r2=1081738&view=diff
==============================================================================
--- karaf/branches/karaf-2.1.x/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java (original)
+++ karaf/branches/karaf-2.1.x/features/core/src/main/java/org/apache/karaf/features/internal/FeaturesServiceImpl.java Tue Mar 15 11:29:44 2011
@@ -425,13 +425,31 @@ public class FeaturesServiceImpl impleme
         if (resolver == null || resolver.length() == 0) {
         	return feature.getBundles();
         }
+        boolean optional = false;
+        if (resolver.startsWith("(") && resolver.endsWith(")")) {
+            resolver = resolver.substring(1, resolver.length() - 1);
+            optional = true;
+        }
         // Else, find the resolver
         String filter = "(&(" + Constants.OBJECTCLASS + "=" + Resolver.class.getName() + ")(name=" + resolver + "))";
         ServiceTracker tracker = new ServiceTracker(bundleContext, FrameworkUtil.createFilter(filter), null);
         tracker.open();
         try {
-            Resolver r = (Resolver) tracker.waitForService(resolverTimeout);
-            return r.resolve(feature);
+            if (optional) {
+                Resolver r = (Resolver) tracker.getService();
+                if (r != null) {
+                    return r.resolve(feature);
+                } else {
+                    LOGGER.debug("Optional resolver '{}' not found, using the default resolver", resolver);
+                    return feature.getBundles();
+                }
+            } else {
+                Resolver r = (Resolver) tracker.waitForService(resolverTimeout);
+                if (r == null) {
+                    throw new Exception("Unable to find required resolver '" + resolver + "'");
+                }
+                return r.resolve(feature);
+            }
         } finally {
             tracker.close();
         }