SLING-4728 - nested models work, but using nested.models variable so far
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1685741 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/sling/crankstart/launcher/Launcher.java b/src/main/java/org/apache/sling/crankstart/launcher/Launcher.java
index cedc244..79df437 100644
--- a/src/main/java/org/apache/sling/crankstart/launcher/Launcher.java
+++ b/src/main/java/org/apache/sling/crankstart/launcher/Launcher.java
@@ -108,12 +108,11 @@
mergeModel(f);
}
- // And merge nested models (supporting one level of nesting only so far)
- new NestedModelsMerger(model).visit();
computeEffectiveModel();
}
- public void computeEffectiveModel() {
+ public void computeEffectiveModel() throws Exception {
+ new NestedModelsMerger(model).visit();
model = ModelUtility.getEffectiveModel(model, overridingVariableResolver);
}
diff --git a/src/main/java/org/apache/sling/crankstart/launcher/NestedModelsMerger.java b/src/main/java/org/apache/sling/crankstart/launcher/NestedModelsMerger.java
index dec9f2c..6bc285a 100644
--- a/src/main/java/org/apache/sling/crankstart/launcher/NestedModelsMerger.java
+++ b/src/main/java/org/apache/sling/crankstart/launcher/NestedModelsMerger.java
@@ -37,6 +37,10 @@
private final Logger log = LoggerFactory.getLogger(getClass());
private List<Artifact> toMerge;
+ public static final String SLINGSTART = "slingstart";
+ public static final String SLINGFEATURE = "slingfeature";
+ public static final String NESTED_MODELS = "nested.models";
+
public NestedModelsMerger(Model m) {
super(m);
}
@@ -70,9 +74,18 @@
@Override
protected void visitArtifact(Feature f, RunMode rm, ArtifactGroup g, Artifact a) throws Exception {
- final String classifier = a.getClassifier();
- if("slingstart".equals(classifier ) || "slingfeature".equals(classifier)) {
- toMerge.add(a);
+ // TODO how to identify a nested model when it's the main artifact of a module,
+ // so doesn't have a slingfeature/slingstart type or classifier in its artifact URL?
+ final String str = f.getVariables().get(NESTED_MODELS);
+ if(str == null || str.length() == 0) {
+ return;
+ }
+ final String [] nm = str.split(",");
+ for(String nested : nm) {
+ if(nested.equals(a.getArtifactId())) {
+ log.info("{} feature variable identifies artifact as a nested model , will be merged: {}", f.getName() + "/" + NESTED_MODELS, a);
+ toMerge.add(a);
+ }
}
}
}
\ No newline at end of file
diff --git a/src/test/java/org/apache/sling/crankstart/launcher/BasicLauncherIT.java b/src/test/java/org/apache/sling/crankstart/launcher/BasicLauncherIT.java
index c70a737..167accd 100644
--- a/src/test/java/org/apache/sling/crankstart/launcher/BasicLauncherIT.java
+++ b/src/test/java/org/apache/sling/crankstart/launcher/BasicLauncherIT.java
@@ -17,7 +17,6 @@
import org.apache.sling.testing.tools.osgi.WebconsoleClient;
import org.junit.Before;
import org.junit.BeforeClass;
-import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
@@ -119,11 +118,10 @@
}
@Test
- @Ignore("until test-model is deployed with classifier=slingfeature")
public void testBundlesFromNestedModel() throws Exception {
final String [] addBundles = {
"org.apache.sling.commons.threads",
- "org.apache.sling.commons.testing"
+ "org.apache.sling/org.apache.sling.discovery.api"
};
for(String name : addBundles) {
diff --git a/src/test/java/org/apache/sling/crankstart/launcher/CrankstartSetup.java b/src/test/java/org/apache/sling/crankstart/launcher/CrankstartSetup.java
index 4b8f3af..7548be7 100644
--- a/src/test/java/org/apache/sling/crankstart/launcher/CrankstartSetup.java
+++ b/src/test/java/org/apache/sling/crankstart/launcher/CrankstartSetup.java
@@ -108,6 +108,7 @@
for(String path : MODEL_PATHS) {
mergeModelResource(launcher, path);
}
+ launcher.computeEffectiveModel();
crankstartThread = new Thread() {
public void run() {
diff --git a/src/test/resources/provisioning-model/crankstart-tests.txt b/src/test/resources/provisioning-model/crankstart-tests.txt
index 0f0926c..f6df842 100644
--- a/src/test/resources/provisioning-model/crankstart-tests.txt
+++ b/src/test/resources/provisioning-model/crankstart-tests.txt
@@ -19,6 +19,9 @@
[feature name=crankstart.tests]
+[variables]
+ nested.models=org.apache.sling.cransktart.test.model
+
[artifacts]
org.apache.sling/org.apache.sling.crankstart.test.services/1.9.9-SNAPSHOT
org.apache.sling/org.apache.sling.junit.core/1.0.10
@@ -26,7 +29,7 @@
org.apache.sling/org.apache.sling.settings/1.3.6
# Test a nested model file
- org.apache.sling/org.apache.sling.crankstart.test.model/1.9.9-SNAPSHOT/txt
+ org.apache.sling/org.apache.sling.cransktart.test.model/1.9.9-SNAPSHOT/txt
[artifacts runModes=A]
org.apache.sling/org.apache.sling.api/2.9.0