You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by pa...@apache.org on 2018/09/17 11:44:06 UTC
[sling-org-apache-sling-feature] 01/01: SLING-7829: Change the
includes to be include and from a list to a single (optional) field
This is an automated email from the ASF dual-hosted git repository.
pauls pushed a commit to branch issues/SLING-7829
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature.git
commit e1d4f99af0ba6ffc201efc196e761ed12ddc4df6
Author: Karl Pauls <ka...@gmail.com>
AuthorDate: Mon Sep 17 13:43:50 2018 +0200
SLING-7829: Change the includes to be include and from a list to a single (optional) field
---
.../java/org/apache/sling/feature/Feature.java | 30 ++++++++++++++--------
.../sling/feature/builder/FeatureBuilder.java | 30 ++++++++++------------
.../sling/feature/builder/FeatureBuilderTest.java | 23 +++++++++--------
3 files changed, 46 insertions(+), 37 deletions(-)
diff --git a/src/main/java/org/apache/sling/feature/Feature.java b/src/main/java/org/apache/sling/feature/Feature.java
index d9c7627..a25eac7 100644
--- a/src/main/java/org/apache/sling/feature/Feature.java
+++ b/src/main/java/org/apache/sling/feature/Feature.java
@@ -51,8 +51,6 @@ public class Feature implements Comparable<Feature> {
private final List<Capability> capabilities = new ArrayList<>();
- private final List<Include> includes = new ArrayList<>();
-
private final Extensions extensions = new Extensions();
private final KeyValueMap variables = new KeyValueMap();
@@ -75,6 +73,10 @@ public class Feature implements Comparable<Feature> {
/** Flag indicating whether this is an assembled feature */
private volatile boolean assembled = false;
+
+ /** The optional include. */
+ private volatile Include include;
+
/**
* Construct a new feature.
* @param id The id of the feature.
@@ -158,12 +160,19 @@ public class Feature implements Comparable<Feature> {
}
/**
- * Get the list of includes.
- * The returned object is modifiable.
- * @return The list of includes
+ * Get the optionally included feature.
+ * @return The included feature or {@code null} if none.
+ */
+ public Include getInclude() {
+ return include;
+ }
+
+ /**
+ * Set the optionally included feature.
+ * @param include The included feature or {@code null} if none.
*/
- public List<Include> getIncludes() {
- return includes;
+ public void setInclude(Include include) {
+ this.include = include;
}
/**
@@ -324,8 +333,9 @@ public class Feature implements Comparable<Feature> {
result.getCapabilities().add(c);
}
- // includes
- for(final Include i : this.getIncludes()) {
+ // include
+ final Include i = this.getInclude();
+ if (i != null) {
final Include c = new Include(i.getId());
c.getBundleRemovals().addAll(i.getBundleRemovals());
@@ -334,7 +344,7 @@ public class Feature implements Comparable<Feature> {
c.getFrameworkPropertiesRemovals().addAll(i.getFrameworkPropertiesRemovals());
c.getArtifactExtensionRemovals().putAll(i.getArtifactExtensionRemovals());
- result.getIncludes().add(c);
+ result.setInclude(c);
}
// extensions
diff --git a/src/main/java/org/apache/sling/feature/builder/FeatureBuilder.java b/src/main/java/org/apache/sling/feature/builder/FeatureBuilder.java
index 0835e73..f400ff1 100644
--- a/src/main/java/org/apache/sling/feature/builder/FeatureBuilder.java
+++ b/src/main/java/org/apache/sling/feature/builder/FeatureBuilder.java
@@ -285,10 +285,7 @@ public abstract class FeatureBuilder {
// we copy the feature as we set the assembled flag on the result
final Feature result = feature.copy();
- if ( !result.getIncludes().isEmpty() ) {
-
- final List<Include> includes = new ArrayList<>(result.getIncludes());
-
+ if ( result.getInclude() != null) {
// clear everything in the result, will be added in the process
result.getVariables().clear();
result.getBundles().clear();
@@ -296,22 +293,23 @@ public abstract class FeatureBuilder {
result.getConfigurations().clear();
result.getRequirements().clear();
result.getCapabilities().clear();
- result.getIncludes().clear();
+ result.setInclude(null);
result.getExtensions().clear();
- for(final Include i : includes) {
- final Feature f = context.getFeatureProvider().provide(i.getId());
- if ( f == null ) {
- throw new IllegalStateException("Unable to find included feature " + i.getId());
- }
- final Feature af = internalAssemble(processedFeatures, f, context);
-
- // process include instructions
- include(af, i);
+ final Include i = feature.getInclude();
- // and now merge
- merge(result, af, context, BuilderUtil.ArtifactMerge.LATEST);
+ final Feature f = context.getFeatureProvider().provide(i.getId());
+ if ( f == null ) {
+ throw new IllegalStateException("Unable to find included feature " + i.getId());
}
+ final Feature af = internalAssemble(processedFeatures, f, context);
+
+ // process include instructions
+ include(af, i);
+
+ // and now merge
+ merge(result, af, context, BuilderUtil.ArtifactMerge.LATEST);
+
merge(result, feature, context, BuilderUtil.ArtifactMerge.LATEST);
}
processedFeatures.remove(feature.getId().toMvnId());
diff --git a/src/test/java/org/apache/sling/feature/builder/FeatureBuilderTest.java b/src/test/java/org/apache/sling/feature/builder/FeatureBuilderTest.java
index 9c48567..f0bad33 100644
--- a/src/test/java/org/apache/sling/feature/builder/FeatureBuilderTest.java
+++ b/src/test/java/org/apache/sling/feature/builder/FeatureBuilderTest.java
@@ -19,6 +19,7 @@ package org.apache.sling.feature.builder;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -200,7 +201,7 @@ public class FeatureBuilderTest {
}
// includes should always be empty
- assertTrue(actuals.getIncludes().isEmpty());
+ assertNull(actuals.getInclude());
}
@Test public void testNoIncludesNoUpgrade() throws Exception {
@@ -254,7 +255,7 @@ public class FeatureBuilderTest {
@Test public void testSingleInclude() throws Exception {
final Feature base = new Feature(ArtifactId.parse("org.apache.sling/test-feature/1.1"));
final Include i1 = new Include(ArtifactId.parse("g/a/1"));
- base.getIncludes().add(i1);
+ base.setInclude(i1);
final Requirement r1 = new RequirementImpl(null, "osgi.contract",
Collections.singletonMap("filter", "(&(osgi.contract=JavaServlet)(version=3.1))"), null);
@@ -300,7 +301,7 @@ public class FeatureBuilderTest {
// create the expected result
final Feature result = base.copy();
result.getVariables().put("varx", "myvalx");
- result.getIncludes().remove(0);
+ result.setInclude(null);
result.getFrameworkProperties().put("bar", "X");
result.getBundles().add(BuilderUtilTest.createBundle("org.apache.sling/foo-bar/4.5.6", 3));
final Configuration co3 = new Configuration("org.apache.sling.foo");
@@ -322,7 +323,7 @@ public class FeatureBuilderTest {
final Feature b = new Feature(idB);
// feature b includes feature a
final Include inc = new Include(idA);
- b.getIncludes().add(inc);
+ b.setInclude(inc);
// assemble application, it should only contain feature b as a is included by b
Feature[] features = FeatureBuilder.deduplicate(new BuilderContext(new FeatureProvider() {
@@ -367,7 +368,7 @@ public class FeatureBuilderTest {
final Feature b = new Feature(ArtifactId.fromMvnId("g:a-include:1"));
final Include inc = new Include(a.getId());
inc.getBundleRemovals().add(bundleA2);
- b.getIncludes().add(inc);
+ b.setInclude(inc);
// assemble feature include
Feature feature = FeatureBuilder.assemble(b, new BuilderContext(new FeatureProvider() {
@@ -401,7 +402,7 @@ public class FeatureBuilderTest {
final Feature b = new Feature(ArtifactId.fromMvnId("g:a-include:1"));
final Include inc = new Include(a.getId());
inc.getBundleRemovals().add(ArtifactId.fromMvnId("g:a:0.0.0"));
- b.getIncludes().add(inc);
+ b.setInclude(inc);
// assemble feature include
Feature feature = FeatureBuilder.assemble(b, new BuilderContext(new FeatureProvider() {
@@ -433,7 +434,7 @@ public class FeatureBuilderTest {
final Feature b = new Feature(ArtifactId.fromMvnId("g:a-include:1"));
final Include inc = new Include(a.getId());
inc.getBundleRemovals().add(bundleA2);
- b.getIncludes().add(inc);
+ b.setInclude(inc);
try {
FeatureBuilder.assemble(b, new BuilderContext(new FeatureProvider() {
@@ -466,7 +467,7 @@ public class FeatureBuilderTest {
final Feature b = new Feature(ArtifactId.fromMvnId("g:a-include:1"));
final Include inc = new Include(a.getId());
inc.getArtifactExtensionRemovals().put("foo", Arrays.asList(bundleA2));
- b.getIncludes().add(inc);
+ b.setInclude(inc);
// assemble feature include
Feature feature = FeatureBuilder.assemble(b, new BuilderContext(new FeatureProvider() {
@@ -502,7 +503,7 @@ public class FeatureBuilderTest {
final Feature b = new Feature(ArtifactId.fromMvnId("g:a-include:1"));
final Include inc = new Include(a.getId());
inc.getArtifactExtensionRemovals().put("foo", Arrays.asList(ArtifactId.fromMvnId("g:a:0.0.0")));
- b.getIncludes().add(inc);
+ b.setInclude(inc);
// assemble feature include
Feature feature = FeatureBuilder.assemble(b, new BuilderContext(new FeatureProvider() {
@@ -536,7 +537,7 @@ public class FeatureBuilderTest {
final Feature b = new Feature(ArtifactId.fromMvnId("g:a-include:1"));
final Include inc = new Include(a.getId());
inc.getArtifactExtensionRemovals().put("foo", Arrays.asList(bundleA2));
- b.getIncludes().add(inc);
+ b.setInclude(inc);
try {
FeatureBuilder.assemble(b, new BuilderContext(new FeatureProvider() {
@@ -563,7 +564,7 @@ public class FeatureBuilderTest {
final Feature b = new Feature(idB);
// feature b includes feature a
final Include inc = new Include(idA);
- b.getIncludes().add(inc);
+ b.setInclude(inc);
// assemble feature, it should only contain feature b as a is included by b
final Feature target = FeatureBuilder.assemble(ArtifactId.fromMvnId("g:F:1.0.0"), new BuilderContext(new FeatureProvider() {