You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by jw...@apache.org on 2015/09/03 21:59:49 UTC

svn commit: r1701121 - /aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/DependencyCalculator.java

Author: jwross
Date: Thu Sep  3 19:59:48 2015
New Revision: 1701121

URL: http://svn.apache.org/r1701121
Log:
ARIES-1396 Use capability set when calculating subsystem dependencies.

The dependency calculator now makes use of capability set when calculating subsystem dependencies.

Modified:
    aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/DependencyCalculator.java

Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/DependencyCalculator.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/DependencyCalculator.java?rev=1701121&r1=1701120&r2=1701121&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/DependencyCalculator.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/DependencyCalculator.java Thu Sep  3 19:59:48 2015
@@ -22,6 +22,7 @@ import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import org.apache.aries.subsystem.core.capabilityset.CapabilitySetRepository;
 import org.osgi.framework.Constants;
 import org.osgi.framework.namespace.ExecutionEnvironmentNamespace;
 import org.osgi.framework.namespace.IdentityNamespace;
@@ -38,28 +39,30 @@ import org.osgi.service.resolver.Resolve
 public class DependencyCalculator {
 	private static class ResolveContext extends
 			org.osgi.service.resolver.ResolveContext {
+	    private final CapabilitySetRepository repository = new CapabilitySetRepository();
 		private final Collection<Resource> resources;
 
 		public ResolveContext(Collection<Resource> resources) {
-			this.resources = resources;
+		    this.resources = resources;
+			for (Resource resource : resources) {
+			    repository.addResource(resource);
+			}
 		}
 
 		@Override
 		public List<Capability> findProviders(Requirement requirement) {
-			ArrayList<Capability> capabilities = new ArrayList<Capability>();
-			// never check local resources for osgi.ee or osgi.native capabilities
-			if (!(ExecutionEnvironmentNamespace.EXECUTION_ENVIRONMENT_NAMESPACE.equals(requirement.getNamespace()) 
-					|| NativeNamespace.NATIVE_NAMESPACE.equals(requirement.getNamespace()))) {
-				for (Resource resource : resources)
-					for (Capability capability : resource
-							.getCapabilities(requirement.getNamespace()))
-						if (ResourceHelper.matches(requirement, capability))
-							capabilities.add(capability);
+		    String namespace = requirement.getNamespace();
+		    // never check local resources for osgi.ee or osgi.native capabilities
+		    if (ExecutionEnvironmentNamespace.EXECUTION_ENVIRONMENT_NAMESPACE.equals(namespace) 
+                    || NativeNamespace.NATIVE_NAMESPACE.equals(namespace)) {
+		        return Collections.<Capability>singletonList(new MissingCapability(requirement));
+		    }
+			Map<Requirement, Collection<Capability>> map = repository.findProviders(Collections.singleton(requirement));
+			Collection<Capability> capabilities = map.get(requirement);
+			if (!capabilities.isEmpty()) {
+			    return new ArrayList<Capability>(capabilities);
 			}
-			if (capabilities.isEmpty())
-				capabilities.add(new MissingCapability(requirement));
-			capabilities.trimToSize();
-			return capabilities;
+			return Collections.<Capability>singletonList(new MissingCapability(requirement));
 		}
 
 		@Override