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/04 18:07:15 UTC

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

Author: jwross
Date: Fri Sep  4 16:07:14 2015
New Revision: 1701286

URL: http://svn.apache.org/r1701286
Log:
ARIES-1397 Use capability set with preferred provider repository.

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

Modified: aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/PreferredProviderRepository.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/PreferredProviderRepository.java?rev=1701286&r1=1701285&r2=1701286&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/PreferredProviderRepository.java (original)
+++ aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/PreferredProviderRepository.java Fri Sep  4 16:07:14 2015
@@ -13,98 +13,61 @@
  */
 package org.apache.aries.subsystem.core.internal;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Map;
 
 import org.apache.aries.subsystem.core.archive.PreferredProviderHeader;
 import org.apache.aries.subsystem.core.archive.PreferredProviderRequirement;
+import org.apache.aries.subsystem.core.capabilityset.CapabilitySetRepository;
+import org.apache.aries.subsystem.core.repository.Repository;
 import org.osgi.resource.Capability;
 import org.osgi.resource.Requirement;
-import org.osgi.resource.Resource;
 
 public class PreferredProviderRepository implements org.apache.aries.subsystem.core.repository.Repository {
-	// @GuardedBy("this")
-	private boolean initialized;
-	
-	private final org.apache.aries.subsystem.core.repository.Repository repositoryServiceRepository = new RepositoryServiceRepository();
+    private final CapabilitySetRepository repository;
 	private final SubsystemResource resource;
-	private final Collection<Resource> resources = new HashSet<Resource>();
-	private final org.apache.aries.subsystem.core.repository.Repository systemRepository = Activator.getInstance().getSystemRepository();
 	
 	public PreferredProviderRepository(SubsystemResource resource) {
 		this.resource = resource;
+		repository = new CapabilitySetRepository();
+		PreferredProviderHeader header = resource.getSubsystemManifest().getPreferredProviderHeader();
+		if (header != null) {
+		    Collection<PreferredProviderRequirement> requirements = header.toRequirements(resource);
+	        for (PreferredProviderRequirement requirement : requirements) {
+	            if (!addProviders(requirement, Activator.getInstance().getSystemRepository(), true)) {
+	                if (!addProviders(requirement, resource.getLocalRepository(), false)) {
+	                    addProviders(requirement, new RepositoryServiceRepository(), false);
+	                }
+	            }
+	        }
+		}
 	}
 
 	@Override
-	public Map<Requirement, Collection<Capability>> findProviders(
-			Collection<? extends Requirement> requirements) {
-		synchronized (this) {
-			if (!initialized) {
-				initialize();
-				initialized = true;
-			}
-		}
-		Map<Requirement, Collection<Capability>> result = new HashMap<Requirement, Collection<Capability>>();
-		for (Requirement requirement : requirements)
-			result.put(requirement, findProviders(requirement));
-		return result;
+	public Map<Requirement, Collection<Capability>> findProviders(Collection<? extends Requirement> requirements) {
+		return repository.findProviders(requirements);
 	}
 	
-	private boolean addLocalRepositoryProviders(Requirement requirement) {
-		return addProviders(requirement, resource.getLocalRepository(), false);
-	}
-	
-	private boolean addProviders(Requirement requirement, org.apache.aries.subsystem.core.repository.Repository repository, boolean checkValid) {
+	private boolean addProviders(Requirement requirement, Repository repository, boolean checkValid) {
+	    boolean result = false;
 		Map<Requirement, Collection<Capability>> map = repository.findProviders(Collections.singleton(requirement));
 		Collection<Capability> capabilities = map.get(requirement);
-		if (capabilities == null || capabilities.isEmpty())
-			return false;
-		for (Capability capability : map.get(requirement)) {
-			if (checkValid && !isValid(capability))
-				continue;
-			resources.add(capability.getResource());
+		for (Capability capability : capabilities) {
+		    if (checkValid ? isValid(capability) : true) {
+		        this.repository.addResource(capability.getResource());
+		        result = true;
+		    }
 		}
-		return true;
-	}
-	
-	private boolean addRepositoryServiceProviders(Requirement requirement) {
-		return addProviders(requirement, repositoryServiceRepository, false);
-	}
-	
-	private boolean addSystemRepositoryProviders(Requirement requirement) {
-		return addProviders(requirement, systemRepository, true);
-	}
-	
-	private Collection<Capability> findProviders(Requirement requirement) {
-		ArrayList<Capability> result = new ArrayList<Capability>(resources.size());
-		for (Resource resource : resources)
-			for (Capability capability : resource.getCapabilities(requirement.getNamespace()))
-				if (ResourceHelper.matches(requirement, capability))
-					result.add(capability);
-		result.trimToSize();
 		return result;
 	}
 	
-	private void initialize() {
-		PreferredProviderHeader header = resource.getSubsystemManifest().getPreferredProviderHeader();
-		if (header == null)
-			return;
-		Collection<PreferredProviderRequirement> requirements = header.toRequirements(resource);
-		for (PreferredProviderRequirement requirement : requirements)
-			if (!addSystemRepositoryProviders(requirement))
-				if (!addLocalRepositoryProviders(requirement))
-					addRepositoryServiceProviders(requirement);
-	}
-	
 	private boolean isValid(Capability capability) {
-		for (BasicSubsystem parent : resource.getParents())
-			for (Resource constituent : parent.getConstituents())
-				if (ResourceHelper.areEqual(constituent, capability.getResource()))
-					return true;
+		for (BasicSubsystem parent : resource.getParents()) {
+		    if (parent.getConstituents().contains(resource)) {
+		        return true;
+		    }
+		}
 		return false;
 	}
 }