Author: cziegeler
Date: Fri Sep 1 15:14:31 2017
New Revision: 1806975
URL: http://svn.apache.org/viewvc?rev=1806975&view=rev
Log:
Introduce builder context
Modified:
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/process/ApplicationBuilder.java
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/process/BuilderUtil.java
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/process/FeatureBuilder.java
sling/whiteboard/cziegeler/feature/src/test/java/org/apache/sling/feature/process/FeatureBuilderTest.java
Modified:
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/process/ApplicationBuilder.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/process/ApplicationBuilder.java?rev=1806975&r1=1806974&r2=1806975&view=diff
==============================================================================
---
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/process/ApplicationBuilder.java
(original)
+++
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/process/ApplicationBuilder.java
Fri Sep 1 15:14:31 2017
@@ -39,29 +39,29 @@ public class ApplicationBuilder {
* is ignored.
*
* @param app The optional application to use as a base.
- * @param provider The provider to resolve features.
+ * @param context The builder context
* @param featureIds The feature ids
* @return The application
- * throws IllegalArgumentException If provider or featureIds is {@code
null}
+ * throws IllegalArgumentException If context or featureIds is {@code null}
* throws IllegalStateException If the provided ids are invalid, or the
feature can't be provided
*/
public static Application assemble(final Application app,
- final FeatureProvider provider,
+ final BuilderContext context,
final String... featureIds) {
- if ( featureIds == null || provider == null ) {
- throw new IllegalArgumentException("Features and/or provider must
not be null");
+ if ( featureIds == null || context == null ) {
+ throw new IllegalArgumentException("Features and/or context must
not be null");
}
final Feature[] features = new Feature[featureIds.length];
int index = 0;
for(final String id : featureIds) {
- features[index] = provider.provide(ArtifactId.fromMvnId(id));
+ features[index] =
context.getFeatureProvider().provide(ArtifactId.fromMvnId(id));
if ( features[index] == null ) {
throw new IllegalStateException("Unable to find included
feature " + id);
}
index++;
}
- return assemble(app, provider, features);
+ return assemble(app, context, features);
}
/**
@@ -72,18 +72,18 @@ public class ApplicationBuilder {
* is ignored.
*
* @param app The optional application to use as a base.
- * @param provider The provider to resolve features.
+ * @param context The builder context
* @param features The features
* @return The application
- * throws IllegalArgumentException If provider or featureIds is {@code
null}
+ * throws IllegalArgumentException If context or featureIds is {@code null}
* throws IllegalStateException If a feature can't be provided
*/
public static Application assemble(
Application app,
- final FeatureProvider provider,
+ final BuilderContext context,
final Feature... features) {
- if ( features == null || provider == null ) {
- throw new IllegalArgumentException("Features and/or provider must
not be null");
+ if ( features == null || context == null ) {
+ throw new IllegalArgumentException("Features and/or context must
not be null");
}
if ( app == null ) {
@@ -117,7 +117,7 @@ public class ApplicationBuilder {
for(final Map.Entry<Feature, List<Feature>> entry :
upgrades.entrySet()) {
final Feature assembled = FeatureBuilder.assemble(entry.getKey(),
entry.getValue(),
- provider);
+ context);
// update feature to assembled feature
sortedFeatureList.remove(entry.getKey());
sortedFeatureList.add(assembled);
@@ -128,7 +128,7 @@ public class ApplicationBuilder {
// assemble
for(final Feature f : sortedFeatureList) {
- final Feature assembled = FeatureBuilder.assemble(f, new
FeatureProvider() {
+ final Feature assembled = FeatureBuilder.assemble(f,
context.clone(new FeatureProvider() {
@Override
public Feature provide(final ArtifactId id) {
@@ -142,9 +142,9 @@ public class ApplicationBuilder {
return f;
}
}
- return provider.provide(id);
+ return context.getFeatureProvider().provide(id);
}
- });
+ }));
merge(app, assembled);
}
Modified:
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/process/BuilderUtil.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/process/BuilderUtil.java?rev=1806975&r1=1806974&r2=1806975&view=diff
==============================================================================
---
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/process/BuilderUtil.java
(original)
+++
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/process/BuilderUtil.java
Fri Sep 1 15:14:31 2017
@@ -182,7 +182,7 @@ class BuilderUtil {
static void mergeExtensions(final Feature target,
final Feature source,
final ArtifactMerge artifactMergeAlg,
- final FeatureExtensionHandler... extensionMergers) {
+ final BuilderContext context) {
for(final Extension ext : source.getExtensions()) {
boolean found = false;
for(final Extension current : target.getExtensions()) {
@@ -192,13 +192,15 @@ class BuilderUtil {
throw new IllegalStateException("Found different types
for extension " + current.getName()
+ " : " + current.getType() + " and " + ext.getType());
}
- if ( extensionMergers != null ) {
- for(final FeatureExtensionHandler fem :
extensionMergers) {
- if ( fem.canMerge(current.getName()) ) {
- fem.merge(target, source, current.getName());
- }
+ boolean handled = false;
+ for(final FeatureExtensionHandler fem :
context.getFeatureExtensionHandlers()) {
+ if ( fem.canMerge(current.getName()) ) {
+ fem.merge(target, source, current.getName());
+ handled = true;
+ break;
}
- } else {
+ }
+ if ( !handled ) {
// default merge
mergeExtensions(current, ext, artifactMergeAlg);
}
Modified:
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/process/FeatureBuilder.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/process/FeatureBuilder.java?rev=1806975&r1=1806974&r2=1806975&view=diff
==============================================================================
---
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/process/FeatureBuilder.java
(original)
+++
sling/whiteboard/cziegeler/feature/src/main/java/org/apache/sling/feature/process/FeatureBuilder.java
Fri Sep 1 15:14:31 2017
@@ -35,19 +35,17 @@ public class FeatureBuilder {
* Assemble the full feature by processing all includes.
*
* @param feature The feature to start
- * @param provider A provider providing the included features
- * @param extensionMergers Optional feature mergers
+ * @param context The builder context
* @return The assembled feature.
- * @throws IllegalArgumentException If feature or provider is {@code null}
+ * @throws IllegalArgumentException If feature or context is {@code null}
* @throws IllegalStateException If an included feature can't be provided
or merged.
*/
public static Feature assemble(final Feature feature,
- final FeatureProvider provider,
- final FeatureExtensionHandler... extensionMergers) {
- if ( feature == null || provider == null ) {
- throw new IllegalArgumentException("Feature and/or provider must
not be null");
+ final BuilderContext context) {
+ if ( feature == null || context == null ) {
+ throw new IllegalArgumentException("Feature and/or context must
not be null");
}
- return internalAssemble(new ArrayList<>(), feature, provider,
extensionMergers);
+ return internalAssemble(new ArrayList<>(), feature, context);
}
/**
@@ -60,17 +58,16 @@ public class FeatureBuilder {
* @param feature The feature to start
* @param upgrades The list of upgrades. If this is {@code null} or empty,
this method
* behaves like {@link #assemble(Feature, FeatureProvider)}.
- * @param provider A provider providing the included features
+ * @param context The builder context
* @return The assembled feature.
- * @throws IllegalArgumentException If feature or provider is {@code null}
+ * @throws IllegalArgumentException If feature or context is {@code null}
* @throws IllegalStateException If an included feature can't be provided
*/
public static Feature assemble(final Feature feature,
final List<Feature> upgrades,
- final FeatureProvider provider,
- final FeatureExtensionHandler... extensionMergers) {
- if ( feature == null || provider == null ) {
- throw new IllegalArgumentException("Feature and/or provider must
not be null");
+ final BuilderContext context) {
+ if ( feature == null || context == null ) {
+ throw new IllegalArgumentException("Feature and/or context must
not be null");
}
// check upgrades
@@ -104,7 +101,7 @@ public class FeatureBuilder {
}
// assemble feature without upgrades
- final Feature assembledFeature = internalAssemble(new ArrayList<>(),
feature, provider, extensionMergers);
+ final Feature assembledFeature = internalAssemble(new ArrayList<>(),
feature, context);
// handle upgrades
if ( useUpdates != null ) {
@@ -126,10 +123,10 @@ public class FeatureBuilder {
// now assemble upgrade, but without considering the base
uf.setUpgradeOf(null);
assembledFeature.getUpgrades().add(uf.getId());
- final Feature auf = assemble(uf, provider);
+ final Feature auf = assemble(uf, context);
// merge
- merge(assembledFeature, auf, extensionMergers);
+ merge(assembledFeature, auf, context);
}
}
@@ -138,8 +135,7 @@ public class FeatureBuilder {
private static Feature internalAssemble(final List<String>
processedFeatures,
final Feature feature,
- final FeatureProvider provider,
- final FeatureExtensionHandler... extensionMergers) {
+ final BuilderContext context) {
if ( feature.isAssembled() ) {
return feature;
}
@@ -188,19 +184,19 @@ public class FeatureBuilder {
result.getExtensions().clear();
for(final Include i : includes) {
- final Feature f = provider.provide(i.getId());
+ 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,
provider, extensionMergers);
+ final Feature af = internalAssemble(processedFeatures, f,
context);
// process include instructions
include(af, i);
// and now merge
- merge(result, af, extensionMergers);
+ merge(result, af, context);
}
- merge(result, feature, extensionMergers);
+ merge(result, feature, context);
}
processedFeatures.remove(feature.getId().toMvnId());
@@ -208,8 +204,9 @@ public class FeatureBuilder {
return result;
}
- private static void merge(final Feature target, final Feature source,
- final FeatureExtensionHandler... extensionMergers) {
+ private static void merge(final Feature target,
+ final Feature source,
+ final BuilderContext context) {
BuilderUtil.mergeBundles(target.getBundles(), source.getBundles(),
BuilderUtil.ArtifactMerge.LATEST);
BuilderUtil.mergeConfigurations(target.getConfigurations(),
source.getConfigurations());
BuilderUtil.mergeFrameworkProperties(target.getFrameworkProperties(),
source.getFrameworkProperties());
@@ -218,7 +215,7 @@ public class FeatureBuilder {
BuilderUtil.mergeExtensions(target,
source,
BuilderUtil.ArtifactMerge.LATEST,
- extensionMergers);
+ context);
}
private static void include(final Feature base, final Include i) {
Modified:
sling/whiteboard/cziegeler/feature/src/test/java/org/apache/sling/feature/process/FeatureBuilderTest.java
URL:
http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature/src/test/java/org/apache/sling/feature/process/FeatureBuilderTest.java?rev=1806975&r1=1806974&r2=1806975&view=diff
==============================================================================
---
sling/whiteboard/cziegeler/feature/src/test/java/org/apache/sling/feature/process/FeatureBuilderTest.java
(original)
+++
sling/whiteboard/cziegeler/feature/src/test/java/org/apache/sling/feature/process/FeatureBuilderTest.java
Fri Sep 1 15:14:31 2017
@@ -16,6 +16,16 @@
*/
package org.apache.sling.feature.process;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
import org.apache.sling.feature.Artifact;
import org.apache.sling.feature.ArtifactId;
import org.apache.sling.feature.Capability;
@@ -26,16 +36,6 @@ import org.apache.sling.feature.Include;
import org.apache.sling.feature.Requirement;
import org.junit.Test;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
public class FeatureBuilderTest {
private static final Map<String, Feature> FEATURES = new HashMap<>();
@@ -212,7 +212,7 @@ public class FeatureBuilderTest {
assertFalse(base.isAssembled());
- final Feature assembled = FeatureBuilder.assemble(base, provider);
+ final Feature assembled = FeatureBuilder.assemble(base, new
BuilderContext(provider));
equals(base, assembled);
}
@@ -269,7 +269,7 @@ public class FeatureBuilderTest {
result.getConfigurations().add(co3);
// assemble
- final Feature assembled = FeatureBuilder.assemble(base, provider);
+ final Feature assembled = FeatureBuilder.assemble(base, new
BuilderContext(provider));
// and test
equals(result, assembled);