You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2015/07/13 22:44:40 UTC

svn commit: r1690815 - /sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/

Author: sseifert
Date: Mon Jul 13 20:44:39 2015
New Revision: 1690815

URL: http://svn.apache.org/r1690815
Log:
SLING-4879 Allow to read variables from POM

Added:
    sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PomVariableResolver.java   (with props)
Modified:
    sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/AbstractSlingStartMojo.java
    sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/AttachSlingStartModel.java
    sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
    sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PreparePackageMojo.java
    sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/ProjectHelper.java

Modified: sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/AbstractSlingStartMojo.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/AbstractSlingStartMojo.java?rev=1690815&r1=1690814&r2=1690815&view=diff
==============================================================================
--- sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/AbstractSlingStartMojo.java (original)
+++ sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/AbstractSlingStartMojo.java Mon Jul 13 20:44:39 2015
@@ -24,6 +24,7 @@ import org.apache.maven.plugins.annotati
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.MavenProjectHelper;
+import org.apache.sling.provisioning.model.ModelUtility.VariableResolver;
 
 /**
  * Base class for all slingstart mojos.
@@ -45,7 +46,32 @@ public abstract class AbstractSlingStart
     @Parameter(defaultValue="false")
     protected boolean createWebapp;
 
+    /**
+     * If set to true, properties from the Maven POM can be used as variables in the provisioning files.
+     */
+    @Parameter(defaultValue="false")
+    protected boolean usePomVariables;
+        
+    /**
+     * If set to true, the effective provisioning models with all variables replaced is attached instead of the raw model.
+     */
+    @Parameter(defaultValue="false")
+    protected boolean attachEffectiveModel;
+        
     protected File getTmpDir() {
         return new File(this.project.getBuild().getDirectory(), "slingstart-tmp");
     }
+    
+    /**
+     * @return Variable to be used when building an effective provisioning model.
+     */
+    protected VariableResolver getVariableResolver() {
+        if (usePomVariables) {
+            return new PomVariableResolver(project);
+        }
+        else {
+            return null;
+        }
+    }
+    
 }

Modified: sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/AttachSlingStartModel.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/AttachSlingStartModel.java?rev=1690815&r1=1690814&r2=1690815&view=diff
==============================================================================
--- sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/AttachSlingStartModel.java (original)
+++ sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/AttachSlingStartModel.java Mon Jul 13 20:44:39 2015
@@ -43,7 +43,13 @@ public class AttachSlingStartModel exten
 
     @Override
     public void execute() throws MojoExecutionException, MojoFailureException {
-        final Model model = ProjectHelper.getRawModel(this.project);
+        final Model model;
+        if (attachEffectiveModel) {
+            model = ProjectHelper.getEffectiveModel(this.project, getVariableResolver());
+        }
+        else {
+            model = ProjectHelper.getRawModel(this.project);
+        }
 
         // write the model
         final File outputFile = new File(this.project.getBuild().getDirectory() + File.separatorChar + BuildConstants.MODEL_ARTIFACT_NAME);

Modified: sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java?rev=1690815&r1=1690814&r2=1690815&view=diff
==============================================================================
--- sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java (original)
+++ sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java Mon Jul 13 20:44:39 2015
@@ -46,6 +46,7 @@ import org.apache.sling.provisioning.mod
 import org.apache.sling.provisioning.model.ModelUtility;
 import org.apache.sling.provisioning.model.RunMode;
 import org.apache.sling.provisioning.model.Traceable;
+import org.apache.sling.provisioning.model.ModelUtility.VariableResolver;
 import org.apache.sling.provisioning.model.io.ModelReader;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
@@ -144,9 +145,15 @@ public class DependencyLifecycleParticip
         } catch ( final IOException ioe) {
             throw new MavenExecutionException(ioe.getMessage(), ioe);
         }
+        
+        // prepare variable resolver
+        VariableResolver variableResolver = null;
+        if (nodeBooleanValue(info.plugin, "usePomVariables", false)) {
+            variableResolver = new PomVariableResolver(info.project);
+        }
 
         // we have to create an effective model to add the dependencies
-        final Model effectiveModel = ModelUtility.getEffectiveModel(info.localModel, null);
+        final Model effectiveModel = ModelUtility.getEffectiveModel(info.localModel, variableResolver);
 
         final List<Model> dependencies = searchSlingstartDependencies(env, info, effectiveModel);
         info.model = new Model();
@@ -154,7 +161,7 @@ public class DependencyLifecycleParticip
             ModelUtility.merge(info.model, d);
         }
         ModelUtility.merge(info.model, effectiveModel);
-        info.model = ModelUtility.getEffectiveModel(info.model, null);
+        info.model = ModelUtility.getEffectiveModel(info.model, variableResolver);
 
         final Map<Traceable, String> errors = ModelUtility.validate(info.model);
         if ( errors != null ) {
@@ -315,6 +322,13 @@ public class DependencyLifecycleParticip
         return dependencies;
     }
 
