You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ju...@apache.org on 2010/12/20 17:15:27 UTC

svn commit: r1051167 - in /sling/trunk: ./ launchpad/api/ launchpad/api/src/ launchpad/api/src/main/ launchpad/api/src/main/java/ launchpad/api/src/main/java/org/ launchpad/api/src/main/java/org/apache/ launchpad/api/src/main/java/org/apache/sling/ lau...

Author: justin
Date: Mon Dec 20 16:15:25 2010
New Revision: 1051167

URL: http://svn.apache.org/viewvc?rev=1051167&view=rev
Log:
SLING-1597 - adding config installation via launchpad

Added:
    sling/trunk/launchpad/api/
    sling/trunk/launchpad/api/README.txt
    sling/trunk/launchpad/api/pom.xml
    sling/trunk/launchpad/api/src/
    sling/trunk/launchpad/api/src/main/
    sling/trunk/launchpad/api/src/main/java/
    sling/trunk/launchpad/api/src/main/java/org/
    sling/trunk/launchpad/api/src/main/java/org/apache/
    sling/trunk/launchpad/api/src/main/java/org/apache/sling/
    sling/trunk/launchpad/api/src/main/java/org/apache/sling/launchpad/
    sling/trunk/launchpad/api/src/main/java/org/apache/sling/launchpad/api/
    sling/trunk/launchpad/api/src/main/java/org/apache/sling/launchpad/api/LaunchpadContentProvider.java
    sling/trunk/launchpad/installer/
    sling/trunk/launchpad/installer/README.txt
    sling/trunk/launchpad/installer/pom.xml
    sling/trunk/launchpad/installer/src/
    sling/trunk/launchpad/installer/src/main/
    sling/trunk/launchpad/installer/src/main/java/
    sling/trunk/launchpad/installer/src/main/java/org/
    sling/trunk/launchpad/installer/src/main/java/org/apache/
    sling/trunk/launchpad/installer/src/main/java/org/apache/sling/
    sling/trunk/launchpad/installer/src/main/java/org/apache/sling/launchpad/
    sling/trunk/launchpad/installer/src/main/java/org/apache/sling/launchpad/installer/
    sling/trunk/launchpad/installer/src/main/java/org/apache/sling/launchpad/installer/impl/
    sling/trunk/launchpad/installer/src/main/java/org/apache/sling/launchpad/installer/impl/LaunchpadConfigInstaller.java
Removed:
    sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/ResourceProvider.java
Modified:
    sling/trunk/launchpad/base/pom.xml
    sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/app/MainDelegate.java
    sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/BootstrapInstaller.java
    sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/ClassLoaderResourceProvider.java
    sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/ContextConnection.java
    sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/ContextProtocolHandler.java
    sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/DeploymentPackageInstaller.java
    sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/Sling.java
    sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/webapp/SlingBridge.java
    sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/webapp/SlingServletDelegate.java
    sling/trunk/launchpad/base/src/main/resources/sling.properties
    sling/trunk/launchpad/builder/pom.xml
    sling/trunk/launchpad/builder/src/main/bundles/list.xml
    sling/trunk/launchpad/testing/pom.xml
    sling/trunk/maven/maven-launchpad-plugin/pom.xml
    sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/AbstractBundleListMojo.java
    sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/AbstractLaunchpadStartingMojo.java
    sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/PreparePackageMojo.java
    sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/RunMojo.java
    sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/StartMojo.java
    sling/trunk/pom.xml

