Cache raw and effective model and provide separate methods
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1628121 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/sling/maven/slingstart/AbstractSlingStartMojo.java b/src/main/java/org/apache/sling/maven/slingstart/AbstractSlingStartMojo.java
index c7b541d..0a48c1c 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/AbstractSlingStartMojo.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/AbstractSlingStartMojo.java
@@ -18,7 +18,6 @@
import java.io.File;
import java.io.IOException;
-import java.io.StringReader;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.AbstractMojo;
@@ -28,7 +27,6 @@
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectHelper;
import org.apache.sling.slingstart.model.SSMDeliverable;
-import org.apache.sling.slingstart.model.txt.TXTSSMModelReader;
public abstract class AbstractSlingStartMojo extends AbstractMojo {
@@ -47,18 +45,38 @@
@Parameter(defaultValue="false")
protected boolean createWebapp;
+ private static final String CTX_RAW = SSMDeliverable.class.getName() + "/r";
+ private static final String CTX_EFFECTIVE = SSMDeliverable.class.getName() + "/e";
+
/**
* Read the model prepared by the lifecycle plugin
*/
- protected SSMDeliverable readModel()
+ protected SSMDeliverable readRawModel()
throws MojoExecutionException {
- SSMDeliverable result = (SSMDeliverable)this.project.getContextValue(SSMDeliverable.class.getName());
+ SSMDeliverable result = (SSMDeliverable)this.project.getContextValue(CTX_RAW);
if ( result == null ) {
try {
- final String contents = (String)this.project.getContextValue(SSMDeliverable.class.getName() + "/text");
- result = TXTSSMModelReader.read(new StringReader(contents), null);
+ result = ModelUtils.getRawModel(this.project);
- this.project.setContextValue(SSMDeliverable.class.getName(), result);
+ this.project.setContextValue(CTX_RAW, result);
+ } catch ( final IOException ioe) {
+ throw new MojoExecutionException("Unable to cache model", ioe);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Read the model prepared by the lifecycle plugin
+ */
+ protected SSMDeliverable readEffectiveModel()
+ throws MojoExecutionException {
+ SSMDeliverable result = (SSMDeliverable)this.project.getContextValue(CTX_EFFECTIVE);
+ if ( result == null ) {
+ try {
+ result = ModelUtils.getEffectiveModel(this.project);
+
+ this.project.setContextValue(CTX_EFFECTIVE, result);
} catch ( final IOException ioe) {
throw new MojoExecutionException("Unable to cache model", ioe);
}
diff --git a/src/main/java/org/apache/sling/maven/slingstart/AttachSlingStartModel.java b/src/main/java/org/apache/sling/maven/slingstart/AttachSlingStartModel.java
index 97f4dc6..be35ad5 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/AttachSlingStartModel.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/AttachSlingStartModel.java
@@ -44,7 +44,7 @@
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
- final SSMDeliverable model = this.readModel();
+ final SSMDeliverable model = this.readRawModel();
final File outputFile = new File(this.project.getBuild().getDirectory() + File.separatorChar + "slingstart.txt");
outputFile.getParentFile().mkdirs();
diff --git a/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java b/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
index 8e5d811..09140c6 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
@@ -17,7 +17,6 @@
package org.apache.sling.maven.slingstart;
import java.io.File;
-import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -42,7 +41,6 @@
import org.apache.sling.slingstart.model.SSMFeature;
import org.apache.sling.slingstart.model.SSMStartLevel;
import org.apache.sling.slingstart.model.SSMUtil;
-import org.apache.sling.slingstart.model.txt.TXTSSMModelWriter;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.logging.Logger;
@@ -113,11 +111,11 @@
"systemsDirectory", new File(project.getBasedir(), "src/main/systems").getAbsolutePath());
final SSMDeliverable model = ModelUtils.readFullModel(new File(directory), dependencies, project, session, log);
- final StringWriter w = new StringWriter();
- TXTSSMModelWriter.write(w, model);
- project.setContextValue(SSMDeliverable.class.getName() + "/text", w.toString());
+ ModelUtils.storeRawModel(project, model);
- final SSMDeliverable effectiveModel = SSMUtil.getEffectiveModel(model);
+ final SSMDeliverable effectiveModel = SSMUtil.getEffectiveModel(model, null);
+
+ ModelUtils.storeEffectiveModel(project, effectiveModel);
// start with base artifact
final SSMArtifact base = ModelUtils.getBaseArtifact(effectiveModel);
diff --git a/src/main/java/org/apache/sling/maven/slingstart/ModelUtils.java b/src/main/java/org/apache/sling/maven/slingstart/ModelUtils.java
index 0b79a9e..7fa192c 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/ModelUtils.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/ModelUtils.java
@@ -19,6 +19,8 @@
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -38,6 +40,7 @@
import org.apache.sling.slingstart.model.SSMTraceable;
import org.apache.sling.slingstart.model.SSMValidator;
import org.apache.sling.slingstart.model.txt.TXTSSMModelReader;
+import org.apache.sling.slingstart.model.txt.TXTSSMModelWriter;
import org.codehaus.plexus.logging.Logger;
public abstract class ModelUtils {
@@ -182,4 +185,55 @@
}
return null;
}
+
+ private static final String RAW_MODEL = SSMDeliverable.class.getName() + "/raw";
+ private static final String EFFECTIVE_MODEL = SSMDeliverable.class.getName() + "/effective";
+
+ /**
+ * Store the raw model in the project.
+ * @param project The maven project
+ * @param model The model
+ * @throws IOException If writing fails
+ */
+ public static void storeRawModel(final MavenProject project, final SSMDeliverable model)
+ throws IOException {
+ final StringWriter w = new StringWriter();
+ TXTSSMModelWriter.write(w, model);
+ project.setContextValue(RAW_MODEL, w.toString());
+ }
+
+ /**
+ * Get the raw model from the project
+ * @param project The maven projet
+ * @return The raw model
+ * @throws IOException If reading fails
+ */
+ public static SSMDeliverable getRawModel(final MavenProject project) throws IOException {
+ final String contents = (String)project.getContextValue(RAW_MODEL);
+ return TXTSSMModelReader.read(new StringReader(contents), null);
+ }
+
+ /**
+ * Store the effective model in the project.
+ * @param project The maven project
+ * @param model The model
+ * @throws IOException If writing fails
+ */
+ public static void storeEffectiveModel(final MavenProject project, final SSMDeliverable model)
+ throws IOException {
+ final StringWriter w = new StringWriter();
+ TXTSSMModelWriter.write(w, model);
+ project.setContextValue(EFFECTIVE_MODEL, w.toString());
+ }
+
+ /**
+ * Get the effective model from the project
+ * @param project The maven projet
+ * @return The raw model
+ * @throws IOException If reading fails
+ */
+ public static SSMDeliverable getEffectiveModel(final MavenProject project) throws IOException {
+ final String contents = (String)project.getContextValue(EFFECTIVE_MODEL);
+ return TXTSSMModelReader.read(new StringReader(contents), null);
+ }
}
diff --git a/src/main/java/org/apache/sling/maven/slingstart/PreparePackageMojo.java b/src/main/java/org/apache/sling/maven/slingstart/PreparePackageMojo.java
index 9b7cc6b..e9b5277 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/PreparePackageMojo.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/PreparePackageMojo.java
@@ -41,7 +41,6 @@
import org.apache.sling.slingstart.model.SSMDeliverable;
import org.apache.sling.slingstart.model.SSMFeature;
import org.apache.sling.slingstart.model.SSMStartLevel;
-import org.apache.sling.slingstart.model.SSMUtil;
import org.codehaus.plexus.archiver.ArchiverException;
import org.codehaus.plexus.archiver.UnArchiver;
import org.codehaus.plexus.archiver.manager.ArchiverManager;
@@ -79,7 +78,7 @@
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
- final SSMDeliverable model = SSMUtil.getEffectiveModel(this.readModel());
+ final SSMDeliverable model = this.readEffectiveModel();
this.prepareGlobal(model);
this.prepareStandaloneApp(model);