SLING-8478 : Adding method to match Requirements and Capabilities
diff --git a/pom.xml b/pom.xml
index c1c4d7b..c61a85a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -146,7 +146,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.feature</artifactId>
- <version>1.0.2</version>
+ <version>1.0.3-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
diff --git a/src/main/java/org/apache/sling/feature/io/json/JSONReaderBase.java b/src/main/java/org/apache/sling/feature/io/json/JSONReaderBase.java
index 95ba21d..4f1a9b0 100644
--- a/src/main/java/org/apache/sling/feature/io/json/JSONReaderBase.java
+++ b/src/main/java/org/apache/sling/feature/io/json/JSONReaderBase.java
@@ -16,24 +16,6 @@
*/
package org.apache.sling.feature.io.json;
-import org.apache.felix.configurator.impl.json.JSMin;
-import org.apache.felix.configurator.impl.json.JSONUtil;
-import org.apache.felix.configurator.impl.json.TypeConverter;
-import org.apache.felix.configurator.impl.model.Config;
-import org.apache.felix.utils.resource.CapabilityImpl;
-import org.apache.felix.utils.resource.RequirementImpl;
-import org.apache.sling.feature.Artifact;
-import org.apache.sling.feature.ArtifactId;
-import org.apache.sling.feature.Bundles;
-import org.apache.sling.feature.Configuration;
-import org.apache.sling.feature.Configurations;
-import org.apache.sling.feature.Extension;
-import org.apache.sling.feature.ExtensionType;
-import org.apache.sling.feature.Extensions;
-import org.apache.sling.feature.Prototype;
-import org.osgi.resource.Capability;
-import org.osgi.resource.Requirement;
-
import java.io.IOException;
import java.io.Reader;
import java.io.StringWriter;
@@ -48,6 +30,7 @@
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Objects;
import java.util.Set;
import java.util.function.BiConsumer;
@@ -58,6 +41,25 @@
import javax.json.JsonStructure;
import javax.json.JsonWriter;
+import org.apache.felix.configurator.impl.json.JSMin;
+import org.apache.felix.configurator.impl.json.JSONUtil;
+import org.apache.felix.configurator.impl.json.TypeConverter;
+import org.apache.felix.configurator.impl.model.Config;
+import org.apache.felix.utils.resource.CapabilityImpl;
+import org.apache.felix.utils.resource.RequirementImpl;
+import org.apache.sling.feature.Artifact;
+import org.apache.sling.feature.ArtifactId;
+import org.apache.sling.feature.Bundles;
+import org.apache.sling.feature.Configuration;
+import org.apache.sling.feature.Configurations;
+import org.apache.sling.feature.Extension;
+import org.apache.sling.feature.ExtensionType;
+import org.apache.sling.feature.Extensions;
+import org.apache.sling.feature.MatchingRequirement;
+import org.apache.sling.feature.Prototype;
+import org.osgi.resource.Capability;
+import org.osgi.resource.Resource;
+
/**
* Common methods for JSON reading.
*/
@@ -579,7 +581,8 @@
return null;
}
- protected void readRequirements(Map<String, Object> map, final List<Requirement> container) throws IOException {
+ protected void readRequirements(Map<String, Object> map, final List<MatchingRequirement> container)
+ throws IOException {
if ( map.containsKey(JSONConstants.FEATURE_REQUIREMENTS)) {
final Object reqObj = map.get(JSONConstants.FEATURE_REQUIREMENTS);
checkType(JSONConstants.FEATURE_REQUIREMENTS, reqObj, List.class);
@@ -612,7 +615,8 @@
dirs.forEach(rethrowBiConsumer((key, value) -> ManifestUtils.unmarshalDirective(key, value, dirMap::put)));
}
- final Requirement r = new RequirementImpl(null, obj.get(JSONConstants.REQCAP_NAMESPACE).toString(), dirMap, attrMap);
+ final MatchingRequirement r = new MatchingRequirementImpl(null,
+ obj.get(JSONConstants.REQCAP_NAMESPACE).toString(), dirMap, attrMap);
container.add(r);
}
}
@@ -676,4 +680,25 @@
private static <E extends Throwable> void throwAsUnchecked(Exception exception) throws E {
throw (E) exception;
}
+
+ private static class MatchingRequirementImpl extends RequirementImpl implements MatchingRequirement {
+
+ public MatchingRequirementImpl(Resource res, String ns, Map<String, String> dirs, Map<String, Object> attrs) {
+ super(res, ns, dirs, attrs);
+ }
+
+ @Override
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || !(o instanceof RequirementImpl)) {
+ return false;
+ }
+ final RequirementImpl that = (RequirementImpl) o;
+ return Objects.equals(resource, that.getResource()) && Objects.equals(namespace, that.getNamespace())
+ && Objects.equals(attributes, that.getAttributes())
+ && Objects.equals(directives, that.getDirectives());
+ }
+ }
}
diff --git a/src/main/java/org/apache/sling/feature/io/json/JSONWriterBase.java b/src/main/java/org/apache/sling/feature/io/json/JSONWriterBase.java
index 1988595..b32da05 100644
--- a/src/main/java/org/apache/sling/feature/io/json/JSONWriterBase.java
+++ b/src/main/java/org/apache/sling/feature/io/json/JSONWriterBase.java
@@ -37,6 +37,7 @@
import org.apache.sling.feature.Configurations;
import org.apache.sling.feature.Extension;
import org.apache.sling.feature.ExtensionType;
+import org.apache.sling.feature.MatchingRequirement;
import org.apache.sling.feature.Prototype;
import org.osgi.resource.Capability;
import org.osgi.resource.Requirement;
@@ -312,7 +313,7 @@
}
}
- protected void writeRequirements(final JsonGenerator generator, final List<Requirement> requirements) {
+ protected void writeRequirements(final JsonGenerator generator, final List<MatchingRequirement> requirements) {
if (requirements.isEmpty()) {
return;
}