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 2013/02/23 05:58:59 UTC

svn commit: r1449267 - /aries/trunk/subsystem/subsystem-obr/src/main/java/org/apache/aries/subsystem/obr/internal/FelixRequirementAdapter.java

Author: jwross
Date: Sat Feb 23 04:58:59 2013
New Revision: 1449267

URL: http://svn.apache.org/r1449267
Log:
Don't treat optional requirements as mandatory.

Fixes issue where optional requirements from a Felix OBR repository were treated as mandatory.

Modified:
    aries/trunk/subsystem/subsystem-obr/src/main/java/org/apache/aries/subsystem/obr/internal/FelixRequirementAdapter.java

Modified: aries/trunk/subsystem/subsystem-obr/src/main/java/org/apache/aries/subsystem/obr/internal/FelixRequirementAdapter.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-obr/src/main/java/org/apache/aries/subsystem/obr/internal/FelixRequirementAdapter.java?rev=1449267&r1=1449266&r2=1449267&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-obr/src/main/java/org/apache/aries/subsystem/obr/internal/FelixRequirementAdapter.java (original)
+++ aries/trunk/subsystem/subsystem-obr/src/main/java/org/apache/aries/subsystem/obr/internal/FelixRequirementAdapter.java Sat Feb 23 04:58:59 2013
@@ -17,11 +17,12 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.osgi.framework.Constants;
 import org.osgi.resource.Capability;
+import org.osgi.resource.Namespace;
 import org.osgi.resource.Resource;
 
 public class FelixRequirementAdapter extends AbstractRequirement {
+	private final Map<String, String> directives;
 	private final org.apache.felix.bundlerepository.Requirement requirement;
 	private final Resource resource;
 	
@@ -32,6 +33,7 @@ public class FelixRequirementAdapter ext
 			throw new NullPointerException("Missing required parameter: resource");
 		this.requirement = requirement;
 		this.resource = resource;
+		directives = computeDirectives();
 	}
 
 	public Map<String, Object> getAttributes() {
@@ -39,16 +41,7 @@ public class FelixRequirementAdapter ext
 	}
 
 	public Map<String, String> getDirectives() {
-		Map<String, String> result = new HashMap<String, String>(1);
-		/* (1) The Felix OBR specific "mandatory:<*" syntax must be stripped out of the filter.
-		 * (2) The namespace must be translated.
-		 */
-		result.put(Constants.FILTER_DIRECTIVE, requirement.getFilter()
-				.replaceAll("\\(mandatory\\:\\<\\*[^\\)]*\\)", "")
-				.replaceAll("\\(service\\=[^\\)]*\\)", "")
-				.replaceAll("objectclass", "objectClass")
-				.replaceAll(requirement.getName() + '=', getNamespace() + '='));
-		return result;
+		return directives;
 	}
 
 	public String getNamespace() {
@@ -62,4 +55,19 @@ public class FelixRequirementAdapter ext
 	public boolean matches(Capability capability) {
 		return requirement.isSatisfied(new OsgiCapabilityAdapter(capability));
 	}
+	
+	private Map<String, String> computeDirectives() {
+		Map<String, String> result = new HashMap<String, String>(3);
+		/* (1) The Felix OBR specific "mandatory:<*" syntax must be stripped out of the filter.
+		 * (2) The namespace must be translated.
+		 */
+		result.put(Namespace.REQUIREMENT_FILTER_DIRECTIVE, requirement.getFilter()
+				.replaceAll("\\(mandatory\\:\\<\\*[^\\)]*\\)", "")
+				.replaceAll("\\(service\\=[^\\)]*\\)", "")
+				.replaceAll("objectclass", "objectClass")
+				.replaceAll(requirement.getName() + '=', getNamespace() + '='));
+		result.put(Namespace.REQUIREMENT_RESOLUTION_DIRECTIVE, requirement.isOptional() ? Namespace.RESOLUTION_OPTIONAL : Namespace.RESOLUTION_MANDATORY);
+		result.put(Namespace.REQUIREMENT_CARDINALITY_DIRECTIVE, requirement.isMultiple() ? Namespace.CARDINALITY_MULTIPLE : Namespace.CARDINALITY_SINGLE);
+		return Collections.unmodifiableMap(result);
+	}
 }