+    /**
+     * Gets plugins configuration from POM (string parameter).
+     * @param plugin Plugin
+     * @param name Configuration parameter.
+     * @param defaultValue Default value that is returned if parameter is not set
+     * @return Parameter value or default value.
+     */
     private static String nodeValue(final Plugin plugin, final String name, final String defaultValue) {
         final Xpp3Dom config = plugin == null ? null : (Xpp3Dom)plugin.getConfiguration();
         final Xpp3Dom node = (config == null ? null : config.getChild(name));
@@ -325,6 +339,18 @@ public class DependencyLifecycleParticip
         }
     }
 
+    /**
+     * Gets plugins configuration from POM (boolean parameter).
+     * @param plugin Plugin
+     * @param name Configuration parameter.
+     * @param defaultValue Default value that is returned if parameter is not set
+     * @return Parameter value or default value.
+     */
+    private static boolean nodeBooleanValue(final Plugin plugin, final String name, final boolean defaultValue) {
+        String booleanValue = nodeValue(plugin, name, Boolean.toString(defaultValue));
+        return "true".equals(booleanValue.toLowerCase());
+    }
+
     private static File resolveSlingstartArtifact(final Environment env,
             final MavenProject project,
             final Dependency d)

Added: sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PomVariableResolver.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PomVariableResolver.java?rev=1690815&view=auto
==============================================================================
--- sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PomVariableResolver.java (added)
+++ sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PomVariableResolver.java Mon Jul 13 20:44:39 2015
@@ -0,0 +1,49 @@
+/*
+ * 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.maven.slingstart;
+
+import org.apache.maven.project.MavenProject;
+import org.apache.sling.provisioning.model.Feature;
+import org.apache.sling.provisioning.model.ModelUtility.VariableResolver;
+
+/**
+ * Provisioning variable resolver that supports setting or overriding variables via POM properties.
+ * Properties in POM have higher precedence than variables defined in the provisioning file.
+ */
+public class PomVariableResolver implements VariableResolver {
+    
+    private final MavenProject project;
+    
+    /**
+     * @param project Maven project
+     */
+    public PomVariableResolver(MavenProject project) {
+        this.project = project;
+    }
+
+    @Override
+    public String resolve(Feature feature, String name) {
+        Object pomValue = project.getProperties().get(name);
+        if (pomValue != null) {
+            return pomValue.toString();
+        }
+        return feature.getVariables().get(name);
+    }
+    
+}

Propchange: sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PomVariableResolver.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PomVariableResolver.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Mon Jul 13 20:44:39 2015
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author

Propchange: sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PomVariableResolver.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PreparePackageMojo.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PreparePackageMojo.java?rev=1690815&r1=1690814&r2=1690815&view=diff
==============================================================================
--- sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PreparePackageMojo.java (original)
+++ sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/PreparePackageMojo.java Mon Jul 13 20:44:39 2015
@@ -91,7 +91,7 @@ public class PreparePackageMojo extends
 
     @Override
     public void execute() throws MojoExecutionException, MojoFailureException {
-        final Model model = ProjectHelper.getEffectiveModel(this.project);
+        final Model model = ProjectHelper.getEffectiveModel(this.project, getVariableResolver());
 
         this.prepareGlobal(model);
         this.prepareStandaloneApp(model);

Modified: sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/ProjectHelper.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/ProjectHelper.java?rev=1690815&r1=1690814&r2=1690815&view=diff
==============================================================================
--- sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/ProjectHelper.java (original)
+++ sling/trunk/tooling/maven/slingstart-maven-plugin/src/main/java/org/apache/sling/maven/slingstart/ProjectHelper.java Mon Jul 13 20:44:39 2015
@@ -24,6 +24,7 @@ import org.apache.maven.plugin.MojoExecu
 import org.apache.maven.project.MavenProject;
 import org.apache.sling.provisioning.model.Model;
 import org.apache.sling.provisioning.model.ModelUtility;
+import org.apache.sling.provisioning.model.ModelUtility.VariableResolver;
 import org.apache.sling.provisioning.model.io.ModelReader;
 import org.apache.sling.provisioning.model.io.ModelWriter;
 
@@ -59,14 +60,14 @@ public abstract class ProjectHelper {
      * @return The effective model
      * @throws MojoExecutionException If reading fails
      */
-    public static Model getEffectiveModel(final MavenProject project)
+    public static Model getEffectiveModel(final MavenProject project, VariableResolver variableResolver)
     throws MojoExecutionException {
         Model result = (Model) project.getContextValue(EFFECTIVE_MODEL_CACHE);
         if ( result == null ) {
             try {
                 final StringReader r = new StringReader((String)project.getContextValue(EFFECTIVE_MODEL_TXT));
                 result = ModelReader.read(r, project.getId());
-                result = ModelUtility.getEffectiveModel(result, null);
+                result = ModelUtility.getEffectiveModel(result, variableResolver);
                 project.setContextValue(EFFECTIVE_MODEL_CACHE, result);
             } catch ( final IOException ioe) {
                 throw new MojoExecutionException(ioe.getMessage(), ioe);