You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2019/06/07 16:36:16 UTC
[sling-org-apache-sling-feature-analyser] branch master updated:
SLING-8478 : Adding method to match Requirements and Capabilities
This is an automated email from the ASF dual-hosted git repository.
cziegeler pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-analyser.git
The following commit(s) were added to refs/heads/master by this push:
new ff9544b SLING-8478 : Adding method to match Requirements and Capabilities
ff9544b is described below
commit ff9544b95755d97b0865622c887d4831bcb124dd
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Fri Jun 7 18:36:07 2019 +0200
SLING-8478 : Adding method to match Requirements and Capabilities
---
pom.xml | 2 +-
.../sling/feature/scanner/ArtifactDescriptor.java | 1 +
.../sling/feature/scanner/BundleDescriptor.java | 1 +
.../apache/sling/feature/scanner/Descriptor.java | 7 +--
.../sling/feature/scanner/FeatureDescriptor.java | 1 +
.../feature/scanner/impl/BundleDescriptorImpl.java | 21 ++++-----
.../scanner/impl/MatchingRequirementImpl.java | 50 ++++++++++++++++++++++
.../feature/scanner/impl/RepoInitScanner.java | 12 +++---
.../impl/CheckRequirementsCapabilitiesTest.java | 37 +++++++++++++---
9 files changed, 105 insertions(+), 27 deletions(-)
diff --git a/pom.xml b/pom.xml
index 095cf51..c91d51a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -134,7 +134,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/scanner/ArtifactDescriptor.java b/src/main/java/org/apache/sling/feature/scanner/ArtifactDescriptor.java
index a9a75d6..5f41fda 100644
--- a/src/main/java/org/apache/sling/feature/scanner/ArtifactDescriptor.java
+++ b/src/main/java/org/apache/sling/feature/scanner/ArtifactDescriptor.java
@@ -29,6 +29,7 @@ import org.apache.sling.feature.Artifact;
* descriptor is locked, it is safe to access it concurrently.
*/
public abstract class ArtifactDescriptor extends Descriptor {
+
protected ArtifactDescriptor(String name) {
super(name);
}
diff --git a/src/main/java/org/apache/sling/feature/scanner/BundleDescriptor.java b/src/main/java/org/apache/sling/feature/scanner/BundleDescriptor.java
index caa59fb..8e98bbb 100644
--- a/src/main/java/org/apache/sling/feature/scanner/BundleDescriptor.java
+++ b/src/main/java/org/apache/sling/feature/scanner/BundleDescriptor.java
@@ -29,6 +29,7 @@ import org.apache.sling.feature.scanner.impl.BundleDescriptorImpl;
* descriptor is locked, it is safe to access it concurrently.
*/
public abstract class BundleDescriptor extends ArtifactDescriptor implements Comparable<BundleDescriptor> {
+
protected BundleDescriptor(String name) {
super(name);
}
diff --git a/src/main/java/org/apache/sling/feature/scanner/Descriptor.java b/src/main/java/org/apache/sling/feature/scanner/Descriptor.java
index 3235e6b..2dde3d8 100644
--- a/src/main/java/org/apache/sling/feature/scanner/Descriptor.java
+++ b/src/main/java/org/apache/sling/feature/scanner/Descriptor.java
@@ -20,8 +20,8 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
+import org.apache.sling.feature.MatchingRequirement;
import org.osgi.resource.Capability;
-import org.osgi.resource.Requirement;
/**
* A descriptor holds information about requirements and capabilities.
@@ -32,6 +32,7 @@ import org.osgi.resource.Requirement;
* descriptor is locked, it is safe to access it concurrently.
*/
public abstract class Descriptor {
+
private final String name;
private boolean locked;
@@ -42,7 +43,7 @@ public abstract class Descriptor {
private final Set<PackageInfo> dynImports = new HashSet<>();
- private final Set<Requirement> reqs = new HashSet<>();
+ private final Set<MatchingRequirement> reqs = new HashSet<>();
private final Set<Capability> caps = new HashSet<>();
@@ -96,7 +97,7 @@ public abstract class Descriptor {
* Return the list of requirements.
* @return The list of requirements. The list might be empty.
*/
- public final Set<Requirement> getRequirements() {
+ public final Set<MatchingRequirement> getRequirements() {
return locked ? Collections.unmodifiableSet(reqs) : reqs;
}
diff --git a/src/main/java/org/apache/sling/feature/scanner/FeatureDescriptor.java b/src/main/java/org/apache/sling/feature/scanner/FeatureDescriptor.java
index bc0332e..a3b4d3d 100644
--- a/src/main/java/org/apache/sling/feature/scanner/FeatureDescriptor.java
+++ b/src/main/java/org/apache/sling/feature/scanner/FeatureDescriptor.java
@@ -27,6 +27,7 @@ import org.apache.sling.feature.Feature;
* descriptor is locked, it is safe to access it concurrently.
*/
public abstract class FeatureDescriptor extends ContainerDescriptor {
+
private final Feature feature;
protected FeatureDescriptor(Feature f) {
diff --git a/src/main/java/org/apache/sling/feature/scanner/impl/BundleDescriptorImpl.java b/src/main/java/org/apache/sling/feature/scanner/impl/BundleDescriptorImpl.java
index e318427..45855ac 100644
--- a/src/main/java/org/apache/sling/feature/scanner/impl/BundleDescriptorImpl.java
+++ b/src/main/java/org/apache/sling/feature/scanner/impl/BundleDescriptorImpl.java
@@ -16,15 +16,6 @@
*/
package org.apache.sling.feature.scanner.impl;
-import org.apache.felix.utils.manifest.Clause;
-import org.apache.felix.utils.manifest.Parser;
-import org.apache.felix.utils.resource.ResourceBuilder;
-import org.apache.felix.utils.resource.ResourceImpl;
-import org.apache.sling.feature.Artifact;
-import org.apache.sling.feature.scanner.BundleDescriptor;
-import org.apache.sling.feature.scanner.PackageInfo;
-import org.osgi.framework.Constants;
-
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
@@ -37,6 +28,15 @@ import java.util.jar.JarFile;
import java.util.jar.Manifest;
import java.util.stream.Collectors;
+import org.apache.felix.utils.manifest.Clause;
+import org.apache.felix.utils.manifest.Parser;
+import org.apache.felix.utils.resource.ResourceBuilder;
+import org.apache.felix.utils.resource.ResourceImpl;
+import org.apache.sling.feature.Artifact;
+import org.apache.sling.feature.scanner.BundleDescriptor;
+import org.apache.sling.feature.scanner.PackageInfo;
+import org.osgi.framework.Constants;
+
/**
* Information about a bundle
*/
@@ -141,7 +141,8 @@ public class BundleDescriptorImpl
ResourceImpl resource = ResourceBuilder.build(null, this.manifest.getMainAttributes().entrySet().stream()
.collect(Collectors.toMap(entry -> entry.getKey().toString(), entry -> entry.getValue().toString())));
this.getCapabilities().addAll(resource.getCapabilities(null));
- this.getRequirements().addAll(resource.getRequirements(null));
+ this.getRequirements().addAll(resource.getRequirements(null).stream()
+ .map(entry -> new MatchingRequirementImpl(entry)).collect(Collectors.toList()));
} catch (Exception ex) {
throw new IOException(ex);
}
diff --git a/src/main/java/org/apache/sling/feature/scanner/impl/MatchingRequirementImpl.java b/src/main/java/org/apache/sling/feature/scanner/impl/MatchingRequirementImpl.java
new file mode 100644
index 0000000..d43ed31
--- /dev/null
+++ b/src/main/java/org/apache/sling/feature/scanner/impl/MatchingRequirementImpl.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sling.feature.scanner.impl;
+
+import java.util.Map;
+import java.util.Objects;
+
+import org.apache.felix.utils.resource.RequirementImpl;
+import org.apache.sling.feature.MatchingRequirement;
+import org.osgi.resource.Requirement;
+import org.osgi.resource.Resource;
+
+class MatchingRequirementImpl extends RequirementImpl implements MatchingRequirement {
+
+ public MatchingRequirementImpl(final Requirement req) {
+ super(req.getResource(), req.getNamespace(), req.getDirectives(), req.getAttributes());
+ }
+
+ public MatchingRequirementImpl(final Resource res, final String ns, final Map<String, String> dirs,
+ final 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/scanner/impl/RepoInitScanner.java b/src/main/java/org/apache/sling/feature/scanner/impl/RepoInitScanner.java
index c700be5..8965e5a 100644
--- a/src/main/java/org/apache/sling/feature/scanner/impl/RepoInitScanner.java
+++ b/src/main/java/org/apache/sling/feature/scanner/impl/RepoInitScanner.java
@@ -16,20 +16,20 @@
*/
package org.apache.sling.feature.scanner.impl;
-import org.apache.felix.utils.resource.RequirementImpl;
+import java.io.IOException;
+import java.util.Collections;
+
import org.apache.sling.feature.Extension;
import org.apache.sling.feature.ExtensionType;
import org.apache.sling.feature.Feature;
+import org.apache.sling.feature.MatchingRequirement;
import org.apache.sling.feature.builder.ArtifactProvider;
import org.apache.sling.feature.scanner.ContainerDescriptor;
import org.apache.sling.feature.scanner.spi.ExtensionScanner;
-import org.osgi.resource.Requirement;
-
-import java.io.IOException;
-import java.util.Collections;
public class RepoInitScanner implements ExtensionScanner {
- private static final Requirement REQUIREMENT_REPOINIT = new RequirementImpl(null, "osgi.implementation",
+ private static final MatchingRequirement REQUIREMENT_REPOINIT = new MatchingRequirementImpl(null,
+ "osgi.implementation",
Collections.singletonMap("filter", "(&(osgi.implementation=org.apache.sling.jcr.repoinit)(version>=1.0)(!(version>=2.0)))"),
null);
diff --git a/src/test/java/org/apache/sling/feature/analyser/task/impl/CheckRequirementsCapabilitiesTest.java b/src/test/java/org/apache/sling/feature/analyser/task/impl/CheckRequirementsCapabilitiesTest.java
index c23ffa2..5981b25 100644
--- a/src/test/java/org/apache/sling/feature/analyser/task/impl/CheckRequirementsCapabilitiesTest.java
+++ b/src/test/java/org/apache/sling/feature/analyser/task/impl/CheckRequirementsCapabilitiesTest.java
@@ -16,11 +16,17 @@
*/
package org.apache.sling.feature.analyser.task.impl;
+import java.io.File;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Objects;
+
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.Feature;
+import org.apache.sling.feature.MatchingRequirement;
import org.apache.sling.feature.analyser.task.AnalyserTaskContext;
import org.apache.sling.feature.scanner.BundleDescriptor;
import org.apache.sling.feature.scanner.FeatureDescriptor;
@@ -29,11 +35,7 @@ import org.apache.sling.feature.scanner.impl.FeatureDescriptorImpl;
import org.junit.Test;
import org.mockito.Mockito;
import org.osgi.resource.Capability;
-import org.osgi.resource.Requirement;
-
-import java.io.File;
-import java.util.Arrays;
-import java.util.Collections;
+import org.osgi.resource.Resource;
public class CheckRequirementsCapabilitiesTest {
@@ -53,7 +55,7 @@ public class CheckRequirementsCapabilitiesTest {
Capability cap2 = new CapabilityImpl(null,
"org.foo.bar", Collections.emptyMap(),
Collections.singletonMap("abc", "def"));
- Requirement req = new RequirementImpl(null,
+ MatchingRequirement req = new MatchingRequirementImpl(null,
"org.zzz", "(&(zzz=aaa)(qqq=123))");
feature.getCapabilities().addAll(Arrays.asList(cap1, cap2));
@@ -104,7 +106,7 @@ public class CheckRequirementsCapabilitiesTest {
Capability cap2 = new CapabilityImpl(null,
"org.foo.bar", Collections.emptyMap(),
Collections.singletonMap("abc", "def"));
- Requirement req = new RequirementImpl(null,
+ MatchingRequirement req = new MatchingRequirementImpl(null,
"org.zzz", "(&(zzz=aaa)(qqq=123))");
feature.getCapabilities().addAll(Arrays.asList(cap1, cap2));
@@ -121,4 +123,25 @@ public class CheckRequirementsCapabilitiesTest {
Mockito.verify(ctx).reportError(Mockito.contains("org.zzz"));
}
+
+ private static class MatchingRequirementImpl extends RequirementImpl implements MatchingRequirement {
+
+ public MatchingRequirementImpl(Resource res, String ns, String filter) {
+ super(res, ns, filter);
+ }
+
+ @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());
+ }
+ }
}