[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);
