You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by re...@apache.org on 2014/08/01 19:17:04 UTC

[07/11] Revert "CLEREZZA-926: removed modules not in release"

http://git-wip-us.apache.org/repos/asf/clerezza/blob/74fe1745/platform.launcher.storageless.parent/platform.launcher.storageless/pom.xml
----------------------------------------------------------------------
diff --git a/platform.launcher.storageless.parent/platform.launcher.storageless/pom.xml b/platform.launcher.storageless.parent/platform.launcher.storageless/pom.xml
new file mode 100644
index 0000000..c54b52e
--- /dev/null
+++ b/platform.launcher.storageless.parent/platform.launcher.storageless/pom.xml
@@ -0,0 +1,417 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><!--
+
+ 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.clerezza</groupId>
+        <artifactId>platform.launcher.storageless.parent</artifactId>
+        <version>0.9-SNAPSHOT</version>
+    </parent>
+    <groupId>org.apache.clerezza</groupId>
+    <artifactId>platform.launcher.storageless</artifactId>
+    <version>0.9-SNAPSHOT</version>
+    <packaging>jar</packaging>
+    <name>Clerezza - Platform Launcher Storageless</name>
+    <description>A standalone java application for launching the clerezza.org platform. It is also a bundle, but there is no OSGi container known to support this (we are working on it :-) ).
+    </description>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.codehaus.xsite</groupId>
+                <artifactId>xsite-maven-plugin</artifactId>
+                <configuration>
+                    <sourceDirectoryPath>${basedir}/src/site/xsite</sourceDirectoryPath>
+                    <sitemapPath>content/sitemap.xml</sitemapPath>
+                    <skinPath>templates/skin.html</skinPath>
+                    <outputDirectoryPath>${basedir}/target/site/documentation</outputDirectoryPath>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>pre-site</phase>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-scr-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>generate-scr-scrdescriptor</id>
+                        <phase>none</phase>
+                    </execution>
+                </executions>
+            </plugin>
+            <!-- Bundles to list in the installer properties file -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <id>copy-shell</id>
+                        <configuration>
+                            <outputDirectory>${basedir}/target/bundles/startlevel-4</outputDirectory>
+                            <useRepositoryLayout>true</useRepositoryLayout>
+                            <excludeTransitive>true</excludeTransitive>
+                            <includeScope>runtime</includeScope>
+                            <includeArtifactIds>shell</includeArtifactIds>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <id>copy-rdf-core</id>
+                        <!-- the tc-manager should be activated after the provider -->
+                        <configuration>
+                            <outputDirectory>${basedir}/target/bundles/startlevel-4</outputDirectory>
+                            <useRepositoryLayout>true</useRepositoryLayout>
+                            <excludeTransitive>true</excludeTransitive>
+                            <includeArtifactIds>rdf.core</includeArtifactIds>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <id>copy-platform-bundles</id>
+                        <configuration>
+                            <outputDirectory>${basedir}/target/bundles/startlevel-3</outputDirectory>
+                            <useRepositoryLayout>true</useRepositoryLayout>
+                            <excludeTransitive>true</excludeTransitive>
+                            <includeScope>runtime</includeScope>
+                            <excludeArtifactIds>rdf.core,slf4j-api,platform.security,platform.security.conditions,shell,org.apache.stanbol.commons.frameworkfragment</excludeArtifactIds>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <id>copy-framework-bundles</id>
+                        <configuration>
+                            <outputDirectory>${basedir}/target/bundles/startlevel-2</outputDirectory>
+                            <useRepositoryLayout>true</useRepositoryLayout>
+                            <excludeTransitive>true</excludeTransitive>
+                            <!-- <excludeScope>compile</excludeScope> -->
+                            <includeScope>provided</includeScope>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <!-- this is a temporary hack to make sure the system-graph gets created -->
+                        <id>copy-security-as-framework-bundles</id>
+                        <configuration>
+                            <useRepositoryLayout>true</useRepositoryLayout>
+                            <outputDirectory>${basedir}/target/bundles/startlevel-2</outputDirectory>
+                            <includeArtifactIds>platform.security</includeArtifactIds>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <!-- After the security fragment is loaded other fragments 
+                        are no longer accepted, so having them here  -->
+                        <id>copy-extension-bundles</id>
+                        <configuration>
+                            <useRepositoryLayout>true</useRepositoryLayout>
+                            <outputDirectory>${basedir}/target/bundles/startlevel-1</outputDirectory>
+                            <includeArtifactIds>platform.security.conditions,org.apache.stanbol.commons.frameworkfragment</includeArtifactIds>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>inline-jars</id>
+                        <goals>
+                            <goal>unpack-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <includeArtifactIds>
+                                commons-logging-api,wymiwyg-commons-core,org.apache.felix.main,org.apache.felix.framework.security
+                            </includeArtifactIds>
+                            <outputDirectory>target/extracted</outputDirectory>
+                            <includes>**</includes>
+                            <excludes>
+                                META-INF/**
+                            </excludes>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <mainClass>org.apache.clerezza.platform.launcher.Main</mainClass>
+                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+                        </manifest>
+                        <manifestEntries>
+                            <Bundle-Name>Clerezza - Platform Launcher</Bundle-Name>
+                            <Bundle-SymbolicName>org.apache.clerezza.platform.launcher.storageless</Bundle-SymbolicName>
+                            <Bundle-Activator>org.apache.clerezza.platform.launcher.ClerezzaActivator</Bundle-Activator>
+                            <Import-Package>org.osgi.framework,org.osgi.service.startlevel</Import-Package>
+                            <Private-Package>*</Private-Package>
+                        </manifestEntries>
+                    </archive>
+                </configuration>
+            </plugin>
+        </plugins>
+        <resources>
+            <resource>
+                <targetPath>META-INF</targetPath>
+                <filtering>false</filtering>
+                <directory>${basedir}</directory>
+                <includes>
+                    <include>NOTICE.txt</include>
+                    <include>LICENSE.*</include>
+                </includes>
+            </resource>
+            <resource>
+                <directory>src/main/resources</directory>
+            </resource>
+            <!-- the exclude rules are here because the maven-dependency-plugin
+            copies both -SNAPSHOT version as well as the one with the timestamp,
+            see http://jira.codehaus.org/browse/MDEP-209 -->
+            <resource>
+                <targetPath>bundles</targetPath>
+                <directory>target/bundles</directory>
+                <excludes>
+                    <exclude>**/*20*.*-*.jar</exclude>
+                </excludes>
+            </resource>
+            <resource>
+                <targetPath>org</targetPath>
+                <directory>target/extracted/org</directory>
+            </resource>
+            <resource>
+                <directory>target/extracted/</directory>
+                <includes>
+                    <include>default.properties</include>
+                </includes>
+            </resource>
+        </resources>
+    </build>
+    <dependencies>
+        <!-- the most important bundle after the framework: logging -->
+        <dependency>
+            <groupId>org.ops4j.pax.logging</groupId>
+            <artifactId>pax-logging-api</artifactId>
+            <scope>provided</scope>
+            <version>1.6.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.ops4j.pax.logging</groupId>
+            <artifactId>pax-logging-service</artifactId>
+            <scope>provided</scope>
+            <version>1.6.2</version>
+            <!-- <exclusions>
+                <exclusion>
+                    <artifactId>jmxri</artifactId>
+                    <groupId>com.sun.jmx</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>jmxtools</artifactId>
+                    <groupId>com.sun.jdmk</groupId>
+                </exclusion>
+            </exclusions> -->
+        </dependency>
+        <dependency>
+            <groupId>org.apache.clerezza.ext</groupId>
+            <artifactId>slf4j-scala-api</artifactId>
+            <scope>provided</scope>
+            <version>1.6.3-SNAPSHOT</version>
+        </dependency>
+          <!-- Core Felix. -->
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.main</artifactId>
+            <scope>provided</scope>
+            <version>4.3.0-SNAPSHOT</version>
+        </dependency>
+        <!-- framework bundles -->
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.compendium</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.webconsole</artifactId>
+            <scope>provided</scope>
+            <version>4.0.0</version>
+        </dependency>
+        <!-- needed by webconsole -->
+        <dependency>
+            <groupId>commons-fileupload</groupId>
+            <artifactId>commons-fileupload</artifactId>
+            <version>1.2.2</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>2.4</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.geronimo.bundles</groupId>
+            <artifactId>json</artifactId>
+            <version>20090211_1</version>
+        </dependency>
+        <!-- <dependency>
+            <groupId>org.ops4j.pax.web</groupId>
+            <artifactId>pax-web-jetty-bundle</artifactId>
+            <scope>provided</scope>
+            <version>0.7.2</version>
+        </dependency> -->
+        <!-- <dependency>
+            <groupId>org.wymiwyg</groupId>
+            <artifactId>jetty-osgi-httpservice</artifactId>
+            <scope>provided</scope>
+            <version>0.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.equinox.http</groupId>
+            <artifactId>servlet</artifactId>
+            <scope>provided</scope>
+            <version>1.0.0-v20070606</version>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-server</artifactId>
+            <scope>provided</scope>
+            <version>8.0.0.M2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-servlet</artifactId>
+            <scope>provided</scope>
+            <version>8.0.0.M2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-util</artifactId>
+            <scope>provided</scope>
+            <version>8.0.0.M2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-io</artifactId>
+            <scope>provided</scope>
+            <version>8.0.0.M2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-continuation</artifactId>
+            <scope>provided</scope>
+            <version>8.0.0.M2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-http</artifactId>
+            <scope>provided</scope>
+            <version>8.0.0.M2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-security</artifactId>
+            <scope>provided</scope>
+            <version>8.0.0.M2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.mortbay.jetty</groupId>
+            <artifactId>servlet-api</artifactId>
+            <scope>provided</scope>
+            <version>3.0.20100224</version>
+        </dependency> -->
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.http.jetty</artifactId>
+            <version>2.2.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.http.whiteboard</artifactId>
+            <version>2.2.0</version>
+        </dependency>
+        <!-- Apache Felix framework bundles -->
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.bundlerepository</artifactId>
+            <scope>provided</scope>
+            <version>1.6.6</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.eventadmin</artifactId>
+            <scope>provided</scope>
+            <version>1.3.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.scr</artifactId>
+            <scope>provided</scope>
+            <version>1.6.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.configadmin</artifactId>
+            <scope>provided</scope>
+            <version>1.6.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.metatype</artifactId>
+            <scope>provided</scope>
+            <version>1.0.6</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.shell</artifactId>
+            <scope>provided</scope>
+            <version>1.4.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.framework.security</artifactId>
+            <scope>provided</scope>
+            <version>2.1.0-SNAPSHOT</version>
+        </dependency>
+        <!-- support for parameterhandling, etc -->
+        <dependency>
+            <groupId>org.wymiwyg</groupId>
+            <artifactId>wymiwyg-commons-core</artifactId>
+            <!-- runtime only in parent -->
+        </dependency>
+
+        <!-- support for mvn URIs (to make updating easier -->
+        <dependency>
+            <groupId>org.ops4j.pax.url</groupId>
+            <artifactId>pax-url-mvn</artifactId>
+            <version>1.3.2</version>
+        </dependency>
+    </dependencies>
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/clerezza/blob/74fe1745/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/appended-resources/META-INF/NOTICE
----------------------------------------------------------------------
diff --git a/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/appended-resources/META-INF/NOTICE b/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/appended-resources/META-INF/NOTICE
new file mode 100644
index 0000000..7d1928c
--- /dev/null
+++ b/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/appended-resources/META-INF/NOTICE
@@ -0,0 +1,18 @@
+
+- Mort Bay Jetty Project (http://www.mortbay.org/jetty/)
+- Open Participation Software for Java (http://www.ops4j.org/)
+- WYMIWYG (http://wymiwyg.org/)
+- HP Labs Semantic Web Research (http://www.hpl.hp.com/semweb/)
+- The OSGi Alliance (http://www.osgi.org/)
+- Yahoo! Inc. (http://yahoo.com/)
+- Eclipse Foundation (http://eclipse.org/)
+- INRIA, France Telecom (http://asm.ow2.org/)
+- The Legion Of The Bouncy Castle (http://www.bouncycastle.org)
+- University of Bristol (http://stars.ilrt.bris.ac.uk/)
+- The University of Manchester (http://www.manchester.ac.uk/)
+- Open Participation Software for Java (http://www.ops4j.org/)
+- EPFL, Lausanne (http://www.epfl.ch/)
+
+This product includes JQuery and other javascript 
+files Licensed under the MIT License, see the individual
+files for their copyright notice.

http://git-wip-us.apache.org/repos/asf/clerezza/blob/74fe1745/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/ClerezzaActivator.java
----------------------------------------------------------------------
diff --git a/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/ClerezzaActivator.java b/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/ClerezzaActivator.java
new file mode 100644
index 0000000..c6b529c
--- /dev/null
+++ b/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/ClerezzaActivator.java
@@ -0,0 +1,73 @@
+/*
+ * 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.clerezza.platform.launcher;
+
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Set;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.startlevel.StartLevel;
+
+/**
+ * OSGi Clerezza Launcher Bundle Activator.
+ *
+ * @author daniel
+ */
+public class ClerezzaActivator implements BundleActivator {
+
+    @Override
+    public void start(BundleContext context) throws Exception {
+        System.out.println("starting platform launcher");
+        ServiceReference startLevelRef =
+                context.getServiceReference(StartLevel.class.getName());
+        StartLevel startLevel = (StartLevel) context.getService(startLevelRef);
+        final int currentBundleStartLevel =
+                startLevel.getBundleStartLevel(context.getBundle());
+        startLevel.setStartLevel(currentBundleStartLevel);
+        final int originalStartLevel = startLevel.getStartLevel();
+        int nextLevel = currentBundleStartLevel + 1;
+        Enumeration<URL> bundleJars =
+                context.getBundle().findEntries("platform-bundles", "*.jar", true);
+        Set<MavenArtifactDesc> artDescs = new HashSet<MavenArtifactDesc>();
+
+        while (bundleJars.hasMoreElements()) {
+            MavenArtifactDesc artDesc =
+                    MavenArtifactDesc.parseFromURL(bundleJars.nextElement());
+            artDescs.add(artDesc);
+        }
+        ClerezzaApp.installBundles(context, artDescs, nextLevel);
+
+        final int newStartLevel =
+                originalStartLevel > nextLevel + 1 ? originalStartLevel : nextLevel + 1;
+        startLevel.setStartLevel(newStartLevel);
+        if (startLevel.getInitialBundleStartLevel() < nextLevel + 1) {
+            startLevel.setInitialBundleStartLevel(nextLevel + 1);
+        }
+        System.out.println("uninstalling platform launcher");
+        context.getBundle().uninstall();
+    }
+
+    @Override
+    public void stop(BundleContext context) throws Exception {
+    }
+}

http://git-wip-us.apache.org/repos/asf/clerezza/blob/74fe1745/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/ClerezzaApp.java
----------------------------------------------------------------------
diff --git a/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/ClerezzaApp.java b/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/ClerezzaApp.java
new file mode 100644
index 0000000..cbe8636
--- /dev/null
+++ b/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/ClerezzaApp.java
@@ -0,0 +1,479 @@
+/*
+ * 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.clerezza.platform.launcher;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.security.AllPermission;
+import java.security.PermissionCollection;
+import java.security.Permissions;
+import java.security.Policy;
+import java.security.ProtectionDomain;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
+import java.util.Set;
+import java.util.TreeSet;
+import org.apache.felix.framework.Felix;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleException;
+import org.osgi.framework.FrameworkEvent;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.startlevel.StartLevel;
+import org.wymiwyg.commons.util.arguments.AnnotatedInterfaceArguments;
+import org.wymiwyg.commons.util.arguments.ArgumentHandler;
+import org.wymiwyg.commons.util.arguments.ArgumentProcessor;
+import org.wymiwyg.commons.util.arguments.InvalidArgumentsException;
+import org.wymiwyg.commons.util.dirbrowser.PathNameFilter;
+import org.wymiwyg.commons.util.dirbrowser.PathNode;
+import org.wymiwyg.commons.util.dirbrowser.PathNodeFactory;
+
+/**
+ * Clerezza Launcher Application.
+ *
+ *
+ * @author daniel, reto
+ */
+public class ClerezzaApp {
+
+    private Felix felixInstance = null;
+    private int exitCode = -1;
+    private List<ShutdownListener> shutdownListeners =
+            new ArrayList<ShutdownListener>(1);
+
+    /**
+     * Install bundles after core framework launch.
+     *
+     * @param context    the bundle context.
+     * @param artDescs    the bundles to install.
+     * @param nextLevel    the start level to change to after the installation.
+     * 
+     * @return    the installed bundles.
+     *
+     */
+    static Set<Bundle> installBundles(BundleContext context,
+            Collection<MavenArtifactDesc> artDescs,
+            int nextLevel) throws IOException, BundleException {
+
+        Set<Bundle> installedBundles = new HashSet<Bundle>();
+        for (MavenArtifactDesc artDesc : artDescs) {
+            try {
+                final Bundle installedBundle = context.installBundle(artDesc.toString(), artDesc.getInputStream());
+                installedBundles.add(installedBundle);
+            } catch (BundleException e) {
+                System.out.println(e.toString());
+            }
+        }
+
+        ServiceReference startLevelRef =
+                context.getServiceReference(StartLevel.class.getName());
+        StartLevel startLevel = (StartLevel) context.getService(startLevelRef);
+        for (Bundle bundle : installedBundles) {
+            startLevel.setBundleStartLevel(bundle, nextLevel);
+        }
+        return installedBundles;
+    }
+
+    /**
+     * Set Clerezza Instance system exit code.
+     *
+     * @param code    the code to set.
+     */
+    public void setExitCode(int code) {
+        exitCode = code;
+    }
+
+    /**
+     * Get Clerezza Instance system exit code.
+     *
+     * @return    the exit code.
+     */
+    public int getExitCode() {
+        return exitCode;
+    }
+
+    /**
+     * Add a shutdown listener.
+     * 
+     * @param shutdownListener    the shutdown listener.
+     */
+    public void addShutdownListener(ShutdownListener shutdownListener) {
+        shutdownListeners.add(shutdownListener);
+    }
+
+    /**
+     * Remove a shutdown Listener.
+     *
+     * @param shutdownListener    the shutdown listener.
+     */
+    public void removeShutdownListener(ShutdownListener shutdownListener) {
+        shutdownListeners.remove(shutdownListener);
+    }
+
+    /**
+     * Start this Clerezza Instance.
+     *
+     * Starts the Felix framework and installs CLerezza Bundles.
+     *
+     * This method exits after installing all bundles.
+     * It does not wait for the bundle installations to complete.
+     *
+     * @param args    Command line arguments.
+     */
+    public void start(String... args) throws Throwable {
+        LauncherArguments arguments;
+        try {
+            final ArgumentHandler argumentHandler = new ArgumentHandler(args);
+            arguments = argumentHandler.getInstance(LauncherArguments.class);
+            argumentHandler.processArguments(new ArgumentProcessor() {
+
+                @Override
+                public void process(List<String> remaining) throws InvalidArgumentsException {
+                    if (remaining.size() > 0) {
+                        throw new InvalidArgumentsException("The following arguments could not be understood: " + remaining);
+                    }
+                }
+            });
+        } catch (InvalidArgumentsException e) {
+            System.out.println(e.getMessage());
+            showUsage();
+            return;
+        }
+        if (arguments.getHelp()) {
+            showUsage();
+            return;
+        }
+        start(arguments);
+    }
+
+    private void start(LauncherArguments arguments) throws Throwable {
+        Properties configProps = getConfigProps(arguments);
+        Policy.setPolicy(new Policy() {
+
+            @Override
+            public PermissionCollection getPermissions(ProtectionDomain domain) {
+                PermissionCollection result = new Permissions();
+                result.add(new AllPermission());
+                return result;
+            }
+        });
+        System.setSecurityManager(new SecurityManager());
+        felixInstance = new Felix(configProps);
+        System.out.println("starting felix");
+        felixInstance.start();
+        final String revertParam = arguments.getRevertParam();
+        final PathNode bundlesRoot = PathNodeFactory.getPathNode(Main.class.getResource("/bundles"));
+        final BundleContext bundleContext = felixInstance.getBundleContext();
+        installBundlesForStartLevels(bundleContext, bundlesRoot, revertParam);
+    }
+
+    /**
+     * Stop this Clerezza instance.
+     *
+     * This method does not wait for the shutdown to complete before it exits.
+     */
+    public void stop() throws Throwable {
+        if (felixInstance != null) {
+            felixInstance.stop();
+        }
+    }
+
+    /**
+     * Wait for this Clerezza instance to shut down.
+     *
+     * After shut down all shutdown listeners are notified.
+     */
+    public void waitForStop() throws Throwable {
+        FrameworkEvent event = null;
+        try {
+            if (felixInstance != null) {
+                event = felixInstance.waitForStop(0);
+            }
+            setExitCode(0);
+        } catch (Throwable t) {
+            setExitCode(-1);
+            event = new FrameworkEvent(FrameworkEvent.ERROR, null, t);
+            throw t;
+        } finally {
+            notifyShutdownListeners(event);
+        }
+    }
+
+    private void notifyShutdownListeners(FrameworkEvent event) {
+        for (ShutdownListener shutdownListener : shutdownListeners) {
+            shutdownListener.notify(event);
+        }
+    }
+
+    private void installBundlesForStartLevels(final BundleContext bundleContext,
+            final PathNode bundlesRoot, final String revertParam) throws IOException, BundleException {
+        final String startlevelpathprefix = "startlevel-";
+        final String[] startLevelePaths = bundlesRoot.list(new PathNameFilter() {
+
+            @Override
+            public boolean accept(PathNode dir, String name) {
+                return name.startsWith(startlevelpathprefix);
+            }
+        });
+        Arrays.sort(startLevelePaths);
+        final Bundle[] installedBundles = bundleContext.getBundles();
+        final Set<Bundle> newlyInstalledBundles = new HashSet<Bundle>();
+        byte startLevel = 0;
+        for (String startLevelPath : startLevelePaths) {
+            startLevel = Byte.parseByte(
+                    startLevelPath.substring(startlevelpathprefix.length(),
+                    startLevelPath.length() - 1));
+            final PathNode startLevelPathNode = bundlesRoot.getSubPath(startLevelPath);
+            Set<MavenArtifactDesc> artDescs = getArtDescsFrom(startLevelPathNode);
+            if (revertParam != null) {
+                artDescs = getRevertArtifacts(revertParam, artDescs, installedBundles);
+            }
+            if (!alreadyInstalled(artDescs, installedBundles) || revertParam != null) {
+                newlyInstalledBundles.addAll(installBundles(bundleContext, new TreeSet(artDescs), startLevel));
+                System.out.println("level " + startLevel + " bundles installed");
+            }
+        }
+
+        for (Bundle bundle : newlyInstalledBundles) {
+            try {
+                bundle.start();
+            } catch (BundleException e) {
+                System.out.println("Exception installing Bundle " + bundle + ": " + e.toString());
+            }
+        }
+
+        ServiceReference startLevelRef =
+                bundleContext.getServiceReference(StartLevel.class.getName());
+        StartLevel startLevelService = (StartLevel) bundleContext.getService(startLevelRef);
+        startLevelService.setInitialBundleStartLevel(startLevel + 1);
+        startLevelService.setStartLevel(startLevel + 20);
+    }
+
+    private Set<MavenArtifactDesc> getArtDescsFrom(PathNode pathNode) {
+        Set<MavenArtifactDesc> result = new HashSet<MavenArtifactDesc>();
+        List<PathNode> jarPaths = getJarPaths(pathNode);
+        for (PathNode jarPath : jarPaths) {
+            result.add(MavenArtifactDesc.parseFromPath(jarPath));
+        }
+
+        return result;
+    }
+
+    private List<PathNode> getJarPaths(PathNode pathNode) {
+        List<PathNode> result = new ArrayList<PathNode>();
+        for (String childName : pathNode.list()) {
+            PathNode childNode = pathNode.getSubPath(childName);
+            if ((!childNode.isDirectory()) && (childName.endsWith(".jar"))) {
+                result.add(childNode);
+            } else {
+                for (PathNode subPath : getJarPaths(childNode)) {
+                    result.add(subPath);
+                }
+            }
+        }
+        return result;
+    }
+
+    /**
+     * Returns true if a bundle is found, whose location starts with a short URI
+     * ("mvn:[groupId]/[artifactId]") of a Maven Artifact specified.
+     *
+     * Returns false iff none of the specified Maven Artifacts is installed.
+     *
+     * @param artDescs MavenArtifacts to be checked if a corresponding bundle is
+     *        already installed
+     * @param installedBundles Bundles installed in the framework
+     * @return
+     */
+    private boolean alreadyInstalled(Set<MavenArtifactDesc> artDescs,
+            Bundle[] installedBundles) {
+        for (int i = 0; i < installedBundles.length; i++) {
+            String bundleLocation = installedBundles[i].getLocation();
+            for (Iterator<MavenArtifactDesc> it = artDescs.iterator(); it.hasNext();) {
+                MavenArtifactDesc mavenArtifactDesc = it.next();
+                if (bundleLocation.matches(mavenArtifactDesc.getShortUri() + "/.*[0-9].*")) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Returns the Maven Artifacts that have to be reverted to default.
+     * If the revertParam equals "all", then all platform bundles already installed
+     * are uninstalled and the returned <code>Set</code> contains all
+     * Maven Artifacts.
+     * If the revertParam is a regular expression, then the returned <code>Set</code>
+     * contains all Maven Artifacts, whose short URI matches the expression. If
+     * a corresponding bundle is installed, then it is uninstalled.
+     * If the revertParam equals "missing" then the returned <code>Set</code>
+     * contains all Maven Artifacts that are not installed.
+     * @param revertParam
+     * @param artDescs
+     * @param installedBundles
+     * @return
+     * @throws org.osgi.framework.BundleException
+     */
+    private Set<MavenArtifactDesc> getRevertArtifacts(String revertParam,
+            Set<MavenArtifactDesc> artDescs,
+            Bundle[] installedBundles) throws BundleException {
+        boolean installMissing = revertParam.toLowerCase().equals("missing");
+        if (revertParam.equals("all")) {
+            revertParam = ".*";
+        }
+        Set<MavenArtifactDesc> artsToBeInstalled = new HashSet<MavenArtifactDesc>();
+        for (Iterator<MavenArtifactDesc> it = artDescs.iterator(); it.hasNext();) {
+            MavenArtifactDesc mavenArtifactDesc = it.next();
+            boolean isInstalled = false;
+            if (mavenArtifactDesc.getShortUri().matches(revertParam) || installMissing) {
+                for (int i = 0; i < installedBundles.length; i++) {
+                    Bundle bundle = installedBundles[i];
+                    if (bundle.getLocation().matches(mavenArtifactDesc.getShortUri() + "/.*[0-9].*")) {
+                        if (installMissing) {
+                            isInstalled = true;
+                        } else {
+                            bundle.uninstall();
+                        }
+                    }
+                }
+                if (!installMissing || (installMissing && !isInstalled)) {
+                    artsToBeInstalled.add(mavenArtifactDesc);
+                }
+            }
+        }
+        return artsToBeInstalled;
+    }
+
+    /**
+     * Prints usage instructions to stdout
+     */
+    public static void showUsage() {
+        System.out.print("Usage: LaunchBundle ");
+        System.out.println(AnnotatedInterfaceArguments.getArgumentsSyntax(LauncherArguments.class));
+        PrintWriter out = new PrintWriter(System.out, true);
+        AnnotatedInterfaceArguments.printArgumentDescriptions(
+                LauncherArguments.class, out);
+        out.flush();
+    }
+    
+
+    private Properties getConfigProps(LauncherArguments arguments) {
+
+        Properties configProps = new Properties();
+        
+        configProps.putAll(System.getProperties());
+        //ignored as we're setting the starlevel manually to last used start-level + 20
+        //configProps.put("org.osgi.framework.startlevel.beginning", "20");
+        {
+            if (arguments.getNotConsoleShell()) {
+                configProps.put("clerezza.shell.disable",
+                    "true");
+            }
+        }
+        
+        {
+            String argLogLevel = arguments.getLogLevel();
+            if (argLogLevel == null) {
+                argLogLevel = "INFO";
+            }
+            System.out.println("setting log-level to: " + argLogLevel);
+            configProps.put("org.ops4j.pax.logging.DefaultServiceLog.level",
+                    argLogLevel);
+        }
+        {
+            final String port = arguments.getPort();
+            if (port != null) {
+                configProps.put("org.osgi.service.http.port", port);
+            }
+            configProps.put("org.ops4j.pax.url.mvn.repositories", getCommaSeparatedListOfMavenRepos());
+        }
+        
+        {
+            //sun.reflect added because of http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6265952 and loading of scala scripts
+            String extraPackages = (String) configProps.get("org.osgi.framework.system.packages.extra");
+            if (extraPackages == null) {
+                extraPackages = "sun.misc;sun.reflect";
+            } else {
+                extraPackages = "sun.misc;sun.reflect;"+extraPackages;
+            }
+            configProps.put("org.osgi.framework.system.packages.extra",extraPackages);
+        }
+
+        //public static final String CONTEXT_PROPERTY_HTTP_PORT_SECURE = "";
+        boolean httpsEnabled = false;
+        {
+
+            final String httpsPort = arguments.getSecurePort();
+            if (httpsPort != null && !"".equals(httpsPort)) {
+                configProps.put("org.osgi.service.http.port.secure", httpsPort);
+                httpsEnabled = true;
+            }
+        }
+        {
+
+            final String keyStorePath = arguments.getKeyStorePath();
+            if (keyStorePath != null && !"".equals(keyStorePath)) {
+                configProps.put("org.wymiwyg.jetty.httpservice.https.keystore.path", keyStorePath);
+                httpsEnabled = true;
+            }
+        }
+        {
+
+            final String keyStorePassword = arguments.getKeyStorePassword();
+            if (keyStorePassword != null && !"".equals(keyStorePassword)) {
+                configProps.put("org.wymiwyg.jetty.httpservice.https.keystore.password", keyStorePassword);
+                httpsEnabled = true;
+            }
+        }
+        {
+
+            final String keyStoreType = arguments.getKeyStoreType();
+            if (keyStoreType != null && !"".equals(keyStoreType)) {
+                configProps.put("org.wymiwyg.jetty.httpservice.https.keystore.type", keyStoreType);
+                httpsEnabled = true;
+            }
+        }
+
+        {
+
+            final String clientAuth = arguments.getClientAuth();
+            if (clientAuth != null && !"".equals(clientAuth)) {
+                configProps.put("org.wymiwyg.jetty.httpservice.clientauth", clientAuth);
+                httpsEnabled = true;
+            }
+        }
+
+        if (httpsEnabled) {
+            configProps.put("org.osgi.service.http.secure.enabled", "true");
+        }
+        return configProps;
+
+    }
+
+    private String getCommaSeparatedListOfMavenRepos() {
+        return "http://repository.apache.org/content/groups/snapshots-group@snapshots@noreleases@id=apache-snapshots,"
+                + "http://repo1.maven.org/maven2/@id=central";
+    }
+}

http://git-wip-us.apache.org/repos/asf/clerezza/blob/74fe1745/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/LauncherArguments.java
----------------------------------------------------------------------
diff --git a/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/LauncherArguments.java b/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/LauncherArguments.java
new file mode 100644
index 0000000..fb99d3b
--- /dev/null
+++ b/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/LauncherArguments.java
@@ -0,0 +1,70 @@
+/*
+ * 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.clerezza.platform.launcher;
+
+import org.wymiwyg.commons.util.arguments.CommandLine;
+
+/**
+ *
+ * @author mir
+ */
+public interface LauncherArguments {
+
+    @CommandLine(longName = "revert", shortName = {"R"}, required = false,
+    description = "Command to revert platform bundles to default. all|missing|<bundle-uri-pattern>")
+    public String getRevertParam();
+
+    @CommandLine(longName = "help", shortName = {"H"}, required = false,
+    isSwitch = true, description = "Show help on command line arguments")
+    public boolean getHelp();
+
+    @CommandLine(longName = "log", shortName = {"L"}, required = false,
+    description = "set the log-level, the value is one of the following: " +
+    "TRACE, DEBUG, INFO, WARN, ERROR, FATAL, or NONE")
+    public String getLogLevel();
+
+    @CommandLine(longName = "port", shortName = {"P"}, required = false,
+    description = "The port on which the default webservice shall listen")
+    public String getPort();
+    
+    @CommandLine(longName = "https_port", shortName = {}, required = false,
+    description = "The port on which the https secure webserver shall listen")
+    public String getSecurePort();
+    
+    @CommandLine(longName = "https_keystore_path", shortName = {}, required = false,
+    description = "The folder with the keystore for https")
+    public String getKeyStorePath();
+    
+    @CommandLine(longName = "https_keystore_password", shortName = {}, required = false,
+    description = "The password for accessing the keystore for https")
+    public String getKeyStorePassword();
+    
+    @CommandLine(longName = "https_keystore_type", shortName = {}, required = false,
+    description = "The type of the key-store")
+    public String getKeyStoreType();
+    
+    @CommandLine(longName = "https_keystore_clientauth", shortName = {}, required = false,
+    description = "Client Auth request, one of \"none\", \"want\" or \"need\"")
+    public String getClientAuth();
+
+    @CommandLine(longName = "noConsoleShell", shortName = {"NCS"}, required = false,
+    isSwitch = true, description = "Disable the console shell")
+    public boolean getNotConsoleShell();
+
+}

http://git-wip-us.apache.org/repos/asf/clerezza/blob/74fe1745/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/Main.java
----------------------------------------------------------------------
diff --git a/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/Main.java b/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/Main.java
new file mode 100644
index 0000000..cfa3366
--- /dev/null
+++ b/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/Main.java
@@ -0,0 +1,48 @@
+/*
+ * 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.clerezza.platform.launcher;
+
+import java.io.IOException;
+
+/**
+ * Clerezza Application launcher class.
+ *
+ * @author daniel
+ */
+public class Main {
+    
+    public static void main(String... args) throws IOException {
+        ClerezzaApp clerezza = new ClerezzaApp();
+
+        try {
+            clerezza.start(args);
+        } catch (Throwable t) {
+            System.err.println("Could not start Clerezza: " + t);
+            t.printStackTrace();
+            System.exit(clerezza.getExitCode());
+        }
+        try {
+            clerezza.waitForStop();
+        } catch (Throwable t) {
+            System.err.println("Exception during Clerezza shutdown: " + t);
+            t.printStackTrace();
+            System.exit(-1);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/clerezza/blob/74fe1745/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/MavenArtifactDesc.java
----------------------------------------------------------------------
diff --git a/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/MavenArtifactDesc.java b/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/MavenArtifactDesc.java
new file mode 100644
index 0000000..c8a02bc
--- /dev/null
+++ b/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/MavenArtifactDesc.java
@@ -0,0 +1,147 @@
+/*
+ * 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.clerezza.platform.launcher;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import org.wymiwyg.commons.util.dirbrowser.PathNode;
+
+/**
+ * Maven Artifact Description
+ * 
+ * @author daniel
+ */
+class MavenArtifactDesc implements Comparable<MavenArtifactDesc> {
+
+    //one of these is null
+    URL bundleUrl;
+    PathNode pathNode;
+    String groupId;
+    String artifactId;
+    String version;
+
+    /**
+     * Constructor with bundle URL.
+     *
+     * @param groupId    the group id.
+     * @param artifactId    the artifact id.
+     * @param version    the version.
+     * @param bundleUrl    the bundle URL.
+     */
+    MavenArtifactDesc(String groupId, String artifactId, String version, URL bundleUrl) {
+        this.groupId = groupId;
+        this.artifactId = artifactId;
+        this.version = version;
+        this.bundleUrl = bundleUrl;
+    }
+
+    /**
+     * Constructor with bundle path.
+     * 
+     * @param groupId    the group id.
+     * @param artifactId    the artifact id.
+     * @param version    the version.
+     * @param pathNode    the bundle path node.
+     */
+    MavenArtifactDesc(String groupId, String artifactId, String version, PathNode pathNode) {
+        this.groupId = groupId;
+        this.artifactId = artifactId;
+        this.version = version;
+        this.pathNode = pathNode;
+    }
+
+    /**
+     * Parse Maven Artifact Description from an URL.
+     *
+     * @param bundleUrl the URL.
+     * @return    A new MavenArtifactDesc object.
+     */
+    static MavenArtifactDesc parseFromURL(URL bundleUrl) {
+        String string = bundleUrl.toString();
+        int posSlashM1 = string.lastIndexOf('/');
+        int posSlashM2 = string.lastIndexOf('/', posSlashM1 - 1);
+        int posSlashM3 = string.lastIndexOf('/', posSlashM2 - 1);
+        String version = string.substring(posSlashM2 + 1, posSlashM1);
+        String artifactId = string.substring(posSlashM3 + 1, posSlashM2);
+        String groupId = getGroupId(string.substring(0, posSlashM3));
+        return new MavenArtifactDesc(groupId, artifactId, version, bundleUrl);
+    }
+
+    /**
+     * Parse Maven Artifact Description from a path node.
+     *
+     * @param pathNode    The path node.
+     * @return    A new MavenArtifactDesc object.
+     */
+    static MavenArtifactDesc parseFromPath(PathNode pathNode) {
+        String string = pathNode.getPath();
+        int posSlashM1 = string.lastIndexOf('/');
+        int posSlashM2 = string.lastIndexOf('/', posSlashM1 - 1);
+        int posSlashM3 = string.lastIndexOf('/', posSlashM2 - 1);
+        String version = string.substring(posSlashM2 + 1, posSlashM1);
+        String artifactId = string.substring(posSlashM3 + 1, posSlashM2);
+        String groupId = getGroupId(string.substring(0, posSlashM3));
+        return new MavenArtifactDesc(groupId, artifactId, version, pathNode);
+    }
+
+    /**
+     * Assembles group-id from the diretories after "bundles/"
+     *
+     * @param string a path-string. Must contain "bundles/".
+     */
+    static String getGroupId(String string) {
+        int startPos = string.indexOf("bundles/") + 8;
+        startPos = string.indexOf('/', startPos) + 1;
+        return string.substring(startPos).replace('/', '.');
+    }
+    
+    /**
+     * Returns an URI in the form "mvn:groupId/artifactId/version"
+     *
+     * @return the URI.
+     */
+    public String getShortUri() {
+        return "mvn:" + groupId + "/" + artifactId;
+    }
+
+    /**
+     * Returns a string representation of this object in the form
+     * "mvn:groupId/artifactId/version"
+     *
+     * @return    the string representation of this Maven Artifact Description.
+     */
+    @Override
+    public String toString() {
+        return "mvn:" + groupId + "/" + artifactId + "/" + version;
+    }
+
+    InputStream getInputStream() throws IOException {
+        if (bundleUrl == null) {
+            return pathNode.getInputStream();
+        }
+        return bundleUrl.openStream();
+    }
+
+    @Override
+    public int compareTo(MavenArtifactDesc o) {
+        return toString().compareTo(o.toString());
+    }
+}

http://git-wip-us.apache.org/repos/asf/clerezza/blob/74fe1745/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/ShutdownListener.java
----------------------------------------------------------------------
diff --git a/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/ShutdownListener.java b/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/ShutdownListener.java
new file mode 100644
index 0000000..1d406ce
--- /dev/null
+++ b/platform.launcher.storageless.parent/platform.launcher.storageless/src/main/java/org/apache/clerezza/platform/launcher/ShutdownListener.java
@@ -0,0 +1,38 @@
+/*
+ * 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.clerezza.platform.launcher;
+
+import org.osgi.framework.FrameworkEvent;
+
+/**
+ * A listener that gets notified when the Felix Framework is shut down.
+ *
+ * @author daniel
+ */
+public interface ShutdownListener {
+
+    /**
+     * Notify listener of complete Clerezza shut down.
+     *
+     * @param event
+     *        What event caused the shutdown. Note: event may be null.
+     */
+    public void notify(FrameworkEvent event);
+}

http://git-wip-us.apache.org/repos/asf/clerezza/blob/74fe1745/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/resources/documentation/images/tut_1_class_diagram.png
----------------------------------------------------------------------
diff --git a/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/resources/documentation/images/tut_1_class_diagram.png b/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/resources/documentation/images/tut_1_class_diagram.png
new file mode 100644
index 0000000..0bd04f4
Binary files /dev/null and b/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/resources/documentation/images/tut_1_class_diagram.png differ

http://git-wip-us.apache.org/repos/asf/clerezza/blob/74fe1745/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/resources/documentation/style/style.css
----------------------------------------------------------------------
diff --git a/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/resources/documentation/style/style.css b/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/resources/documentation/style/style.css
new file mode 100644
index 0000000..ff49a4d
--- /dev/null
+++ b/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/resources/documentation/style/style.css
@@ -0,0 +1,421 @@
+/*
+ *
+ * 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.
+ *
+*/
+
+/*---------------------------------------------------------------------------
+ *  Two- and three-column layout
+ */
+
+#banner {
+    top: 0px;
+    left: 0px;
+    right: 0px;
+    height: 116px;
+}
+
+#left {
+    position: absolute;
+    z-index: 2;
+    left: 8px;
+    width: 184px;
+    top: 125px;
+    bottom: 8px;
+    margin: 0px;
+    padding: 0px;
+}
+
+#right {
+    position: absolute;
+    z-index: 1;
+    right: 8px;
+    width: 184px;
+    top: 125px;
+    bottom: 8px;
+    margin: 0px;
+    padding: 0px;
+}
+
+.Content3Column {
+    position: absolute;
+    top: 125px;
+    bottom: 8px;
+    left: 208px;
+    right: 216px;
+}
+
+.Content2Column {
+    position: absolute;
+    top: 125px;
+    bottom: 8px;
+    left: 208px;
+    right: 16px;
+}
+
+#center {
+    z-index: 3;
+    margin: 0px;
+    border: none;
+    padding-bottom: 8px;
+}
+
+
+/*---------------------------------------------------------------------------
+ *  Default element styles
+ */
+
+body {
+    padding: 0px;
+    margin: 0px;
+    border: 0px;
+
+    font-family: helvetica, arial, sans-serif;
+    font-size: 12px;
+
+    background-color: white;
+    color: black;
+}
+
+h1, h2, h3, h4, h5, h6 {
+    margin: 0px;
+    border: 0px;
+    padding: 0px;
+    font-weight: normal;
+}
+
+a:link { color: #008DA8; }
+a:active { color: #FE5400; }
+a:hover { color: #FE5400; }
+a:visited { color: black; }
+
+iframe {
+    width:100%;
+    height: 800px;
+    border: 0px;
+}
+
+img {
+    border: 0px;
+    padding: 0px;
+    margin: 0px;
+}
+
+p {
+    border: 0px;
+    padding: 0px;
+    margin: 0px;
+    margin-bottom: 10px;
+}
+
+blockquote {
+    margin-bottom: 10px;
+}
+
+td {
+    font-size: 12px;
+    padding: 2px;
+}
+
+tr.a {
+    background-color:  #e0e0e0;
+}
+tr.b {
+    background-color: #ffffff;
+}
+
+th {
+    font-size: 12px;
+    font-weight: bold;
+    white-space: nowrap;
+    padding: 2px;
+}
+
+th.Row {
+    text-align: left;
+    vertical-align: top;
+}
+
+ul, ol {
+    border: 0px;
+    padding: 0px;
+    margin-top: 0px;
+    margin-bottom: 12px;
+    margin-left: 20px;
+}
+
+
+/*---------------------------------------------------------------------------
+ *  Page banner
+ */
+
+#banner {
+    margin: 0px;
+    border: 0px;
+    border-bottom: 1px solid #008DA8;
+    padding: 0px;
+    background-color: #e0e0e0;
+    color: #008DA8;
+    vertical-align: bottom;
+}
+
+#banner a { text-decoration: none; }
+#banner a:visited { color: #008DA8; }
+#banner a:hover { color: #FE5400; }
+#banner a:active { color: #FE5400; }
+
+#logo {
+    position: absolute;
+    top: 5px;
+    left: 8px;
+}
+
+#versions {
+    position: absolute;
+    width: auto;
+    right: 0px;
+    top: 0px;
+    margin: 8px;
+    font-weight: normal;
+}
+
+/*---------------------------------------------------------------------------
+ *  Page content
+ */
+
+#content {
+    margin: 0px;
+    background-color: white;
+    color: black;
+    height: 100%;
+}
+
+#content h1 {
+    width: 100%;
+    font-size: 18px;
+    background-color: #008DA8;
+    color: white;
+    padding: 2px;
+    padding-left: 6px;
+    margin-top: 24px;
+    margin-bottom: 12px;
+}
+
+#content .FirstChild {  /* IE doesn't understand first-child pseudoelement */
+    margin-top: 0px;
+}
+
+#content a { text-decoration: underline; }
+#content a:link { color: #008DA8; }
+#content a:visited { color: #008DA8; }
+#content a:active { color: #FE5400; }
+#content a:hover { color: #FE5400; }
+
+#content h2 {
+    margin-top: 24px;
+    border-top: 1px solid #008DA8;
+    margin-bottom: 16px;
+    font-size: 15px;
+    font-weight: bold;
+    background-color:  #e0e0e0;;
+    padding: 2px;
+}
+
+#content li {
+    margin-bottom: 6px;
+}
+
+#content th {
+    background-color:  #e0e0e0;
+}
+
+#content td {
+    
+}
+
+.Source pre {
+    padding: 4px;
+    font-family: courier new, monospace;
+    font-size: 11px;
+    border: 1px solid #008DA8;
+    background-color:  #e0e0e0;
+    color: black;
+}
+
+.Source:before {
+    margin: 0px;
+    padding: 0px;
+    border: 0px;
+    font-size: inherit;
+    line-spacing: 100%;
+}
+
+.highlight {
+    background-color:  #e0e0e0;
+    border: 1px dotted #008DA8;
+    padding: 5px;
+}
+
+/* The following are for images, but can also apply to div's containing images. */
+
+#content .Float {
+    float: right;
+    margin-left: 8px;
+    margin-right: 0px;
+    margin-top: 8px;
+    margin-bottom: 8px;
+}
+
+#content .Diagram {
+    display: block;
+    margin-left: auto;
+    margin-right: auto;
+    margin-top: 8px;
+    margin-bottom: 8px;
+}
+
+
+#content .Inline {
+    display: inline;
+}
+
+.RuleOfThumb {
+    font-weight: bold;
+}
+
+/*---------------------------------------------------------------------------
+ *  Side panels
+ */
+
+.SidePanel {
+    background-color: white;
+    padding: 0px;
+    font-size: 11px;
+}
+
+.SidePanel h1 {
+    margin: 0px;
+    border: 0px;
+    padding: 4px;
+
+    color: #008DA8;
+
+    font-size: 12px;
+    font-weight: bold;
+}
+
+
+.SidePanel a { text-decoration: none; }
+.SidePanel a:link { color: #000000; }
+.SidePanel a:visited { color: #000000; }
+.SidePanel a:active { color: #FE5400; }
+.SidePanel a:hover { color: #FE5400; }
+
+/*---------------------------------------------------------------------------
+ *  Menus
+ */
+
+.MenuGroup {
+    border-left: 1px solid #A3DAE6;
+    border-top: 1px solid #A3DAE6;
+    border-bottom: 1px solid white; /* IE work-around */
+
+    margin-bottom: 8px;
+    background-color: white;
+    color: #008DA8;
+}
+
+.MenuGroup ul {
+    margin: 0px;
+    padding-left: 4px;
+    list-style-type: none;
+}
+
+.MenuGroup li {
+    padding: 2px;
+}
+
+.MenuGroup .currentLink {
+/*    background-color: #060;*/
+    background-color:  #e0e0e0;
+    color: #008DA8;
+}
+
+
+/*---------------------------------------------------------------------------
+ *  News panel
+ */
+
+.NewsGroup {
+    border-left: 1px solid #A3DAE6;
+    border-top: 1px solid #A3DAE6;
+    border-bottom: 1px solid white; /* IE workaround */
+    margin-bottom: 8px;
+
+    color: #008DA8;
+}
+
+.NewsItem {
+    margin: 4px;
+}
+
+.NewsDate {
+    font-weight: bold;
+    margin: 0px;
+    padding: 0px;
+}
+
+.NewsText {
+    padding: 0px;
+    margin: 0px;
+    margin-bottom: 8px;
+}
+
+.NewsText a { text-decoration: underline; }
+.NewsText a:link { color: #008DA8; }
+.NewsText a:visited { color: #008DA8; }
+.NewsText a:active { color: #FE5400; }
+.NewsText a:hover { color: #FE5400; }
+
+.NewsMore {
+    font-size: smaller;
+    margin: 4px;
+    margin-top: 8px;
+    text-align: left;
+}
+
+.NewsGroup td {
+    font-size: 12px;
+}
+
+/*---------------------------------------------------------------------------
+ *  Document meta-information
+ */
+
+.Meta {
+    margin-top: 64px;
+    font-size: smaller;
+    color: #008DA8;
+    text-align: right;
+}
+
+.Meta a { text-decoration: underline; }
+.Meta a:link { color: #008DA8; }
+.Meta a:visited { color: #008DA8; }
+.Meta a:active { color: #FE5400; }
+.Meta a:hover { color: #FE5400; }

http://git-wip-us.apache.org/repos/asf/clerezza/blob/74fe1745/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/resources/images/clerezza.png
----------------------------------------------------------------------
diff --git a/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/resources/images/clerezza.png b/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/resources/images/clerezza.png
new file mode 100644
index 0000000..cb0efb0
Binary files /dev/null and b/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/resources/images/clerezza.png differ

http://git-wip-us.apache.org/repos/asf/clerezza/blob/74fe1745/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/site.xml
----------------------------------------------------------------------
diff --git a/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/site.xml b/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/site.xml
new file mode 100644
index 0000000..8d5a4cb
--- /dev/null
+++ b/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/site.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+/*
+ * 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>
+    <body>
+        <menu name="Documentation">
+            <item name="Usage" href="documentation/usage.xhtml"/>
+        </menu>
+    </body>
+</project>

http://git-wip-us.apache.org/repos/asf/clerezza/blob/74fe1745/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/xsite/content/sitemap.xml
----------------------------------------------------------------------
diff --git a/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/xsite/content/sitemap.xml b/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/xsite/content/sitemap.xml
new file mode 100644
index 0000000..38be885
--- /dev/null
+++ b/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/xsite/content/sitemap.xml
@@ -0,0 +1,28 @@
+<?xml version='1.0'?>
+<!--
+
+ 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.
+
+-->
+
+<sitemap>
+    <section>
+        <name>Documentation</name>
+        <page>usage.xhtml</page>
+    </section>
+</sitemap>

http://git-wip-us.apache.org/repos/asf/clerezza/blob/74fe1745/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/xsite/content/usage.xhtml
----------------------------------------------------------------------
diff --git a/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/xsite/content/usage.xhtml b/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/xsite/content/usage.xhtml
new file mode 100644
index 0000000..4db0157
--- /dev/null
+++ b/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/xsite/content/usage.xhtml
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * 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.
+ */
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us">
+	<head>
+		<title>Usage: How to launch the clerezza platform</title>
+	</head>
+	<body>
+		<h1>Usage: How to launch the clerezza platform</h1>
+		<p>Author: Daniel Spicar, Tsuyoshi Ito - clerezza.org</p>
+		<p>Date: March 25, 2009</p>
+		<h2 id="download">1. Download the launcher</h2>
+		<p>
+			The latest snapshots of the launcher can be found on:
+            <br />
+            <br />
+			<a href="http://repo.trialox.org/snapshot/org/apache/clerezza/org.apache.clerezza.platform.launcher/" target="_blank">
+               http://repo.trialox.org/snapshot/org/apache/clerezza/org.apache.clerezza.platform.launcher/
+            </a>
+            <br />
+            <br />
+			or get a stable release from:
+            <br />
+            <br />
+			<a href="http://repo.trialox.org/release/org/apache/clerezza/org.apache.clerezza.platform.launcher/" target="_blank">
+                http://repo.trialox.org/release/org/apache/clerezza/org.apache.clerezza.platform.launcher/
+            </a>
+            <br />
+            <br />
+			(e.g. org.apache.clerezza.platform.launcher-0.2-20090421.105711-13.jar from <a href="http://repo.trialox.org/snapshot/org/apache/clerezza/org.apache.clerezza.platform.launcher/0.2-SNAPSHOT/" target="_blank">
+			http://repo.trialox.org/snapshot/org/apache/clerezza/org.apache.clerezza.platform.launcher/0.2-SNAPSHOT/
+            </a>).
+		</p>
+		<h2 id="run">2. Run the platform</h2>
+		<p>
+            Execute the jar by typing
+            the following into a console:
+        </p>
+		<pre>
+            <code>$ java -Dorg.ops4j.pax.logging.DefaultServiceLog.level=ERROR -jar '/path/to/org.apache.clerezza.platform.launcher-0.2-20090421.105711-13.jar'</code>
+        </pre>
+		<p>
+            This will launch the platform and send the logger output from the 
+			level ERROR and above to the console.
+            If problems are encountered, make sure the jar archive is executeable.
+            In a desktop environment like Microsoft Windows it can be enough to
+            double click the file in order to launch it.
+            <br />
+            If the platform was launched in the console, hit the return key to get a promt (->).
+            The loaded bundles and their state can be checked by typing:
+        </p>
+		<pre>
+            <code>
+                -> ps
+            </code>
+        </pre>
+        <p>
+            The output should look like this:
+        </p>
+        <pre>
+            <code>
+                START LEVEL 30
+                   ID   State         Level  Name
+                [   0] [Active     ] [    0] System Bundle (1.4.1)
+                [   1] [Resolved   ] [    1] Clerezza - Platform Security Conditions (0.2.0.SNAPSHOT)
+                [   2] [Active     ] [    2] Apache Felix Bundle Repository (1.2.1)
+                [   3] [Active     ] [    2] Apache Felix Configuration Admin Service (1.0.10)
+                    ...
+                    
+                    
+                <strong>[  28] [Active     ] [    3] Clerezza - Platform Account Control Panel (0.3.0.SNAPSHOT)</strong>
+                <strong>[  29] [Active     ] [    3] Clerezza - Platform Content (0.7.0.SNAPSHOT)</strong>
+                <strong>[  30] [Active     ] [    3] Clerezza - Platform Template Manager (0.2.0.SNAPSHOT)</strong>
+                <strong>[  32] [Active     ] [    3] Clerezza - Platform Type Handler Space (0.2.0.SNAPSHOT)</strong>
+                <strong>[  33] [Active     ] [    3] Clerezza - Platform Usermanager and Rolemanager (0.7.0.SNAPSHOT)</strong>
+                    ...
+                ->
+            </code>
+        </pre>
+        <p>
+            To see a list of available services type:
+        </p>
+        <pre>
+            <code>
+                -> scr list
+            </code>
+        </pre>
+        <p>
+            The output should look like this:
+        </p>
+        <pre>
+            <code>
+                   Id   State          Name
+                [   0] [active       ] org.apache.clerezza.platform.security.PermissionManager
+                [   1] [active       ] org.apache.clerezza.platform.security.auth.AuthenticatingFilter
+                [   2] [active       ] org.apache.clerezza.jaxrs.rdf.providers.GraphReader
+                [   3] [active       ] org.apache.clerezza.jaxrs.rdf.providers.GraphWriter
+
+
+                    ...
+                ->
+            </code>
+        </pre>
+        <p>
+            Now the platform can be accessed in a web browser by going to <i>http://localhost:8080/path_to_service/</i>, whereas <i>path_to_service</i> has to be replaced by the path to a service/module (when asked to authenticate use username "admin" and password "admin". The user account "admin" has all permissions).
+            <br />Try the following modules:
+        </p>
+        <ul>
+            <li><a href="http://localhost:8080/admin/user-manager/" target="_blank">http://localhost:8080/admin/user-manager/</a></li>
+            <li><a href="http://localhost:8080/admin/role-manager/" target="_blank">http://localhost:8080/admin/role-manager/</a></li>
+            <li><a href="http://localhost:8080/admin/template-manager/" target="_blank">http://localhost:8080/admin/template-manager/</a></li>
+            <li>
+                <a href="http://localhost:8080/user/admin/control-panel/" target="_blank">
+                    http://localhost:8080/user/admin/control-panel/
+                </a>
+                  (where <i>admin</i> can be the username of an arbitary user)
+            </li>
+            <li><a href="http://localhost:8080/tools/editor/" target="_blank">http://localhost:8080/tools/editor/</a></li>
+        </ul>
+        <p>
+            Check out the following sites for more information:
+        </p>
+        <ul>
+            <li>
+                <a href="http://clerezza.org/projects/org.apache.clerezza.platform.usermanager/" target="_blank">
+                   http://clerezza.org/projects/org.apache.clerezza.platform.usermanager/
+                </a>
+            </li>
+             <li><a href="http://clerezza.org/projects/org.apache.clerezza.platform.accountcontrolpanel/" target="_blank">http://clerezza.org/projects/org.apache.clerezza.platform.accountcontrolpanel/</a></li>
+             <li><a href="http://clerezza.org/projects/org.apache.clerezza.platform.templating.manager/" target="_blank">http://clerezza.org/projects/org.apache.clerezza.platform.templating.manager/</a></li>
+            <li><a href="http://clerezza.org/projects/org.apache.clerezza.platform.content/" target="_blank">http://clerezza.org/projects/org.apache.clerezza.platform.content/</a></li>
+        </ul>
+        <h2 id="shutdown">3. Shutdown the platform</h2>
+        <p>
+            The platform can be stopped by typing:
+        </p>
+            <pre>
+                <code>
+                    -> shutdown
+                </code>
+            </pre>
+
+		<h2 id="shutdown">4. Felix webconsole</h2>
+        <p>
+            As an alternative to the command-line interface Felix also provides
+			a web-based management interface available by default at
+			<a href="http://localhost:8080/system/console">http://localhost:8080/system/console</a>.
+			The port at which the console is accessible can be set with the
+			<code>org.osgi.service.http.port</code> system property.
+        </p>
+		<pre>
+            <code>$ java -Dorg.osgi.service.http.port=8383 -jar '/path/to/org.apache.clerezza.platform.launcher-0.2-20090421.105711-13.jar'</code>
+        </pre>
+		<p>
+           Starting the platform as above the web-console will be available on
+		   port 8383, note that this has no impact on the port of the plaftform's
+		   webserver which by default listens to port 8080.
+        </p>
+    </body>
+</html>
+

http://git-wip-us.apache.org/repos/asf/clerezza/blob/74fe1745/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/xsite/templates/skin.html
----------------------------------------------------------------------
diff --git a/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/xsite/templates/skin.html b/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/xsite/templates/skin.html
new file mode 100644
index 0000000..bb1b45d
--- /dev/null
+++ b/platform.launcher.storageless.parent/platform.launcher.storageless/src/site/xsite/templates/skin.html
@@ -0,0 +1,71 @@
+<!--
+
+ 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.
+
+-->
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+    <head>
+        <title>clerezza.org - ${title}</title>
+        <link rel="stylesheet" type="text/css" href="style/style.css"/>
+        ${head}
+    </head>
+    <body>
+
+        <div id="banner">
+            <a href="http://clerezza.org/">
+              <img id="logo" src="../images/clerezza.png" alt="clerezza.org"/>
+            </a><br />
+        </div>
+
+        <div id="center" class="${centerClass}">
+            <div id="content">
+                <!-- <h1 class="FirstChild">${title}</h1> -->
+                ${body}
+                <p>Copyright (c) 2008-2009 trialox.org (trialox AG, Switzerland)</p>
+                <br /><br />
+            </div>
+        </div>
+
+        <div class="SidePanel" id="left">
+            <#list sitemap.sections as section>
+                <div class="MenuGroup">
+                    <h1>${section.name}</h1>
+                    <ul>
+                        <#list section.entries as entry>
+                            <#if entry = page>
+                                <li class="currentLink">${entry.title}</li>
+                            <#else>
+                                <li><a href="${entry.href}">${entry.title}</a></li>
+                            </#if>
+                        </#list>
+                    </ul>
+                </div>
+            </#list>
+            <div class="MenuGroup">
+                  <h1>Project Site</h1>
+                  <ul>
+
+                              <li><a href="../index.html">Back to project site</a></li>
+                  </ul>
+              </div>
+        </div>
+
+  </body>
+</html>