You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:15:27 UTC

[sling-maven-launchpad-plugin] 44/49: SLING-1597 - adding config installation via launchpad

This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag maven-launchpad-plugin-2.0.10
in repository https://gitbox.apache.org/repos/asf/sling-maven-launchpad-plugin.git

commit 61f3f68f56de076696fdba84ed5bbf3b80227469
Author: Justin Edelson <ju...@apache.org>
AuthorDate: Mon Dec 20 16:15:25 2010 +0000

    SLING-1597 - adding config installation via launchpad
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/maven/maven-launchpad-plugin@1051167 13f79535-47bb-0310-9956-ffa450edef68
---
 pom.xml                                            |  9 +-
 .../projectsupport/AbstractBundleListMojo.java     | 10 +++
 .../AbstractLaunchpadStartingMojo.java             | 97 +++++++++++++++++-----
 .../maven/projectsupport/PreparePackageMojo.java   | 12 ++-
 .../apache/sling/maven/projectsupport/RunMojo.java |  4 +-
 .../sling/maven/projectsupport/StartMojo.java      |  4 +-
 6 files changed, 108 insertions(+), 28 deletions(-)

diff --git a/pom.xml b/pom.xml
index 4d6ad74..80513cb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -137,13 +137,18 @@
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.launchpad.api</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.launchpad.base</artifactId>
-            <version>2.2.0</version>
+            <version>2.2.1-SNAPSHOT</version>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.launchpad.base</artifactId>
-            <version>2.2.0</version>
+            <version>2.2.1-SNAPSHOT</version>
             <classifier>app</classifier>
         </dependency>
         <dependency>