Added: sling/trunk/launchpad/api/README.txt
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/api/README.txt?rev=1051167&view=auto
==============================================================================
--- sling/trunk/launchpad/api/README.txt (added)
+++ sling/trunk/launchpad/api/README.txt Mon Dec 20 16:15:25 2010
@@ -0,0 +1,29 @@
+Apache Sling Launchpad API
+
+This module contains the API exposed by the Launchpad to bundles within the embedded framework.
+It is not intended to be installed as a bundle into an OSGi framework; merely used as a dependency
+for bundles where access to the Launchpad environment is necessary.
+
+Getting Started
+===============
+
+This component uses a Maven 2 (http://maven.apache.org/) build
+environment. It requires a Java 5 JDK (or higher) and Maven (http://maven.apache.org/)
+2.0.7 or later. We recommend to use the latest Maven version.
+
+If you have Maven 2 installed, you can compile and
+package the jar using the following command:
+
+    mvn package
+
+See the Maven 2 documentation for other build features.
+
+The latest source code for this component is available in the
+Subversion (http://subversion.tigris.org/) source repository of
+the Apache Software Foundation. If you have Subversion installed,
+you can checkout the latest source using the following command:
+
+    svn checkout http://svn.apache.org/repos/asf/sling/trunk/launchpad/api
+
+See the Subversion documentation for other source control features.
+

Added: sling/trunk/launchpad/api/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/api/pom.xml?rev=1051167&view=auto
==============================================================================
--- sling/trunk/launchpad/api/pom.xml (added)
+++ sling/trunk/launchpad/api/pom.xml Mon Dec 20 16:15:25 2010
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+    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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.sling</groupId>
+        <artifactId>sling</artifactId>
+        <version>9</version>
+        <relativePath>../../parent/pom.xml</relativePath>
+    </parent>
+
+    <artifactId>org.apache.sling.launchpad.api</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <packaging>bundle</packaging>
+    <name>Apache Sling Launchpad API</name>
+
+    <description>
+        This module contains the API exposed by Launchpad to bundles.
+    </description>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Export-Package>org.apache.sling.launchpad.api;version=1.0.0</Export-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>
\ No newline at end of file

Added: sling/trunk/launchpad/api/src/main/java/org/apache/sling/launchpad/api/LaunchpadContentProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/api/src/main/java/org/apache/sling/launchpad/api/LaunchpadContentProvider.java?rev=1051167&view=auto
==============================================================================
--- sling/trunk/launchpad/api/src/main/java/org/apache/sling/launchpad/api/LaunchpadContentProvider.java (added)
+++ sling/trunk/launchpad/api/src/main/java/org/apache/sling/launchpad/api/LaunchpadContentProvider.java Mon Dec 20 16:15:25 2010
@@ -0,0 +1,46 @@
+/*
+ * 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.launchpad.api;
+
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Iterator;
+
+/**
+ * The <code>ResourceProvider</code> defines a simple API to access resources
+ * from the environment depending on how Sling is launched.
+ */
+public interface LaunchpadContentProvider {
+    
+    /**
+     * Returns an iterator of paths strings of the children of the given folder
+     * defined by its path.
+     */
+    Iterator<String> getChildren(String path);
+
+    /**
+     * Returns an URL to the resource with the given path or <code>null</code>
+     * if no such resource exists.
+     */
+    URL getResource(String path);
+
+    /**
+     * Returns an <code>InputStream</code> to the resource given by the path
+     * or <code>null</code> if no such resource exists.
+     */
+    InputStream getResourceAsStream(String path);
+}

Modified: sling/trunk/launchpad/base/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/base/pom.xml?rev=1051167&r1=1051166&r2=1051167&view=diff
==============================================================================
--- sling/trunk/launchpad/base/pom.xml (original)
+++ sling/trunk/launchpad/base/pom.xml Mon Dec 20 16:15:25 2010
@@ -111,6 +111,20 @@
                             </outputDirectory>
                         </configuration>
                     </execution>
+                    <!-- Embed code from launchpad.api -->
+                    <execution>
+                        <id>extract-sling-launchpad-api</id>
+                        <goals>
+                            <goal>unpack-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <includeArtifactIds>org.apache.sling.launchpad.api</includeArtifactIds>
+                            <excludeTransitive>true</excludeTransitive>
+                            <outputDirectory>
+                                ${project.build.directory}/classes
+                            </outputDirectory>
+                        </configuration>
+                    </execution>
                     <!-- Embed osgi Version class from framework-->
                     <execution>
                         <id>extract-osgi-framework</id>
@@ -149,6 +163,7 @@
                             </archive>
                             <classifier>app</classifier>
                             <includes>
+                                <include>org/apache/sling/launchpad/api/**</include>
                                 <include>org/apache/sling/launchpad/base/shared/**</include>
                                 <include>org/apache/sling/launchpad/app/**</include>
                                 <include>org/apache/sling/commons/osgi/bundleversion/**</include>
@@ -179,6 +194,7 @@
                             <classifier>webapp</classifier>
                             <packagingIncludes>
                                 META-INF/**,
+                                WEB-INF/classesorg/apache/sling/launchpad/api/**,
                                 WEB-INF/classes/org/apache/sling/launchpad/base/shared/**,
                                 WEB-INF/classes/org/apache/sling/launchpad/webapp/**,
                                 WEB-INF/classes/org/apache/sling/commons/osgi/bundleversion/**,
@@ -253,6 +269,12 @@
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.launchpad.api</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.commons.osgi</artifactId>
             <version>2.0.6</version>
             <scope>provided</scope>

Modified: sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/app/MainDelegate.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/app/MainDelegate.java?rev=1051167&r1=1051166&r2=1051167&view=diff
==============================================================================
--- sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/app/MainDelegate.java (original)
+++ sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/app/MainDelegate.java Mon Dec 20 16:15:25 2010
@@ -27,8 +27,8 @@ import java.util.Map;
 import java.util.Map.Entry;
 
 import org.apache.felix.framework.Logger;
+import org.apache.sling.launchpad.api.LaunchpadContentProvider;
 import org.apache.sling.launchpad.base.impl.ClassLoaderResourceProvider;
-import org.apache.sling.launchpad.base.impl.ResourceProvider;
 import org.apache.sling.launchpad.base.impl.Sling;
 import org.apache.sling.launchpad.base.shared.Launcher;
 import org.apache.sling.launchpad.base.shared.Notifiable;
@@ -151,7 +151,7 @@ public class MainDelegate implements Lau
         logger.setLogLevel(Logger.LOG_ERROR);
 
         try {
-            ResourceProvider resProvider = new ClassLoaderResourceProvider(
+            LaunchpadContentProvider resProvider = new ClassLoaderResourceProvider(
                 getClass().getClassLoader());
 
             // creating the instance launches the framework and we are done here

Modified: sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/BootstrapInstaller.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/BootstrapInstaller.java?rev=1051167&r1=1051166&r2=1051167&view=diff
==============================================================================
--- sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/BootstrapInstaller.java (original)
+++ sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/BootstrapInstaller.java Mon Dec 20 16:15:25 2010
@@ -38,6 +38,7 @@ import java.util.jar.JarInputStream;
 import java.util.jar.Manifest;
 
 import org.apache.felix.framework.Logger;
+import org.apache.sling.launchpad.api.LaunchpadContentProvider;
 import org.apache.sling.launchpad.base.impl.bootstrapcommands.BootstrapCommandFile;
 import org.apache.sling.launchpad.base.shared.SharedConstants;
 import org.osgi.framework.Bundle;
@@ -140,10 +141,10 @@ class BootstrapInstaller implements Bund
     private final Logger logger;
 
     /**
-     * The {@link ResourceProvider} used to access the Bundle files to
+     * The {@link LaunchpadContentProvider} used to access the Bundle files to
      * install.
      */
-    private final ResourceProvider resourceProvider;
+    private final LaunchpadContentProvider resourceProvider;
 
     private BundleContext bundleContext;
 
@@ -157,13 +158,13 @@ class BootstrapInstaller implements Bund
      * the update of an installed framework extension bundle.
      * <p>
      * This value is preset by the
-     * {@link #BootstrapInstaller(Logger, ResourceProvider, Map)} constructor to
+     * {@link #BootstrapInstaller(Logger, LaunchpadContentProvider, Map)} constructor to
      * the value set in the <code>org.osgi.framework.startlevel.beginning</code>
      * property of the supplied map.
      */
     private int targetStartLevel;
 
-    BootstrapInstaller(Logger logger, ResourceProvider resourceProvider,
+    BootstrapInstaller(Logger logger, LaunchpadContentProvider resourceProvider,
             Map<String, String> props) {
         this.logger = logger;
         this.resourceProvider = resourceProvider;

Modified: sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/ClassLoaderResourceProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/ClassLoaderResourceProvider.java?rev=1051167&r1=1051166&r2=1051167&view=diff
==============================================================================
--- sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/ClassLoaderResourceProvider.java (original)
+++ sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/ClassLoaderResourceProvider.java Mon Dec 20 16:15:25 2010
@@ -17,6 +17,7 @@
 package org.apache.sling.launchpad.base.impl;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.net.JarURLConnection;
 import java.net.URL;
 import java.net.URLConnection;
@@ -29,11 +30,12 @@ import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
 import java.util.regex.Pattern;
 
+import org.apache.sling.launchpad.api.LaunchpadContentProvider;
 
 /**
  * The <code>ClassLoaderResourceProvider</code> TODO
  */
-public class ClassLoaderResourceProvider extends ResourceProvider {
+public class ClassLoaderResourceProvider implements LaunchpadContentProvider {
 
     private final ClassLoader classLoader;
 
@@ -43,7 +45,6 @@ public class ClassLoaderResourceProvider
                 : this.getClass().getClassLoader();
     }
 
-    @Override
     public Iterator<String> getChildren(String path) {
         List<String> children;
 
@@ -74,9 +75,6 @@ public class ClassLoaderResourceProvider
         return children.iterator();
     }
 
-    /**
-     * @see org.apache.sling.launchpad.base.impl.ResourceProvider#getResource(java.lang.String)
-     */
     public URL getResource(String path) {
         // ensure path
         if (path == null || path.length() == 0) {
@@ -91,4 +89,19 @@ public class ClassLoaderResourceProvider
         return (this.classLoader != null) ? this.classLoader.getResource(path) : 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;
+
+    }
+
 }

Modified: sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/ContextConnection.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/ContextConnection.java?rev=1051167&r1=1051166&r2=1051167&view=diff
==============================================================================
--- sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/ContextConnection.java (original)
+++ sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/ContextConnection.java Mon Dec 20 16:15:25 2010
@@ -21,10 +21,12 @@ import java.io.InputStream;
 import java.net.URL;
 import java.net.URLConnection;
 
+import org.apache.sling.launchpad.api.LaunchpadContentProvider;
+
 /**
  * The <code>ContextConnection</code> extends the
  * <code>java.net.URLConnection</code> to provide access to a resource which
- * is available from {@link ResourceProvider} provided to {@link Sling}.
+ * is available from {@link LaunchpadContentProvider} provided to {@link Sling}.
  * <p>
  * This class is implemented by actually connecting to a resource URL which is
  * provided by the resource provider and delegating the relevant method calls.
@@ -34,10 +36,10 @@ import java.net.URLConnection;
 public class ContextConnection extends URLConnection {
 
     /**
-     * The {@link ResourceProvider} to which requests for content access are
+     * The {@link LaunchpadContentProvider} to which requests for content access are
      * delegated.
      */
-    private final ResourceProvider resourceProvider;
+    private final LaunchpadContentProvider resourceProvider;
 
     /**
      * The delegatee <code>URLConnection</code> to which some of the method
@@ -50,10 +52,10 @@ public class ContextConnection extends U
      *
      * @param url The original URL whose path part is used to address the
      *            resource from the resource provider.
-     * @param resourceProvider The {@link ResourceProvider} to which requests
+     * @param resourceProvider The {@link LaunchpadContentProvider} to which requests
      *            for content access are delegated.
      */
-    ContextConnection(URL url, ResourceProvider resourceProvider) {
+    ContextConnection(URL url, LaunchpadContentProvider resourceProvider) {
         super(url);
         this.resourceProvider = resourceProvider;
     }

Modified: sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/ContextProtocolHandler.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/ContextProtocolHandler.java?rev=1051167&r1=1051166&r2=1051167&view=diff
==============================================================================
--- sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/ContextProtocolHandler.java (original)
+++ sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/ContextProtocolHandler.java Mon Dec 20 16:15:25 2010
@@ -19,6 +19,7 @@ package org.apache.sling.launchpad.base.
 import java.net.URL;
 import java.net.URLConnection;
 
+import org.apache.sling.launchpad.api.LaunchpadContentProvider;
 import org.osgi.service.url.AbstractURLStreamHandlerService;
 
 /**
@@ -30,19 +31,19 @@ import org.osgi.service.url.AbstractURLS
 public class ContextProtocolHandler extends AbstractURLStreamHandlerService {
 
     /**
-     * The {@link ResourceProvider} to which requests for content access are
+     * The {@link LaunchpadContentProvider} to which requests for content access are
      * delegated.
      */
-    private final ResourceProvider resourceProvider;
+    private final LaunchpadContentProvider resourceProvider;
 
     /**
      * Creates an instance of this protocol handler setting the servlet context
      * which is queried to access content.
      *
-     * @param resourceProvider The {@link ResourceProvider} to which requests
+     * @param resourceProvider The {@link LaunchpadContentProvider} to which requests
      *            for content access are delegated.
      */
-    public ContextProtocolHandler(ResourceProvider resourceProvider) {
+    public ContextProtocolHandler(LaunchpadContentProvider resourceProvider) {
         this.resourceProvider = resourceProvider;
     }
 

Modified: sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/DeploymentPackageInstaller.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/DeploymentPackageInstaller.java?rev=1051167&r1=1051166&r2=1051167&view=diff
==============================================================================
--- sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/DeploymentPackageInstaller.java (original)
+++ sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/DeploymentPackageInstaller.java Mon Dec 20 16:15:25 2010
@@ -27,6 +27,7 @@ import java.util.ArrayList;
 import java.util.Iterator;
 
 import org.apache.felix.framework.Logger;
+import org.apache.sling.launchpad.api.LaunchpadContentProvider;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.FrameworkEvent;
 import org.osgi.framework.FrameworkListener;
@@ -58,13 +59,13 @@ public class DeploymentPackageInstaller 
 
     private final BundleContext bundleContext;
     private final Logger logger;
-    private final ResourceProvider resourceProvider;
+    private final LaunchpadContentProvider resourceProvider;
 
     private DeploymentAdmin deploymentAdmin;
     private ServiceReference deploymentAdminReference;
 
     public DeploymentPackageInstaller(final BundleContext bundleContext,
-            Logger logger, ResourceProvider resourceProvider) {
+            Logger logger, LaunchpadContentProvider resourceProvider) {
         this.logger = logger;
         this.resourceProvider = resourceProvider;
         this.bundleContext = bundleContext;

Modified: sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/Sling.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/Sling.java?rev=1051167&r1=1051166&r2=1051167&view=diff
==============================================================================
--- sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/Sling.java (original)
+++ sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/impl/Sling.java Mon Dec 20 16:15:25 2010
@@ -46,6 +46,7 @@ import javax.management.ObjectName;
 import org.apache.felix.framework.Felix;
 import org.apache.felix.framework.Logger;
 import org.apache.felix.framework.util.FelixConstants;
+import org.apache.sling.launchpad.api.LaunchpadContentProvider;
 import org.apache.sling.launchpad.base.shared.Notifiable;
 import org.apache.sling.launchpad.base.shared.SharedConstants;
 import org.osgi.framework.BundleActivator;
@@ -59,7 +60,7 @@ import org.osgi.service.url.URLStreamHan
 /**
  * The <code>Sling</code> serves as the starting point for Sling.
  * <ul>
- * <li>The {@link #Sling(Notifiable, Logger, ResourceProvider, Map)} method launches Apache
+ * <li>The {@link #Sling(Notifiable, Logger, LaunchpadContentProvider, Map)} method launches Apache
  * <code>Felix</code> as the OSGi framework implementation we use.
  * </ul>
  * <p>
@@ -174,7 +175,7 @@ public class Sling implements BundleActi
      */
     protected final Logger logger;
 
-    private ResourceProvider resourceProvider;
+    private LaunchpadContentProvider resourceProvider;
 
     /**
      * The <code>Felix</code> instance loaded on {@link #init()} and stopped
@@ -198,7 +199,7 @@ public class Sling implements BundleActi
      * @throws BundleException if the framework cannot be initialized.
      */
     public Sling(Notifiable notifiable, Logger logger,
-            ResourceProvider resourceProvider, Map<String, String> propOverwrite)
+            LaunchpadContentProvider resourceProvider, Map<String, String> propOverwrite)
             throws BundleException {
 
         this.logger = logger;
@@ -339,6 +340,7 @@ public class Sling implements BundleActi
         }
         bundleContext.registerService(MBeanServer.class.getName(),
             platformMBeanServer, mbeanProps);
+        bundleContext.registerService(LaunchpadContentProvider.class.getName(), resourceProvider, null);
 
         // execute optional bundle startup tasks of an extension
         this.doStartBundle();

Modified: sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/webapp/SlingBridge.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/webapp/SlingBridge.java?rev=1051167&r1=1051166&r2=1051167&view=diff
==============================================================================
--- sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/webapp/SlingBridge.java (original)
+++ sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/webapp/SlingBridge.java Mon Dec 20 16:15:25 2010
@@ -21,7 +21,7 @@ import java.util.Map;
 import javax.servlet.ServletContext;
 
 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.apache.sling.launchpad.base.shared.Notifiable;
 import org.osgi.framework.BundleContext;
@@ -35,7 +35,7 @@ import org.osgi.framework.BundleExceptio
 public class SlingBridge extends Sling {
 
     public SlingBridge(Notifiable notifiable, Logger logger,
-            ResourceProvider resourceProvider, Map<String, String> propOverwrite,
+            LaunchpadContentProvider resourceProvider, Map<String, String> propOverwrite,
             ServletContext servletContext)
             throws BundleException {
         super(notifiable, logger, resourceProvider, propOverwrite);

Modified: sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/webapp/SlingServletDelegate.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/webapp/SlingServletDelegate.java?rev=1051167&r1=1051166&r2=1051167&view=diff
==============================================================================
--- sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/webapp/SlingServletDelegate.java (original)
+++ sling/trunk/launchpad/base/src/main/java/org/apache/sling/launchpad/base/webapp/SlingServletDelegate.java Mon Dec 20 16:15:25 2010
@@ -16,7 +16,7 @@
  */
 package org.apache.sling.launchpad.base.webapp;
 
-import static org.apache.felix.framework.util.FelixConstants.LOG_LEVEL_PROP;
+import static org.apache.felix.framework.util.FelixConstants.*;
 
 import java.io.IOException;
 import java.net.MalformedURLException;
@@ -38,8 +38,8 @@ import javax.servlet.http.HttpServletRes
 
 import org.apache.felix.framework.Logger;
 import org.apache.felix.http.proxy.ProxyServlet;
+import org.apache.sling.launchpad.api.LaunchpadContentProvider;
 import org.apache.sling.launchpad.base.impl.ClassLoaderResourceProvider;
-import org.apache.sling.launchpad.base.impl.ResourceProvider;
 import org.apache.sling.launchpad.base.impl.Sling;
 import org.apache.sling.launchpad.base.shared.Launcher;
 import org.apache.sling.launchpad.base.shared.Notifiable;
@@ -198,7 +198,7 @@ public class SlingServletDelegate extend
             Map<String, String> props = loadConfigProperties(slingHome);
 
             Logger logger = new ServletContextLogger(getServletContext());
-            ResourceProvider rp = new ServletContextResourceProvider(
+            LaunchpadContentProvider rp = new ServletContextResourceProvider(
                 getServletContext());
             tmpSling = new SlingBridge(notifiable, logger, rp, props, getServletContext());
 

Modified: sling/trunk/launchpad/base/src/main/resources/sling.properties
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/base/src/main/resources/sling.properties?rev=1051167&r1=1051166&r2=1051167&view=diff
==============================================================================
--- sling/trunk/launchpad/base/src/main/resources/sling.properties (original)
+++ sling/trunk/launchpad/base/src/main/resources/sling.properties Mon Dec 20 16:15:25 2010
@@ -134,6 +134,7 @@ sling.include.jre = jre-${java.specifica
 org.osgi.framework.system.packages= \
  ${osgi-core-packages}, \
  ${osgi-compendium-services}, \
+ org.apache.sling.launchpad.api;version=1.0.0, \
  ${jre-${java.specification.version}} \
  ${org.apache.sling.launcher.system.packages}
 

Modified: sling/trunk/launchpad/builder/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/builder/pom.xml?rev=1051167&r1=1051166&r2=1051167&view=diff
==============================================================================
--- sling/trunk/launchpad/builder/pom.xml (original)
+++ sling/trunk/launchpad/builder/pom.xml Mon Dec 20 16:15:25 2010
@@ -119,6 +119,10 @@
                                     <groupId>org.apache.felix</groupId>
                                     <artifactId>org.apache.felix.webconsole</artifactId>
                                 </bundle>
+                                <bundle>
+                                    <groupId>org.apache.sling</groupId>
+                                    <artifactId>org.apache.sling.launchpad.installer</artifactId>
+                                </bundle>
                             </bundleExclusions>
                         </configuration>
                     </execution>

Modified: sling/trunk/launchpad/builder/src/main/bundles/list.xml
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/builder/src/main/bundles/list.xml?rev=1051167&r1=1051166&r2=1051167&view=diff
==============================================================================
--- sling/trunk/launchpad/builder/src/main/bundles/list.xml (original)
+++ sling/trunk/launchpad/builder/src/main/bundles/list.xml Mon Dec 20 16:15:25 2010
@@ -190,6 +190,18 @@
             <artifactId>org.apache.aries.jmx.core</artifactId>
             <version>0.2-incubating</version>
         </bundle>
+        
+        <bundle>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.launchpad.installer</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </bundle>
+        
+        <bundle>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.osgi.installer</artifactId>
+	        <version>3.0.0-SNAPSHOT</version>
+        </bundle>
     </startLevel>
     <startLevel level="1">
         <bundle>

Added: sling/trunk/launchpad/installer/README.txt
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/installer/README.txt?rev=1051167&view=auto
==============================================================================
--- sling/trunk/launchpad/installer/README.txt (added)
+++ sling/trunk/launchpad/installer/README.txt Mon Dec 20 16:15:25 2010
@@ -0,0 +1,24 @@
+    Apache Sling Launchpad Installer
+
+The Launchpad Installer project installs resources from the launchpad archive 
+
+Getting Started
+===============
+
+This component uses a Maven 2 (http://maven.apache.org/) build
+environment. It requires a Java 5 JDK (or higher) and Maven (http://maven.apache.org/)
+2.0.7 or later. We recommend to use the latest Maven version.
+
+If you have Maven 2 installed, you can compile and
+package the jar using the following command:
+
+    mvn package
+
+See the Maven 2 documentation for other build features.
+
+The latest source code for this component is available in the
+Subversion (http://subversion.tigris.org/) source repository of
+the Apache Software Foundation. If you have Subversion installed,
+you can checkout the latest source using the following command:
+
+    svn checkout http://svn.apache.org/repos/asf/sling/trunk/launchpad/installer

Added: sling/trunk/launchpad/installer/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/installer/pom.xml?rev=1051167&view=auto
==============================================================================
--- sling/trunk/launchpad/installer/pom.xml (added)
+++ sling/trunk/launchpad/installer/pom.xml Mon Dec 20 16:15:25 2010
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+    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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.sling</groupId>
+        <artifactId>sling</artifactId>
+        <version>9</version>
+        <relativePath>../../parent/pom.xml</relativePath>
+    </parent>
+    <groupId>org.apache.sling</groupId>
+    <artifactId>org.apache.sling.launchpad.installer</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <packaging>bundle</packaging>
+    <name>Apache Sling Launchpad Installer</name>
+
+    <description>
+        This module installs the contents of the launchpad archive into the framework.
+    </description>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                    </instructions>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-scr-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>generate-scr-scrdescriptor</id>
+                        <goals>
+                            <goal>scr</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.scr.annotations</artifactId>
+            <version>1.0.0</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.launchpad.api</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.osgi.installer</artifactId>
+            <version>3.0.0-SNAPSHOT</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.core</artifactId>
+            <version>4.2.0</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.compendium</artifactId>
+            <version>4.2.0</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>1.5.2</version>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file

Added: sling/trunk/launchpad/installer/src/main/java/org/apache/sling/launchpad/installer/impl/LaunchpadConfigInstaller.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/installer/src/main/java/org/apache/sling/launchpad/installer/impl/LaunchpadConfigInstaller.java?rev=1051167&view=auto
==============================================================================
--- sling/trunk/launchpad/installer/src/main/java/org/apache/sling/launchpad/installer/impl/LaunchpadConfigInstaller.java (added)
+++ sling/trunk/launchpad/installer/src/main/java/org/apache/sling/launchpad/installer/impl/LaunchpadConfigInstaller.java Mon Dec 20 16:15:25 2010
@@ -0,0 +1,68 @@
+/*
+ * 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.launchpad.installer.impl;
+
+import java.io.InputStream;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.sling.launchpad.api.LaunchpadContentProvider;
+import org.apache.sling.osgi.installer.InstallableResource;
+import org.apache.sling.osgi.installer.OsgiInstaller;
+import org.osgi.service.component.ComponentContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Component
+public class LaunchpadConfigInstaller {
+
+    /**
+     * 
+     */
+    private static final String ROOT_CONFIG_PATH = "resources/config";
+
+    @Reference
+    private OsgiInstaller installer;
+
+    @Reference
+    private LaunchpadContentProvider resourceProvider;
+
+    private Logger logger = LoggerFactory.getLogger(this.getClass());
+
+    protected void activate(ComponentContext componentContext) {
+        logger.info("Activating launchpad config installer.");
+
+        Collection<InstallableResource> installables = new HashSet<InstallableResource>();
+
+        Iterator<String> configPaths = resourceProvider.getChildren(ROOT_CONFIG_PATH);
+        while (configPaths.hasNext()) {
+            String path = configPaths.next();
+
+            logger.info("Installing config launchpad file: {}", path);
+
+            InputStream stream = resourceProvider.getResourceAsStream(path);
+
+            installables.add(new InstallableResource(path, stream, null, null, InstallableResource.TYPE_CONFIG, 0));
+
+        }
+
+        installer.registerResources("launchpad", installables);
+    }
+}

Modified: sling/trunk/launchpad/testing/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/testing/pom.xml?rev=1051167&r1=1051166&r2=1051167&view=diff
==============================================================================
--- sling/trunk/launchpad/testing/pom.xml (original)
+++ sling/trunk/launchpad/testing/pom.xml Mon Dec 20 16:15:25 2010
@@ -133,7 +133,7 @@
             <plugin>
                 <groupId>org.apache.sling</groupId>
                 <artifactId>maven-launchpad-plugin</artifactId>
-                <version>2.0.7-SNAPSHOT</version>
+                <version>2.0.9-SNAPSHOT</version>
                 <executions>
                     <execution>
                         <id>prepare-package</id>
@@ -453,7 +453,7 @@
         <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>
 

Modified: sling/trunk/maven/maven-launchpad-plugin/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/maven/maven-launchpad-plugin/pom.xml?rev=1051167&r1=1051166&r2=1051167&view=diff
==============================================================================
--- sling/trunk/maven/maven-launchpad-plugin/pom.xml (original)
+++ sling/trunk/maven/maven-launchpad-plugin/pom.xml Mon Dec 20 16:15:25 2010
@@ -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>

Modified: sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/AbstractBundleListMojo.java
URL: http://svn.apache.org/viewvc/sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/AbstractBundleListMojo.java?rev=1051167&r1=1051166&r2=1051167&view=diff
==============================================================================
--- sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/AbstractBundleListMojo.java (original)
+++ sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/AbstractBundleListMojo.java Mon Dec 20 16:15:25 2010
@@ -52,6 +52,12 @@ import org.drools.runtime.StatefulKnowle
 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 AbstractBundleList
      */
     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;

Modified: sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/AbstractLaunchpadStartingMojo.java
URL: http://svn.apache.org/viewvc/sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/AbstractLaunchpadStartingMojo.java?rev=1051167&r1=1051166&r2=1051167&view=diff
==============================================================================
--- sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/AbstractLaunchpadStartingMojo.java (original)
+++ sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/AbstractLaunchpadStartingMojo.java Mon Dec 20 16:15:25 2010
@@ -19,7 +19,11 @@ package org.apache.sling.maven.projectsu
 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.MojoExecu
 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.projectsup
 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 AbstractLaunchpadS
 
     /**
      * @parameter expression="${resourceProviderRoot}"
-     *           default-value="src/test/resources"
+     *            default-value="src/test/resources"
      */
     private File resourceProviderRoot;
 
@@ -110,22 +110,51 @@ public abstract class AbstractLaunchpadS
      */
     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 AbstractLaunchpadS
                     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 AbstractLaunchpadS
                 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 AbstractLaunchpadS
         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 AbstractLaunchpadS
 
     }
 
-    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) {

Modified: sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/PreparePackageMojo.java
URL: http://svn.apache.org/viewvc/sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/PreparePackageMojo.java?rev=1051167&r1=1051166&r2=1051167&view=diff
==============================================================================
--- sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/PreparePackageMojo.java (original)
+++ sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/PreparePackageMojo.java Mon Dec 20 16:15:25 2010
@@ -92,12 +92,13 @@ public class PreparePackageMojo extends 
 	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 
 		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());

Modified: sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/RunMojo.java
URL: http://svn.apache.org/viewvc/sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/RunMojo.java?rev=1051167&r1=1051166&r2=1051167&view=diff
==============================================================================
--- sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/RunMojo.java (original)
+++ sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/RunMojo.java Mon Dec 20 16:15:25 2010
@@ -19,7 +19,7 @@ package org.apache.sling.maven.projectsu
 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 AbstractLau
     
     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);

Modified: sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/StartMojo.java
URL: http://svn.apache.org/viewvc/sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/StartMojo.java?rev=1051167&r1=1051166&r2=1051167&view=diff
==============================================================================
--- sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/StartMojo.java (original)
+++ sling/trunk/maven/maven-launchpad-plugin/src/main/java/org/apache/sling/maven/projectsupport/StartMojo.java Mon Dec 20 16:15:25 2010
@@ -19,7 +19,7 @@ package org.apache.sling.maven.projectsu
 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 AbstractL
      * {@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();
 

Modified: sling/trunk/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/pom.xml?rev=1051167&r1=1051166&r2=1051167&view=diff
==============================================================================
--- sling/trunk/pom.xml (original)
+++ sling/trunk/pom.xml Mon Dec 20 16:15:25 2010
@@ -142,7 +142,9 @@
         <module>installer/it</module>
         
         <!-- Launchpad -->
+        <module>launchpad/api</module>
         <module>launchpad/base</module>
+        <module>launchpad/installer</module>
         <module>launchpad/content</module>
         <module>launchpad/builder</module>