You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by gn...@apache.org on 2018/04/24 08:14:09 UTC
svn commit: r1829966 - in
/felix/trunk/utils/src/main/java/org/apache/felix/utils/resource:
CapabilitySet.java RequirementImpl.java
Author: gnodet
Date: Tue Apr 24 08:14:09 2018
New Revision: 1829966
URL: http://svn.apache.org/viewvc?rev=1829966&view=rev
Log:
[FELIX-5838] Make the filter usage a bit more coherent
There's no need to check for the capability / requirement namespace matching, as the requirement should always have it included in the filter already.
Modified:
felix/trunk/utils/src/main/java/org/apache/felix/utils/resource/CapabilitySet.java
felix/trunk/utils/src/main/java/org/apache/felix/utils/resource/RequirementImpl.java
Modified: felix/trunk/utils/src/main/java/org/apache/felix/utils/resource/CapabilitySet.java
URL: http://svn.apache.org/viewvc/felix/trunk/utils/src/main/java/org/apache/felix/utils/resource/CapabilitySet.java?rev=1829966&r1=1829965&r2=1829966&view=diff
==============================================================================
--- felix/trunk/utils/src/main/java/org/apache/felix/utils/resource/CapabilitySet.java (original)
+++ felix/trunk/utils/src/main/java/org/apache/felix/utils/resource/CapabilitySet.java Tue Apr 24 08:14:09 2018
@@ -32,6 +32,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Objects;
import java.util.Set;
import java.util.TreeMap;
@@ -203,14 +204,8 @@ public class CapabilitySet {
}
public static boolean matches(Capability capability, Requirement requirement) {
- if (requirement.getNamespace().equals(capability.getNamespace())) {
- String filter = requirement.getDirectives().get(Constants.FILTER_DIRECTIVE);
- if (filter != null) {
- return matches(capability, SimpleFilter.parse(filter));
- }
- return true;
- }
- return false;
+ return Objects.equals(capability.getNamespace(), requirement.getNamespace())
+ && matches(capability, RequirementImpl.getFilter(requirement));
}
public static boolean matches(Capability cap, SimpleFilter sf) {
Modified: felix/trunk/utils/src/main/java/org/apache/felix/utils/resource/RequirementImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/utils/src/main/java/org/apache/felix/utils/resource/RequirementImpl.java?rev=1829966&r1=1829965&r2=1829966&view=diff
==============================================================================
--- felix/trunk/utils/src/main/java/org/apache/felix/utils/resource/RequirementImpl.java (original)
+++ felix/trunk/utils/src/main/java/org/apache/felix/utils/resource/RequirementImpl.java Tue Apr 24 08:14:09 2018
@@ -73,7 +73,11 @@ public class RequirementImpl extends Abs
public RequirementImpl(Resource resource, String path, Map<String, String> dirs, Map<String, Object> attrs, SimpleFilter sf) {
super(resource, path, dirs, attrs);
- this.filter = sf != null ? sf : SimpleFilter.convert(attributes);
+ if (sf == null) {
+ this.filter = getFilter(directives, attributes);
+ } else {
+ this.filter = sf;
+ }
// Find resolution import directives.
this.optional = Constants.RESOLUTION_OPTIONAL.equals(directives.get(Constants.RESOLUTION_DIRECTIVE));
}
@@ -91,7 +95,7 @@ public class RequirementImpl extends Abs
}
/**
- * Utility method to check wether a requirment is optional. This method works with any
+ * Utility method to check whether a requirement is optional. This method works with any
* object implementing the requirement interface.
*
* @param requirement A requirement
@@ -104,4 +108,29 @@ public class RequirementImpl extends Abs
return Constants.RESOLUTION_OPTIONAL.equals(requirement.getDirectives().get(Constants.RESOLUTION_DIRECTIVE));
}
+
+ /**
+ * Utility method to obtain a SimpleFilter from a given requirement.
+ * If the requirement contains a {@link Constants#FILTER_DIRECTIVE} directive,
+ * it will be used, else, the filter will be derived from the attributes.
+ *
+ * @param requirement A requirement
+ * @return a valid filter, never {@code null}.
+ */
+ public static SimpleFilter getFilter(Requirement requirement) {
+ if (requirement instanceof RequirementImpl) {
+ return ((RequirementImpl) requirement).getFilter();
+ }
+
+ return getFilter(requirement.getDirectives(), requirement.getAttributes());
+ }
+
+ private static SimpleFilter getFilter(Map<String, String> directives, Map<String, Object> attributes) {
+ String filter = directives.get(Constants.FILTER_DIRECTIVE);
+ if (filter != null) {
+ return SimpleFilter.parse(filter);
+ } else {
+ return SimpleFilter.convert(attributes);
+ }
+ }
}