diff --git a/src/main/java/org/apache/sling/maven/projectsupport/AbstractBundleListMojo.java b/src/main/java/org/apache/sling/maven/projectsupport/AbstractBundleListMojo.java
index 73b31ef..7201bd3 100644
--- a/src/main/java/org/apache/sling/maven/projectsupport/AbstractBundleListMojo.java
+++ b/src/main/java/org/apache/sling/maven/projectsupport/AbstractBundleListMojo.java
@@ -52,6 +52,12 @@ import org.drools.runtime.StatefulKnowledgeSession;
 public abstract class AbstractBundleListMojo extends AbstractMojo {
 
     /**
+     * @parameter expression="${configDirectory}"
+     *            default-value="src/main/config"
+     */
+    protected File configDirectory;
+
+    /**
      * JAR Packaging type.
      */
     protected static final String JAR = "jar";
@@ -61,6 +67,10 @@ public abstract class AbstractBundleListMojo extends AbstractMojo {
      */
     protected static final String WAR = "war";
 
+    protected static final String CONFIG_PATH_PREFIX = "resources/config";
+
+    protected static final String BUNDLE_PATH_PREFIX = "resources/bundles";
+
     protected static boolean shouldCopy(File source, File dest) {
         if (!dest.exists()) {
             return true;
diff --git a/src/main/java/org/apache/sling/maven/projectsupport/AbstractLaunchpadStartingMojo.java b/src/main/java/org/apache/sling/maven/projectsupport/AbstractLaunchpadStartingMojo.java
index 29004a6..6c5c4fd 100644
--- a/src/main/java/org/apache/sling/maven/projectsupport/AbstractLaunchpadStartingMojo.java
+++ b/src/main/java/org/apache/sling/maven/projectsupport/AbstractLaunchpadStartingMojo.java
@@ -19,7 +19,11 @@ package org.apache.sling.maven.projectsupport;
 import static org.apache.felix.framework.util.FelixConstants.*;
 
 import java.io.File;
+import java.io.FileFilter;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
@@ -37,7 +41,7 @@ import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.shared.filtering.MavenFileFilter;
 import org.apache.maven.shared.filtering.MavenFilteringException;
 import org.apache.maven.shared.filtering.PropertyUtils;
-import org.apache.sling.launchpad.base.impl.ResourceProvider;
+import org.apache.sling.launchpad.api.LaunchpadContentProvider;
 import org.apache.sling.launchpad.base.impl.Sling;
 import org.apache.sling.launchpad.base.shared.Notifiable;
 import org.apache.sling.launchpad.base.shared.SharedConstants;
@@ -46,10 +50,6 @@ import org.apache.sling.maven.projectsupport.bundlelist.v1_0_0.BundleList;
 import org.apache.sling.maven.projectsupport.bundlelist.v1_0_0.StartLevel;
 import org.osgi.framework.BundleException;
 
-/**
- * Base plugin class for goals which start Sling. 
- * 
- */
 public abstract class AbstractLaunchpadStartingMojo extends AbstractBundleListMojo implements Notifiable {
 
     /** Default log level setting if no set on command line (value is "INFO"). */
@@ -101,7 +101,7 @@ public abstract class AbstractLaunchpadStartingMojo extends AbstractBundleListMo
 
     /**
      * @parameter expression="${resourceProviderRoot}"
-     *           default-value="src/test/resources"
+     *            default-value="src/test/resources"
      */
     private File resourceProviderRoot;
 
@@ -110,22 +110,51 @@ public abstract class AbstractLaunchpadStartingMojo extends AbstractBundleListMo
      */
     private MavenFileFilter mavenFileFilter;
 
-    private ResourceProvider resourceProvider = new ResourceProvider() {
+    /**
+     * @parameter expression="${session}"
+     * @required
+     * @readonly
+     */
+    private MavenSession mavenSession;
+
+    private LaunchpadContentProvider resourceProvider = new LaunchpadContentProvider() {
 
-        @Override
         public Iterator<String> getChildren(String path) {
-            if (path.equals("resources/bundles")) {
+            if (path.equals(BUNDLE_PATH_PREFIX)) {
                 List<String> levels = new ArrayList<String>();
                 for (StartLevel level : getBundleList().getStartLevels()) {
-                    levels.add(String.valueOf(level.getLevel()) + "/");
+                    levels.add(String.valueOf(BUNDLE_PATH_PREFIX + "/" + level.getLevel()) + "/");
                 }
                 return levels.iterator();
             } else if (path.equals("resources/corebundles")) {
                 List<String> empty = Collections.emptyList();
                 return empty.iterator();
-            } else {
+            } else if (path.equals(CONFIG_PATH_PREFIX)) {
+                if (configDirectory.exists() && configDirectory.isDirectory()) {
+                    File[] configFiles = configDirectory.listFiles(new FileFilter() {
+
+                        public boolean accept(File file) {
+                            return file.isFile();
+                        }
+                    });
+
+                    List<String> fileNames = new ArrayList<String>();
+                    for (File cfgFile : configFiles) {
+                        if (cfgFile.isFile()) {
+                            fileNames.add(CONFIG_PATH_PREFIX + "/" + cfgFile.getName());
+                        }
+                    }
+
+                    return fileNames.iterator();
+
+                } else {
+                    List<String> empty = Collections.emptyList();
+                    return empty.iterator();
+                }
+            } else if (path.startsWith(BUNDLE_PATH_PREFIX)) {
+                String startLevel = path.substring(BUNDLE_PATH_PREFIX.length() + 1);
                 try {
-                    int i = Integer.parseInt(path);
+                    int i = Integer.parseInt(startLevel);
                     List<String> bundles = new ArrayList<String>();
                     for (StartLevel level : getBundleList().getStartLevels()) {
                         if (level.getLevel() == i) {
@@ -145,15 +174,25 @@ public abstract class AbstractLaunchpadStartingMojo extends AbstractBundleListMo
                     return bundles.iterator();
 
                 } catch (NumberFormatException e) {
-                    getLog().warn("un-handlable path " + path);
-                    return null;
-
                 }
             }
+
+            getLog().warn("un-handlable path " + path);
+            return null;
         }
 
-        @Override
         public URL getResource(String path) {
+            if (path.startsWith(CONFIG_PATH_PREFIX)) {
+                File configFile = new File(configDirectory, path.substring(CONFIG_PATH_PREFIX.length() + 1));
+                if (configFile.exists()) {
+                    try {
+                        return configFile.toURI().toURL();
+                    } catch (MalformedURLException e) {
+                        // ignore this one
+                    }
+                }
+            }
+
             File resourceFile = new File(resourceProviderRoot, path);
             if (resourceFile.exists()) {
                 try {
@@ -167,13 +206,29 @@ public abstract class AbstractLaunchpadStartingMojo extends AbstractBundleListMo
                 if (fromClasspath != null) {
                     return fromClasspath;
                 }
-                
+
                 try {
                     return new URL(path);
                 } catch (MalformedURLException e) {
                     return null;
                 }
             }
+
+        }
+
+        public InputStream getResourceAsStream(String path) {
+            URL res = this.getResource(path);
+            if (res != null) {
+                try {
+                    return res.openStream();
+                } catch (IOException ioe) {
+                    // ignore this one
+                }
+            }
+
+            // no resource
+            return null;
+
         }
     };
 
@@ -200,9 +255,9 @@ public abstract class AbstractLaunchpadStartingMojo extends AbstractBundleListMo
         if (updateFile != null) {
             getLog().warn("Maven Launchpad Plugin doesn't support updating the framework bundle.");
         }
-        
+
         getLog().info("Restarting Framework and Sling");
-    
+
         try {
             executeWithArtifacts();
         } catch (MojoExecutionException e) {
@@ -270,8 +325,8 @@ public abstract class AbstractLaunchpadStartingMojo extends AbstractBundleListMo
 
     }
 
-    protected abstract Sling startSling(ResourceProvider resourceProvider, Map<String, String> props, Logger logger)
-            throws BundleException;
+    protected abstract Sling startSling(LaunchpadContentProvider resourceProvider, Map<String, String> props,
+            Logger logger) throws BundleException;
 
     protected void stopSling() {
         if (sling != null) {
diff --git a/src/main/java/org/apache/sling/maven/projectsupport/PreparePackageMojo.java b/src/main/java/org/apache/sling/maven/projectsupport/PreparePackageMojo.java
index 55629db..1fdc8c0 100644
--- a/src/main/java/org/apache/sling/maven/projectsupport/PreparePackageMojo.java
+++ b/src/main/java/org/apache/sling/maven/projectsupport/PreparePackageMojo.java
@@ -92,12 +92,13 @@ public class PreparePackageMojo extends AbstractLaunchpadFrameworkMojo {
 	public void executeWithArtifacts() throws MojoExecutionException, MojoFailureException {
 		copyBaseArtifact();
 		copyBundles(getBundleList(), getOutputDirectory());
+		copyConfigurationFiles();
 		if (JAR.equals(packaging)) {
 			unpackBaseArtifact();
 		}
 	}
 
-	protected void initArtifactDefinitions(Properties dependencies) {
+    protected void initArtifactDefinitions(Properties dependencies) {
 		if (base == null) {
 			base = new ArtifactDefinition();
 		}
@@ -186,6 +187,15 @@ public class PreparePackageMojo extends AbstractLaunchpadFrameworkMojo {
 		unpack(artifact.getFile(), buildOutputDirectory, null, null);
 	}
 
+    private void copyConfigurationFiles() throws MojoExecutionException {
+        try {
+            FileUtils.copyDirectory(configDirectory, new File(getOutputDirectory(), CONFIG_PATH_PREFIX));
+        } catch (IOException e) {
+            throw new MojoExecutionException("Unable to copy configuration files", e);
+        }
+        
+    }
+
     private void unpack(File source, File destination, String includes, String excludes)
             throws MojoExecutionException {
         getLog().info("Unpacking " + source.getPath() + " to\n  " + destination.getPath());
diff --git a/src/main/java/org/apache/sling/maven/projectsupport/RunMojo.java b/src/main/java/org/apache/sling/maven/projectsupport/RunMojo.java
index a00133a..feaecd5 100644
--- a/src/main/java/org/apache/sling/maven/projectsupport/RunMojo.java
+++ b/src/main/java/org/apache/sling/maven/projectsupport/RunMojo.java
@@ -19,7 +19,7 @@ package org.apache.sling.maven.projectsupport;
 import java.util.Map;
 
 import org.apache.felix.framework.Logger;
-import org.apache.sling.launchpad.base.impl.ResourceProvider;
+import org.apache.sling.launchpad.api.LaunchpadContentProvider;
 import org.apache.sling.launchpad.base.impl.Sling;
 import org.osgi.framework.BundleException;
 
@@ -65,7 +65,7 @@ public class RunMojo extends AbstractLaunchpadStartingMojo {
     
     private boolean registeredHook = false;
 
-    protected Sling startSling(ResourceProvider resourceProvider, final Map<String, String> props, Logger logger)
+    protected Sling startSling(LaunchpadContentProvider resourceProvider, final Map<String, String> props, Logger logger)
             throws BundleException {
         if (!registeredHook) {
             Runtime.getRuntime().addShutdownHook(shutdown);
diff --git a/src/main/java/org/apache/sling/maven/projectsupport/StartMojo.java b/src/main/java/org/apache/sling/maven/projectsupport/StartMojo.java
index e83a75b..4a48571 100644
--- a/src/main/java/org/apache/sling/maven/projectsupport/StartMojo.java
+++ b/src/main/java/org/apache/sling/maven/projectsupport/StartMojo.java
@@ -19,7 +19,7 @@ package org.apache.sling.maven.projectsupport;
 import java.util.Map;
 
 import org.apache.felix.framework.Logger;
-import org.apache.sling.launchpad.base.impl.ResourceProvider;
+import org.apache.sling.launchpad.api.LaunchpadContentProvider;
 import org.apache.sling.launchpad.base.impl.Sling;
 import org.osgi.framework.BundleException;
 
@@ -46,7 +46,7 @@ public class StartMojo extends AbstractLaunchpadStartingMojo {
      * {@inheritDoc}
      */
     @Override
-    protected Sling startSling(ResourceProvider resourceProvider, final Map<String, String> props, Logger logger)
+    protected Sling startSling(LaunchpadContentProvider resourceProvider, final Map<String, String> props, Logger logger)
             throws BundleException {
         new ControlListener(this, getLog(), controlHost, controlPort).listen();
 

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.