[KARAF-3520] implement ignoreServiceReqs using isEffective in 
SubsystemResolveContext


Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/e96c40da
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/e96c40da
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/e96c40da

Branch: refs/heads/master
Commit: e96c40da801390cc932116e088a543e6a593eabc
Parents: 2092a93
Author: Christian Schneider <[email protected]>
Authored: Thu Jun 18 10:31:57 2015 +0200
Committer: Christian Schneider <[email protected]>
Committed: Thu Jun 18 10:31:57 2015 +0200

----------------------------------------------------------------------
 .../karaf/features/internal/osgi/Activator.java  |  4 ++--
 .../internal/region/SubsystemResolveContext.java |  9 ++++++++-
 .../internal/resolver/ResourceBuilder.java       | 19 -------------------
 3 files changed, 10 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/e96c40da/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
----------------------------------------------------------------------
diff --git 
a/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
 
b/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
index cf18497..954ebce 100644
--- 
a/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
+++ 
b/features/core/src/main/java/org/apache/karaf/features/internal/osgi/Activator.java
@@ -34,10 +34,10 @@ import org.apache.karaf.features.FeaturesListener;
 import org.apache.karaf.features.FeaturesService;
 import org.apache.karaf.features.internal.management.FeaturesServiceMBeanImpl;
 import org.apache.karaf.features.internal.region.DigraphHelper;
+import org.apache.karaf.features.internal.region.SubsystemResolveContext;
 import org.apache.karaf.features.internal.repository.AggregateRepository;
 import org.apache.karaf.features.internal.repository.JsonRepository;
 import org.apache.karaf.features.internal.repository.XmlRepository;
-import org.apache.karaf.features.internal.resolver.ResourceBuilder;
 import org.apache.karaf.features.internal.service.BootFeaturesInstaller;
 import org.apache.karaf.features.internal.service.EventAdminListener;
 import org.apache.karaf.features.internal.service.FeatureFinder;
@@ -180,7 +180,7 @@ public class Activator extends BaseActivator {
         int scheduleMaxRun = getInt("scheduleMaxRun", 
FeaturesService.DEFAULT_SCHEDULE_MAX_RUN);
         String blacklisted = getString("blacklisted", new 
File(System.getProperty("karaf.etc"), 
"blacklisted.properties").toURI().toString());
         boolean ignoreServiceReqs = getBoolean("ignoreServiceReqs", true);
-        ResourceBuilder.setIgnoreServiceReqs(ignoreServiceReqs);
+        SubsystemResolveContext.setIgnoreServiceReqs(ignoreServiceReqs);
         StateStorage stateStorage = new StateStorage() {
             @Override
             protected InputStream getInputStream() throws IOException {

http://git-wip-us.apache.org/repos/asf/karaf/blob/e96c40da/features/core/src/main/java/org/apache/karaf/features/internal/region/SubsystemResolveContext.java
----------------------------------------------------------------------
diff --git 
a/features/core/src/main/java/org/apache/karaf/features/internal/region/SubsystemResolveContext.java
 
b/features/core/src/main/java/org/apache/karaf/features/internal/region/SubsystemResolveContext.java
index de990f4..c25d9f4 100644
--- 
a/features/core/src/main/java/org/apache/karaf/features/internal/region/SubsystemResolveContext.java
+++ 
b/features/core/src/main/java/org/apache/karaf/features/internal/region/SubsystemResolveContext.java
@@ -38,6 +38,7 @@ import org.eclipse.equinox.region.RegionDigraph;
 import org.eclipse.equinox.region.RegionFilter;
 import org.osgi.framework.BundleException;
 import org.osgi.framework.wiring.BundleRevision;
+import org.osgi.namespace.service.ServiceNamespace;
 import org.osgi.resource.Capability;
 import org.osgi.resource.Requirement;
 import org.osgi.resource.Resource;
@@ -68,6 +69,7 @@ public class SubsystemResolveContext extends ResolveContext {
     private final Repository repository;
     private final Repository globalRepository;
     private final Downloader downloader;
+    private static boolean ignoreServiceReqs = true; 
 
     public SubsystemResolveContext(Subsystem root, RegionDigraph digraph, 
Repository globalRepository, Downloader downloader) throws BundleException {
         this.root = root;
@@ -86,6 +88,10 @@ public class SubsystemResolveContext extends ResolveContext {
         //  prefer that one over any capabilities from other resources
         findMandatory(root);
     }
+    
+    public static void setIgnoreServiceReqs(boolean ignoreServiceReqs) {
+        SubsystemResolveContext.ignoreServiceReqs = ignoreServiceReqs;
+    }
 
     public Repository getRepository() {
         return repository;
@@ -205,7 +211,8 @@ public class SubsystemResolveContext extends ResolveContext 
{
 
     @Override
     public boolean isEffective(Requirement requirement) {
-        return true;
+        boolean isServiceReq = 
ServiceNamespace.SERVICE_NAMESPACE.equals(requirement.getNamespace());
+        return !ignoreServiceReqs || !isServiceReq;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/karaf/blob/e96c40da/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceBuilder.java
----------------------------------------------------------------------
diff --git 
a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceBuilder.java
 
b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceBuilder.java
index 707c594..ec3b0e3 100644
--- 
a/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceBuilder.java
+++ 
b/features/core/src/main/java/org/apache/karaf/features/internal/resolver/ResourceBuilder.java
@@ -56,15 +56,10 @@ public final class ResourceBuilder {
     private static final int DELIMITER = 2;
     private static final int STARTQUOTE = 4;
     private static final int ENDQUOTE = 8;
-    private static boolean ignoreServiceReqs = true;
 
     private ResourceBuilder() {
     }
     
-    public static void setIgnoreServiceReqs(boolean ignoreServiceReqs) {
-        ResourceBuilder.ignoreServiceReqs = ignoreServiceReqs;
-    }
-
     public static ResourceImpl build(String uri, Map<String, String> 
headerMap) throws BundleException {
         return build(new ResourceImpl(), uri, headerMap);
     }
@@ -221,10 +216,6 @@ public final class ResourceBuilder {
             requireReqs.addAll(reqs);
         }
         
-        if (ignoreServiceReqs) {
-            requireReqs = filterServiceReqs(requireReqs);
-        }
-
         // Combine all capabilities.
         resource.addCapabilities(exportCaps);
         resource.addCapabilities(provideCaps);
@@ -239,16 +230,6 @@ public final class ResourceBuilder {
         return resource;
     }
 
-    private static List<Requirement> filterServiceReqs(List<Requirement> 
requireReqs) {
-        ArrayList<Requirement> filtered = new ArrayList<Requirement>();
-        for (Requirement req : requireReqs) {
-            if 
(!ServiceNamespace.SERVICE_NAMESPACE.equals(req.getNamespace())) {
-                filtered.add(req);
-            }
-        }
-        return filtered;
-    }
-
     public static List<Requirement> parseRequirement(Resource resource, String 
requirement) throws BundleException {
         List<ParsedHeaderClause> requireClauses = 
parseStandardHeader(requirement);
         requireClauses = normalizeRequireCapabilityClauses(requireClauses);

Reply via email to