incubator-sling-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From fmesc...@apache.org
Subject svn commit: r590999 [1/5] - in /incubator/sling/trunk/microsling: ./ microsling-core/ microsling-core/src/ microsling-core/src/main/ microsling-core/src/main/java/ microsling-core/src/main/java/org/ microsling-core/src/main/java/org/apache/ microsling-...
Date Thu, 01 Nov 2007 13:30:08 GMT
Author: fmeschbe
Date: Thu Nov  1 06:30:00 2007
New Revision: 590999

URL: http://svn.apache.org/viewvc?rev=590999&view=rev
Log:
Add microsling from whiteboard. Adapt microsling to new Sling API SLING-88 and fix MicroslingRequestPathInfo parser (SLING-91)

Added:
    incubator/sling/trunk/microsling/
    incubator/sling/trunk/microsling/microsling-core/   (with props)
    incubator/sling/trunk/microsling/microsling-core/README.txt   (with props)
    incubator/sling/trunk/microsling/microsling-core/pom.xml   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/
    incubator/sling/trunk/microsling/microsling-core/src/main/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/MicroslingSlingHttpServletRequest.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/MicroslingSlingHttpServletResponse.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/api/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/api/exceptions/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/api/helpers/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/api/requestparams/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/contenttype/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/contenttype/ResponseContentTypeResolverFilter.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/helpers/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/helpers/constants/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/helpers/constants/HttpConstants.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/helpers/exceptions/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/helpers/exceptions/MissingRequestAttributeException.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/helpers/servlets/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/request/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/request/helpers/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/request/helpers/AbstractFilter.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/request/helpers/MicroslingRequestPathInfo.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/request/helpers/MicroslingRequestProgressTracker.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/request/helpers/SlingRequestParameterMap.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/resource/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/resource/JcrNodeResource.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/resource/MicroslingResourceMetadata.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/resource/MicroslingResourceResolver.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/resource/ResourcePathIterator.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/scripting/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/scripting/MicroslingScriptResolver.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/scripting/MicroslingScriptServlet.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/scripting/engines/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/scripting/engines/freemarker/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/scripting/engines/freemarker/FreemarkerScriptEngine.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/scripting/engines/rhino/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/scripting/engines/rhino/RhinoJavasSriptEngine.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/scripting/engines/rhino/ScriptableNode.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/scripting/engines/rhino/ScriptableResource.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/scripting/engines/velocity/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/scripting/engines/velocity/VelocityTemplatesScriptEngine.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/scripting/helpers/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/scripting/helpers/EspReader.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/scripting/helpers/FileNodeRequestAttribute.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/scripting/helpers/ScriptFilenameBuilder.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/scripting/helpers/ScriptHelper.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/services/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/services/MicroslingServiceLocator.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/servlet/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/servlet/MicroSlingFilterHelper.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/servlet/MicroslingMainServlet.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/servlet/MicroslingServletResolver.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/slingservlets/
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/slingservlets/DefaultSlingServlet.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/slingservlets/StreamServlet.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/webapp/
    incubator/sling/trunk/microsling/microsling-core/src/main/webapp/WEB-INF/
    incubator/sling/trunk/microsling/microsling-core/src/main/webapp/WEB-INF/log4j.dtd   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/webapp/WEB-INF/log4j.xml   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/webapp/WEB-INF/web.xml   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/webapp/WEB-INF/webdav-resource-config.xml   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/webapp/content-creation-forms.html   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/webapp/freemarker-scripts.html   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/webapp/index.html   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/webapp/microsling.css   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/webapp/server-side-javascript.html   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/main/webapp/velocity-scripts.html   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/test/
    incubator/sling/trunk/microsling/microsling-core/src/test/java/
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/microsling/
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/microsling/integration/
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/microsling/integration/CreateNodeTest.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/microsling/integration/FileUploadTest.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/microsling/integration/HttpPingTest.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/microsling/integration/MicroslingHttpTestBase.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/microsling/integration/MkdirTest.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/microsling/integration/NodetypeRenderingTest.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/microsling/integration/RenderingTestBase.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/microsling/integration/SlingResourceTypeRenderingTest.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/microsling/integration/StreamServletTest.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/microsling/integration/helpers/
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/microsling/integration/helpers/HttpAnyMethod.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/microsling/integration/helpers/MicroslingIntegrationTestClient.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/microsling/integration/package.html   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/microsling/request/
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/microsling/request/helpers/
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/microsling/request/helpers/MicroslingRequestPathInfoTest.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/microsling/resource/
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/microsling/resource/ResourcePathIteratorTest.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/microsling/scripting/
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/microsling/scripting/helpers/
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/microsling/scripting/helpers/EspReaderTest.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/microsling/scripting/helpers/ScriptFilenameBuilderTest.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/microsling/services/
    incubator/sling/trunk/microsling/microsling-core/src/test/java/org/apache/sling/microsling/services/MicroslingServiceLocatorTest.java   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/test/resources/
    incubator/sling/trunk/microsling/microsling-core/src/test/resources/integration-test/
    incubator/sling/trunk/microsling/microsling-core/src/test/resources/integration-test/rendering-test.esp
    incubator/sling/trunk/microsling/microsling-core/src/test/resources/integration-test/rendering-test.ftl
    incubator/sling/trunk/microsling/microsling-core/src/test/resources/integration-test/rendering-test.js   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/test/resources/integration-test/rendering-test.vlt
    incubator/sling/trunk/microsling/microsling-core/src/test/resources/integration-test/testfile.html   (with props)
    incubator/sling/trunk/microsling/microsling-core/src/test/resources/integration-test/testfile.txt   (with props)

Propchange: incubator/sling/trunk/microsling/microsling-core/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Thu Nov  1 06:30:00 2007
@@ -0,0 +1,7 @@
+.classpath
+.project
+.settings
+target
+*.log
+jackrabbit-repository
+logs

Added: incubator/sling/trunk/microsling/microsling-core/README.txt
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/microsling/microsling-core/README.txt?rev=590999&view=auto
==============================================================================
--- incubator/sling/trunk/microsling/microsling-core/README.txt (added)
+++ incubator/sling/trunk/microsling/microsling-core/README.txt Thu Nov  1 06:30:00 2007
@@ -0,0 +1,35 @@
+------------------------------------------------------------
+Microsling: the Sling request processing, reduced to the max
+------------------------------------------------------------
+
+The goal of this prototype is to demonstrate the Sling HTTP
+request processing in the simplest possible way, to help the
+community converge on the goals and architecture of this 
+module.
+
+How to build and run this
+------------------------
+Currently this depends on the Jackrabbit 1.4-SNAPSHOT, mostly
+because I had a project skeleton around that takes advantage of
+JCR-955 to reuse some Jackrabbit servlets.
+
+To build and run:
+
+1) Install a JDK 1.5 and Maven 2.0.7.
+
+2) Get and build the Jackrabbit trunk from
+
+  http://svn.apache.org/repos/asf/jackrabbit/trunk
+
+I'm currently using revision 583722 for my tests.
+
+3) Build and run this webapp:
+
+  mvn clean package jetty:run
+  
+Which should say "Started SelectChannelConnector@0.0.0.0:8080" once
+the build is done.  
+  
+4) Connect to http://localhost:8080/ which should return a page
+saying "Microsling homepage". That page contains instructions for
+playing with Microsling.   
\ No newline at end of file

Propchange: incubator/sling/trunk/microsling/microsling-core/README.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/sling/trunk/microsling/microsling-core/pom.xml
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/microsling/microsling-core/pom.xml?rev=590999&view=auto
==============================================================================
--- incubator/sling/trunk/microsling/microsling-core/pom.xml (added)
+++ incubator/sling/trunk/microsling/microsling-core/pom.xml Thu Nov  1 06:30:00 2007
@@ -0,0 +1,302 @@
+<?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 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>
+
+  <groupId>org.apache.sling</groupId>
+  <artifactId>microsling</artifactId>
+  <packaging>war</packaging>
+  <name>microsling</name>
+  <!--
+    WARNING: if changing this, change microsling.http.server.url below as well 
+   -->
+  <version>1.0-incubator-SNAPSHOT</version>
+  
+  <url>http://incubator.apache.org/sling</url>
+
+  <properties>
+    <!-- 
+      Use the Jackrabbit trunk, mostly because JCR-955
+      makes it easier to reuse the servlets from the
+      jackrabbit-webapp module.
+    -->
+    <jackrabbit.version>1.4-SNAPSHOT</jackrabbit.version>
+    
+    <!-- 
+      Defines which tests are for the "integration-testing" phase
+     -->
+    <integration.test.code.path>**/microsling/integration</integration.test.code.path>
+    
+    <!-- 
+      Set this to true to stop mvn once the integration test Jetty instance is
+      started. Useful to manually test the integration testing webapp.
+     -->
+     <integration.test.wait>false</integration.test.wait>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.sling</groupId>
+      <artifactId>sling-api</artifactId>
+      <version>2.0.0-incubator-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>servlet-api</artifactId>
+      <version>2.4</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.jackrabbit</groupId>
+      <artifactId>jackrabbit-webapp</artifactId>
+      <version>${jackrabbit.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.jackrabbit</groupId>
+      <artifactId>jackrabbit-jcr-servlet</artifactId>
+      <version>${jackrabbit.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>javax.jcr</groupId>
+      <artifactId>jcr</artifactId>
+      <version>1.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.velocity</groupId>
+      <artifactId>velocity</artifactId>
+      <version>1.5</version>
+    </dependency>
+    <dependency>
+      <groupId>rhino</groupId>
+      <artifactId>js</artifactId>
+      <version>1.6R6</version>
+    </dependency>
+    <dependency>
+        <groupId>freemarker</groupId>
+        <artifactId>freemarker</artifactId>
+        <version>2.3.6</version>
+    </dependency>
+    <dependency>
+      <groupId>commons-httpclient</groupId>
+      <artifactId>commons-httpclient</artifactId>
+      <version>3.1</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <configuration>
+          <source>1.5</source>
+          <target>1.5</target>
+          <encoding>UTF-8</encoding>
+        </configuration>
+      </plugin>
+      <plugin>
+        <!-- SLING-66: create a jar in addition to our war, to make our servlets reusable -->
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>attach-classes</id>
+            <phase>package</phase>
+            <goals>
+              <goal>jar</goal>
+            </goals>
+            <configuration>
+              <!-- using the classifier makes the jar an attachement -->
+              <classifier>classes</classifier>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.mortbay.jetty</groupId>
+        <artifactId>maven-jetty-plugin</artifactId>
+        <version>6.1.5</version>
+        <configuration>
+          <contextPath>/</contextPath>
+          <scanIntervalSeconds>10</scanIntervalSeconds>
+          <connectors>
+            <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
+              <port>8080</port>
+              <maxIdleTime>60000</maxIdleTime>
+            </connector>
+          </connectors>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <systemProperties>
+            <!-- 
+              WARNING: make sure these URLs are consistent with the
+              cargo-maven2-plugin settings: AFAIK Maven does not
+              expand variables in the <value> element.
+              And WARNING: these properties are duplicated somewhere in this
+              POM with slightly different values...there must be a better way. 
+            -->
+            <property>
+              <name>microsling.http.server.url</name>
+              <value>http://localhost:8080/microsling</value>
+            </property>
+            <property>
+              <name>microsling.webdav.server.url</name>
+              <value>http://localhost:8080/repository/default</value>
+            </property>
+          </systemProperties>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+  <profiles>
+    <profile>
+      <!--
+        Run the cargo-based integration tests.
+        This profile is active by default, to deactivate it activate another
+        one, for example " mvn -P nullProfile".
+        
+        TODO there must be a way to control this with "mvn.test.skip", but I haven't
+        found it. 
+       -->
+      <id>cargoIntegrationTesting</id>
+      <activation>
+        <activeByDefault>true</activeByDefault>
+      </activation>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-surefire-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>surefire-integration-test</id>
+                <phase>integration-test</phase>
+                <goals>
+                  <goal>test</goal>
+                </goals>
+                <configuration>
+                  <excludes>
+                    <exclude>none</exclude>
+                  </excludes>
+                  <includes>
+                    <include>${integration.test.code.path}/**Test.java</include>
+                  </includes>
+                  <systemProperties>
+                    <!-- 
+                      WARNING: make sure these URLs are consistent with the
+                      cargo-maven2-plugin settings: AFAIK Maven does not
+                      expand variables in the <value> element.
+                      And WARNING: these properties are duplicated somewhere in this
+                      POM with slightly different values...there must be a better way. 
+                    -->
+                    <property>
+                      <name>microsling.http.server.url</name>
+                      <value>http://localhost:8080/microsling-1.0-incubator-SNAPSHOT/microsling</value>
+                    </property>
+                    <property>
+                      <name>microsling.webdav.server.url</name>
+                      <value>http://localhost:8080/microsling-1.0-incubator-SNAPSHOT/repository/default</value>
+                    </property>
+                  </systemProperties>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <groupId>org.codehaus.cargo</groupId>
+            <artifactId>cargo-maven2-plugin</artifactId>
+            <version>0.3.1</version>
+            <executions>
+              <execution>
+                <id>start-container</id>
+                <phase>pre-integration-test</phase>
+                <goals>
+                  <goal>start</goal>
+                </goals>
+              </execution>
+              <execution>
+                <id>stop-container</id>
+                <phase>post-integration-test</phase>
+                <goals>
+                  <goal>stop</goal>
+                </goals>
+              </execution>
+            </executions>
+            <configuration>
+              <wait>${integration.test.wait}</wait>
+              <container>
+                <containerId>jetty6x</containerId>
+                <type>embedded</type>
+              </container>
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+    <profile>
+      <!--
+        By default, do not run the integration tests in the test phase, as they have
+        no microsling to talk to.
+        To debug the integration tests faster than with the normal build cycle,
+        deactivate this profile (using -P nullProfile for example) and run a
+        separate instance of microsling that the tests can talk to.
+       -->
+      <id>disableIntegrationTestsInTestPhase</id>
+      <activation>
+        <activeByDefault>true</activeByDefault>
+      </activation>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-surefire-plugin</artifactId>
+            <configuration>
+              <excludes>
+                <exclude>${integration.test.code.path}/**.java</exclude>
+              </excludes>
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+    <profile>
+      <!-- 
+        Useful to deactivate other profiles from the command-line
+        Is there a better way? mvn doesn't have a "deactivate profile" option. 
+       -->
+      <id>nullMicroslingProfile</id>
+    </profile>
+  </profiles>
+
+</project>

Propchange: incubator/sling/trunk/microsling/microsling-core/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/MicroslingSlingHttpServletRequest.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/MicroslingSlingHttpServletRequest.java?rev=590999&view=auto
==============================================================================
--- incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/MicroslingSlingHttpServletRequest.java (added)
+++ incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/MicroslingSlingHttpServletRequest.java Thu Nov  1 06:30:00 2007
@@ -0,0 +1,221 @@
+/*
+ * 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.microsling;
+
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Locale;
+import java.util.ResourceBundle;
+
+import javax.jcr.Session;
+import javax.servlet.RequestDispatcher;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+
+import org.apache.sling.api.SlingException;
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.request.RequestDispatcherOptions;
+import org.apache.sling.api.request.RequestParameter;
+import org.apache.sling.api.request.RequestParameterMap;
+import org.apache.sling.api.request.RequestPathInfo;
+import org.apache.sling.api.request.RequestProgressTracker;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.services.ServiceLocator;
+import org.apache.sling.microsling.request.helpers.MicroslingRequestPathInfo;
+import org.apache.sling.microsling.request.helpers.MicroslingRequestProgressTracker;
+import org.apache.sling.microsling.request.helpers.SlingRequestParameterMap;
+import org.apache.sling.microsling.resource.MicroslingResourceResolver;
+
+/**
+ * The <code>MicroslingSlingHttpServletRequest</code> TODO
+ */
+public class MicroslingSlingHttpServletRequest extends
+        HttpServletRequestWrapper implements SlingHttpServletRequest {
+
+    private RequestProgressTracker requestProgressTracker;
+
+    private ServiceLocator serviceLocator;
+
+    private ResourceResolver resourceResolver;
+
+    private Resource resource;
+
+    private RequestPathInfo requestPathInfo;
+
+    private RequestParameterMap requestParameterMap;
+
+    /**
+     * @param request
+     */
+    public MicroslingSlingHttpServletRequest(HttpServletRequest request,
+            Session session, ServiceLocator serviceLocator)
+            throws SlingException {
+        super(request);
+
+        this.requestProgressTracker = new MicroslingRequestProgressTracker();
+        this.serviceLocator = serviceLocator;
+        this.resourceResolver = new MicroslingResourceResolver(session);
+        this.resource = resourceResolver.resolve(request);
+        this.requestPathInfo = new MicroslingRequestPathInfo(resource,
+            request.getPathInfo());
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.apache.sling.api.SlingHttpServletRequest#getCookie(java.lang.String)
+     */
+    public Cookie getCookie(String name) {
+        Cookie[] cookies = getCookies();
+        for (int i = 0; cookies != null && i < cookies.length; i++) {
+            if (name.equals(cookies[i].getName())) {
+                return cookies[i];
+            }
+        }
+        return null;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.apache.sling.api.SlingHttpServletRequest#getRequestDispatcher(org.apache.sling.api.resource.Resource,
+     *      org.apache.sling.api.request.RequestDispatcherOptions)
+     */
+    public RequestDispatcher getRequestDispatcher(Resource resource,
+            RequestDispatcherOptions options) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.apache.sling.api.SlingHttpServletRequest#getRequestDispatcher(org.apache.sling.api.resource.Resource)
+     */
+    public RequestDispatcher getRequestDispatcher(Resource resource) {
+        return getRequestDispatcher(resource, null);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.apache.sling.api.SlingHttpServletRequest#getRequestParameter(java.lang.String)
+     */
+    public RequestParameter getRequestParameter(String name) {
+        return getRequestParameterMap().getValue(name);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.apache.sling.api.SlingHttpServletRequest#getRequestParameterMap()
+     */
+    public RequestParameterMap getRequestParameterMap() {
+        if (requestParameterMap == null) {
+            requestParameterMap = new SlingRequestParameterMap(this);
+        }
+        return requestParameterMap;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.apache.sling.api.SlingHttpServletRequest#getRequestParameters(java.lang.String)
+     */
+    public RequestParameter[] getRequestParameters(String name) {
+        return getRequestParameterMap().getValues(name);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.apache.sling.api.SlingHttpServletRequest#getRequestPathInfo()
+     */
+    public RequestPathInfo getRequestPathInfo() {
+        return requestPathInfo;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.apache.sling.api.SlingHttpServletRequest#getRequestProgressTracker()
+     */
+    public RequestProgressTracker getRequestProgressTracker() {
+        return requestProgressTracker;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.apache.sling.api.SlingHttpServletRequest#getResource()
+     */
+    public Resource getResource() {
+        return resource;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.apache.sling.api.SlingHttpServletRequest#getResourceBundle(java.util.Locale)
+     */
+    public ResourceBundle getResourceBundle(Locale locale) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.apache.sling.api.SlingHttpServletRequest#getResourceResolver()
+     */
+    public ResourceResolver getResourceResolver() {
+        return resourceResolver;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.apache.sling.api.SlingHttpServletRequest#getResponseContentType()
+     */
+    public String getResponseContentType() {
+        return null;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.apache.sling.api.SlingHttpServletRequest#getResponseContentTypes()
+     */
+    public Enumeration<String> getResponseContentTypes() {
+        List<String> s = Collections.emptyList();
+        return Collections.enumeration(s);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.apache.sling.api.SlingHttpServletRequest#getServiceLocator()
+     */
+    public ServiceLocator getServiceLocator() {
+        return serviceLocator;
+    }
+}

Propchange: incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/MicroslingSlingHttpServletRequest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/MicroslingSlingHttpServletResponse.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/MicroslingSlingHttpServletResponse.java?rev=590999&view=auto
==============================================================================
--- incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/MicroslingSlingHttpServletResponse.java (added)
+++ incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/MicroslingSlingHttpServletResponse.java Thu Nov  1 06:30:00 2007
@@ -0,0 +1,33 @@
+/*
+ * 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.microsling;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+
+import org.apache.sling.api.SlingHttpServletResponse;
+
+public class MicroslingSlingHttpServletResponse extends
+        HttpServletResponseWrapper implements SlingHttpServletResponse {
+
+    public MicroslingSlingHttpServletResponse(HttpServletResponse response) {
+        super(response);
+    }
+
+}

Propchange: incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/MicroslingSlingHttpServletResponse.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/contenttype/ResponseContentTypeResolverFilter.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/contenttype/ResponseContentTypeResolverFilter.java?rev=590999&view=auto
==============================================================================
--- incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/contenttype/ResponseContentTypeResolverFilter.java (added)
+++ incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/contenttype/ResponseContentTypeResolverFilter.java Thu Nov  1 06:30:00 2007
@@ -0,0 +1,67 @@
+package org.apache.sling.microsling.contenttype;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.wrappers.SlingHttpServletRequestWrapper;
+import org.apache.sling.microsling.request.helpers.AbstractFilter;
+
+public class ResponseContentTypeResolverFilter extends AbstractFilter {
+
+    // TODO: Is text/plain ok or should this rather be text/html ??
+    private static final String DEFAULT_RESPONSE_CONTENT_TYPE = "text/plain";
+
+    @Override
+    protected void init() {
+        // no further initialization
+    }
+
+    public void doFilter(HttpServletRequest request,
+            HttpServletResponse response, FilterChain filterChain)
+            throws IOException, ServletException {
+
+        request = new ContentTypedRequest((SlingHttpServletRequest) request);
+        filterChain.doFilter(request, response);
+
+    }
+
+    private class ContentTypedRequest extends SlingHttpServletRequestWrapper {
+
+        private String responseContentType;
+
+        ContentTypedRequest(SlingHttpServletRequest request) {
+            super(request);
+        }
+
+        @Override
+        public String getResponseContentType() {
+            if (responseContentType == null) {
+                String file = "dummy."
+                    + getSlingRequest().getRequestPathInfo().getExtension();
+                final String contentType = getFilterConfig().getServletContext().getMimeType(
+                    file);
+                if (contentType != null) {
+                    responseContentType = contentType;
+                } else {
+                    responseContentType = DEFAULT_RESPONSE_CONTENT_TYPE;
+                }
+            }
+
+            return responseContentType;
+        }
+
+        @Override
+        public Enumeration<String> getResponseContentTypes() {
+            Collection<String> c = Collections.singleton(getResponseContentType());
+            return Collections.enumeration(c);
+        }
+    }
+}

Propchange: incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/contenttype/ResponseContentTypeResolverFilter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/helpers/constants/HttpConstants.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/helpers/constants/HttpConstants.java?rev=590999&view=auto
==============================================================================
--- incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/helpers/constants/HttpConstants.java (added)
+++ incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/helpers/constants/HttpConstants.java Thu Nov  1 06:30:00 2007
@@ -0,0 +1,33 @@
+/*
+ * 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.microsling.helpers.constants;
+
+/** HTTP-related constants */
+public interface HttpConstants {
+    public static final String METHOD_OPTIONS = "OPTIONS";
+    public static final String METHOD_GET = "GET";
+    public static final String METHOD_HEAD = "HEAD";
+    public static final String METHOD_POST = "POST";
+    public static final String METHOD_PUT = "PUT";
+    public static final String METHOD_DELETE = "DELETE";
+    public static final String METHOD_TRACE = "TRACE";
+    public static final String METHOD_CONNECT = "CONNECT";
+
+    public static final String HEADER_IF_MODIFIED_SINCE = "If-Modified-Since";
+    public static final String HEADER_LAST_MODIFIED = "Last-Modified";
+
+}

Propchange: incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/helpers/constants/HttpConstants.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/helpers/exceptions/MissingRequestAttributeException.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/helpers/exceptions/MissingRequestAttributeException.java?rev=590999&view=auto
==============================================================================
--- incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/helpers/exceptions/MissingRequestAttributeException.java (added)
+++ incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/helpers/exceptions/MissingRequestAttributeException.java Thu Nov  1 06:30:00 2007
@@ -0,0 +1,12 @@
+package org.apache.sling.microsling.helpers.exceptions;
+
+import org.apache.sling.api.SlingException;
+
+/** Indicates a missing Request attribute */
+public class MissingRequestAttributeException extends SlingException {
+    private static final long serialVersionUID = 1L;
+
+    public MissingRequestAttributeException(String attributeName) {
+        super("Missing request attribute '" + attributeName + "'");
+    }
+}

Propchange: incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/helpers/exceptions/MissingRequestAttributeException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/request/helpers/AbstractFilter.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/request/helpers/AbstractFilter.java?rev=590999&view=auto
==============================================================================
--- incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/request/helpers/AbstractFilter.java (added)
+++ incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/request/helpers/AbstractFilter.java Thu Nov  1 06:30:00 2007
@@ -0,0 +1,129 @@
+/*
+ * 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.microsling.request.helpers;
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * The <code>AbstractFilter</code> is a basic abstract implementation of the
+ * <code>javax.servlet.Filter</code> interface.
+ */
+public abstract class AbstractFilter implements Filter {
+
+    private FilterConfig filterConfig;
+
+    /**
+     * Default implementation of filter initialization keeping the filter
+     * configuration made available through the {@link #getFilterConfig()}
+     * method and calls the {@link #init()} method.
+     * <p>
+     * Implementations should not overwrite this method but rather implement
+     * their initialization in the {@link #init()} method.
+     *
+     * @param filterConfig The filter configuration
+     * @throws ServletException forwarded from calling the {@link #init()}
+     *             method.
+     */
+    public void init(FilterConfig filterConfig) throws ServletException {
+        this.filterConfig = filterConfig;
+
+        init();
+    }
+
+    /**
+     * Further initialization by the implementation of this class.
+     *
+     * @throws ServletException may be thrown if an error occurrs initializing
+     *             the filter.
+     */
+    protected abstract void init() throws ServletException;
+
+    /**
+     * Calls the
+     * {@link #doFilter(HttpServletRequest, HttpServletResponse, FilterChain)}
+     * method casting the <code>request</code> and <code>response</code>
+     * objects to the respective HTTP request and response objects. In case of a
+     * non-http request and/or response a <code>ServletException</code> is
+     * thrown.
+     *
+     * @param request The servlet request
+     * @param response The servlet response
+     * @param filterChain The filter chain to which processing is to be handed.
+     * @throws IOException forwarded from calling the
+     *             {@link #doFilter(HttpServletRequest, HttpServletResponse, FilterChain)}
+     *             method
+     * @throws ServletException if <code>request</code> and/or
+     *             <code>response</code> is not a HTTP request or response or
+     *             forwarded from calling the
+     *             {@link #doFilter(HttpServletRequest, HttpServletResponse, FilterChain)}
+     *             method.
+     */
+    public void doFilter(ServletRequest request, ServletResponse response,
+            FilterChain filterChain) throws IOException, ServletException {
+
+        try {
+            HttpServletRequest req = (HttpServletRequest) request;
+            HttpServletResponse res = (HttpServletResponse) response;
+            doFilter(req, res, filterChain);
+        } catch (ClassCastException cce) {
+            throw new ServletException("HTTP Requests supported only");
+        }
+    }
+
+    /**
+     * Called by the
+     * {@link #doFilter(ServletRequest, ServletResponse, FilterChain)} method
+     * for HTTP requests.
+     *
+     * @param request The HTTP servlet request
+     * @param response The HTTP servlet response
+     * @param filterChain The filter chain to which processing is to be handed.
+     * @throws IOException may be thrown in case of an Input/Output problem
+     * @throws ServletException may be thrown in case of any other servlet
+     *             processing issue.
+     */
+    protected abstract void doFilter(HttpServletRequest request,
+            HttpServletResponse response, FilterChain filterChain)
+            throws IOException, ServletException;
+
+    /**
+     * This default implementation does nothing. Implementations of this class
+     * may overwrite but should for stability reasons call this base class
+     * implementation.
+     */
+    public void destroy() {
+    }
+
+    /**
+     * Returns the <code>FilterConfig</code> with which this filter has been
+     * initialized.
+     */
+    protected FilterConfig getFilterConfig() {
+        return filterConfig;
+    }
+}

Propchange: incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/request/helpers/AbstractFilter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/request/helpers/MicroslingRequestPathInfo.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/request/helpers/MicroslingRequestPathInfo.java?rev=590999&view=auto
==============================================================================
--- incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/request/helpers/MicroslingRequestPathInfo.java (added)
+++ incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/request/helpers/MicroslingRequestPathInfo.java Thu Nov  1 06:30:00 2007
@@ -0,0 +1,120 @@
+/*
+ * 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.microsling.request.helpers;
+
+import org.apache.sling.api.request.RequestPathInfo;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceMetadata;
+
+/**
+ * microsling request URI parser that provides SlingRequestPathInfo for the
+ * current request, based on the path of the Resource. The values provided by
+ * this depend on the Resource.getURI() value, as the ResourceResolver might use
+ * all or only part of the request URI path to locate the resource (see also
+ * SLING-60 ). What we're after is the remainder of the path, the part that was
+ * not used to locate the Resource, and we split that part in different
+ * subparts: selectors, extension and suffix.
+ *
+ * @see MicroslingRequestPathInfoTest for a number of examples.
+ */
+public class MicroslingRequestPathInfo implements RequestPathInfo {
+
+    private final String selectorString;
+
+    private final String[] selectors;
+
+    private final String extension;
+
+    private final String suffix;
+
+    private final String resourcePath;
+
+    private final static String EMPTY = "";
+
+    /** break requestPath as required by SlingRequestPathInfo */
+    public MicroslingRequestPathInfo(Resource r, String requestPath) {
+
+        // ensure the resource
+        if (r == null) {
+            throw new NullPointerException("resource");
+        }
+
+        String pathToParse = requestPath;
+        if (pathToParse == null) {
+            pathToParse = "";
+        }
+
+        resourcePath = (String) r.getResourceMetadata().get(
+            ResourceMetadata.RESOLUTION_PATH);
+        if (resourcePath != null && !"/".equals(resourcePath)
+            && pathToParse.length() >= resourcePath.length()) {
+            pathToParse = pathToParse.substring(resourcePath.length());
+        }
+
+        // separate selectors/ext from the suffix
+        int firstSlash = pathToParse.indexOf('/');
+        String pathToSplit;
+        if (firstSlash < 0) {
+            pathToSplit = pathToParse;
+            suffix = EMPTY;
+        } else {
+            pathToSplit = pathToParse.substring(0, firstSlash);
+            suffix = pathToParse.substring(firstSlash);
+        }
+
+        int lastDot = pathToSplit.lastIndexOf('.');
+        if (lastDot <= 0) {
+            // negative if pathToSplit is empty (in case all is suffix)
+            // zero if pathToSplit just contains the extension
+            selectorString = EMPTY;
+            selectors = new String[0];
+            extension = pathToSplit.substring(lastDot+1);
+        } else {
+            // assume the string to start with a dot
+            selectorString = pathToSplit.substring(1, lastDot);
+            selectors = selectorString.split("\\.");
+            extension = pathToSplit.substring(lastDot + 1);
+        }
+    }
+
+    @Override
+    public String toString() {
+        return "SlingRequestPathInfoParser:" + ", path='" + resourcePath + "'"
+            + ", selectorString='" + selectorString + "'" + ", extension='"
+            + extension + "'" + ", suffix='" + suffix + "'";
+    }
+
+    public String getExtension() {
+        return extension;
+    }
+
+    public String[] getSelectors() {
+        return selectors;
+    }
+
+    public String getSelectorString() {
+        return selectorString;
+    }
+
+    public String getSuffix() {
+        return suffix;
+    }
+
+    public String getResourcePath() {
+        return resourcePath;
+    }
+}

Propchange: incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/request/helpers/MicroslingRequestPathInfo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/request/helpers/MicroslingRequestProgressTracker.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/request/helpers/MicroslingRequestProgressTracker.java?rev=590999&view=auto
==============================================================================
--- incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/request/helpers/MicroslingRequestProgressTracker.java (added)
+++ incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/request/helpers/MicroslingRequestProgressTracker.java Thu Nov  1 06:30:00 2007
@@ -0,0 +1,258 @@
+/*
+ * 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.microsling.request.helpers;
+
+import java.io.PrintWriter;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.sling.api.request.RequestProgressTracker;
+
+/**
+ * The <code>MicroslingRequestProgressTracker</code> class provides the
+ * functionality to track the progress of request processing. Instances of this
+ * class are provided through the
+ * {@link org.apache.sling.api.SlingHttpServletRequest#getRequestProgressTracker()}
+ * method.
+ * <p>
+ * The following functionality is provided:
+ * <ol>
+ * <li>Track the progress of request processing through the
+ * {@link #log(String)} and {@link #log(String, String)} methods.
+ * <li>Ability to measure and track processing times of parts of request
+ * processing through the {@link #startTimer(String)} and
+ * {@link #checkTimer(String)} methods.
+ * <li>Dumping the recording messages through the
+ * {@link #dumpText(PrintWriter)} method.
+ * <li>Resetting the tracker through the {@link #reset()} method.
+ * </ol>
+ * <p>
+ * <b>Tracking Request Processing</b>
+ * <p>
+ * As the request being processed, certain steps may be tracked by calling
+ * either of the <code>log</code> methods. A tracking entry consists of a time
+ * stamp managed by this class, a tracking message noting the actual step being
+ * tracked and an optional tracking tag. The value of the tracking tag depends
+ * on the application and defaults to {@link #TAG_CHECK} if not specified.
+ * <p>
+ * <b>Timing Processing Steps</b>
+ * </p>
+ * Certain steps during request processing may need to be timed in that the time
+ * required for processing should be recorded. Instances of this class maintain
+ * a map of named timers. Each timer is started (initialized or reset) by
+ * calling the {@link #startTimer(String)} method. This method just records the
+ * starting time of the named timer and adds a tracking entry with the timer
+ * name as the message and the tracking tag {@link #TAG_START}.
+ * <p>
+ * To record the number of milliseconds ellapsed since a timer has been started,
+ * the {@link #checkTimer(String)} method may be called. This method logs s
+ * tracking entry with the tracking tag {@link #TAG_CHECK} and a message
+ * consisting of the name of the timer and the number of milliseconds ellapsed
+ * since the timer was last {@link #startTimer(String) started}. The
+ * {@link #checkTimer(String)} method may be called multiple times to record
+ * several timed steps.
+ * <p>
+ * Calling the {@link #startTimer(String)} method with the name of timer which
+ * already exists, resets the start time of the named timer to the current
+ * system time.
+ * <p>
+ * <b>Dumping Tracking Entries</b>
+ * <p>
+ * The {@link #dumpText(PrintWriter)} methods adds a tracking entry with tag
+ * {@link #TAG_CHECK} and writes all tracking entries to the given
+ * <code>PrintWriter</code>. Each entry is written on a single line
+ * consisting of the following fields:
+ * <ol>
+ * <li>The number of milliseconds since the last {@link #reset()} (or creation)
+ * of this timer.
+ * <li>The absolute time of the timer in parenthesis.
+ * <li>The timer tag enclosed in stars (*)
+ * <li>The entry message
+ * </ol>
+ */
+public class MicroslingRequestProgressTracker implements RequestProgressTracker {
+
+    /**
+     * The <em>printf</em> format to dump a tracking line.
+     *
+     * @see #dumpText(PrintWriter)
+     */
+    private static final String DUMP_FORMAT = "%1$7d (%2$tF %2$tT) %3$s%n";
+
+    /**
+     * The system time at creation of this instance or the last {@link #reset()}.
+     */
+    private long processingStart;
+
+    /**
+     * The list of tracking entries.
+     */
+    private final List<TrackingEntry> entries = new ArrayList<TrackingEntry>();
+
+    /**
+     * Map of named timers indexed by timer name storing the sytsem time of
+     * start of the respective timer.
+     */
+    private final Map<String, Long> namedTimerEntries = new HashMap<String, Long>();
+
+    /**
+     * Creates a new request progress tracker.
+     */
+    public MicroslingRequestProgressTracker() {
+        reset();
+    }
+
+    /**
+     * Resets this timer by removing all current entries and timers and adds an
+     * initial timer entry
+     */
+    public void reset() {
+        // remove all entries
+        entries.clear();
+        namedTimerEntries.clear();
+
+        // enter start message
+        processingStart = System.currentTimeMillis();
+        log(processingStart, "Starting Request Processing");
+    }
+
+    public Iterator<String> getMessages() {
+        return new Iterator<String>() {
+            private final Iterator<TrackingEntry> entryIter = entries.iterator();
+
+            public boolean hasNext() {
+                return entryIter.hasNext();
+            }
+
+            public String next() {
+                // throws NoSuchElementException if no entries any more
+                TrackingEntry entry = entryIter.next();
+
+                long offset = entry.getTimeStamp() - processingStart;
+                return String.format(DUMP_FORMAT, offset, entry.getTimeStamp(),
+                    entry.getMessage());
+            }
+
+            public void remove() {
+                throw new UnsupportedOperationException("remove");
+            }
+        };
+    }
+
+    /**
+     * Dumps the process timer entries to the given writer, one entry per line.
+     * See the class comments for the rough format of each message line.
+     */
+    public void dump(PrintWriter writer) {
+        log("Dumping MicroslingRequestProgressTracker Entries");
+
+        Iterator<String> messages = getMessages();
+        while (messages.hasNext()) {
+            writer.print(messages.next());
+        }
+    }
+
+    /** Creates an entry with the given message and entry tag {@link #TAG_CHECK} */
+    public void log(String message) {
+        entries.add(new TrackingEntry(message));
+    }
+
+    /** Creates an entry with the given entry tag and message */
+    public void log(String format, Object... args) {
+        String message = MessageFormat.format(format, args);
+        entries.add(new TrackingEntry(message));
+    }
+
+    /**
+     * Creates an entry with the given time, entry tag and message. This is a
+     * private method, as for users of this API time stamps are managed by this
+     * class. For internal uses the timestamp may be generated outside of this
+     * method.
+     */
+    private void log(long timeStamp, String message) {
+        entries.add(new TrackingEntry(timeStamp, message));
+    }
+
+    /**
+     * Starts a named timer. If a timer of the same name already exists, it is
+     * reset to the current time.
+     */
+    public void startTimer(String name) {
+        long timer = System.currentTimeMillis();
+        namedTimerEntries.put(name, timer);
+
+        log(timer, "Starting " + name);
+    }
+
+    /**
+     * Logs an entry with entry tag {@link #TAG_CHECK} and the message set to
+     * the name of the timer and the number of milliseconds ellapsed since the
+     * timer start.
+     */
+    public void logTimer(String name) {
+        if (namedTimerEntries.containsKey(name)) {
+            long timer = namedTimerEntries.get(name);
+            long currentTime = System.currentTimeMillis();
+            log(currentTime, name + ", elapsed = " + (currentTime - timer)
+                + "ms");
+        }
+    }
+
+    public void logTimer(String name, String format, Object... args) {
+        if (namedTimerEntries.containsKey(name)) {
+            long timer = namedTimerEntries.get(name);
+            long currentTime = System.currentTimeMillis();
+            String message = MessageFormat.format(format, args);
+            log(currentTime, message + ", elapsed = " + (currentTime - timer)
+                + "ms");
+        }
+    }
+
+    /** Process tracker entry keeping timestamp, tag and message */
+    private static class TrackingEntry {
+
+        // creation time stamp
+        private final long timeStamp;
+
+        // tracking message
+        private final String message;
+
+        TrackingEntry(String message) {
+            this.timeStamp = System.currentTimeMillis();
+            this.message = message;
+        }
+
+        TrackingEntry(long timeStamp, String message) {
+            this.timeStamp = timeStamp;
+            this.message = message;
+        }
+
+        long getTimeStamp() {
+            return timeStamp;
+        }
+
+        String getMessage() {
+            return message;
+        }
+    }
+}

Propchange: incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/request/helpers/MicroslingRequestProgressTracker.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/request/helpers/SlingRequestParameterMap.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/request/helpers/SlingRequestParameterMap.java?rev=590999&view=auto
==============================================================================
--- incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/request/helpers/SlingRequestParameterMap.java (added)
+++ incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/request/helpers/SlingRequestParameterMap.java Thu Nov  1 06:30:00 2007
@@ -0,0 +1,119 @@
+/*
+ * 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.microsling.request.helpers;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.sling.api.request.RequestParameter;
+import org.apache.sling.api.request.RequestParameterMap;
+
+/**
+ * The <code>SlingRequestParameterMap</code> implements the
+ * <code>RequestParameterMap</code> map interface simply containing all
+ * request parameters as <code>RequestParameter</code> instances.
+ */
+public class SlingRequestParameterMap extends
+        HashMap<String, RequestParameter[]> implements RequestParameterMap {
+
+    /** Create from the HTTP request parameters */
+    public SlingRequestParameterMap(HttpServletRequest request) {
+        Map<?, ?> parameters = request.getParameterMap();
+        for (Map.Entry<?, ?> entry : parameters.entrySet()) {
+            String[] values = (String[]) entry.getValue();
+            RequestParameter[] rpValues = new RequestParameter[values.length];
+            for (int i = 0; i < values.length; i++) {
+                rpValues[i] = new SimpleRequestParameter(values[i]);
+            }
+            put((String) entry.getKey(), rpValues);
+        }
+    }
+
+    public RequestParameter[] getValues(String name) {
+        return get(name);
+    }
+
+    public RequestParameter getValue(String name) {
+        RequestParameter[] values = get(name);
+        return (values != null && values.length > 0) ? values[0] : null;
+    }
+
+    /** Simple implementation of the RequestParameter interface */
+    private static class SimpleRequestParameter implements RequestParameter {
+
+        private String value;
+
+        private byte[] cachedBytes;
+
+        SimpleRequestParameter(String value) {
+            this.value = value;
+        }
+
+        /**
+         * Convert the parameter string value to a byte[] using ISO-8859-1
+         * encoding, which is assumed to be the default for parameters
+         */
+        public byte[] get() {
+            if (cachedBytes == null) {
+                try {
+                    cachedBytes = getString().getBytes("ISO-88591-1");
+                } catch (UnsupportedEncodingException uee) {
+                    // don't care, fall back to platform default
+                    // actually, this is not expected as ISO-8859-1 is required
+                    cachedBytes = getString().getBytes();
+                }
+            }
+            return cachedBytes;
+        }
+
+        public String getContentType() {
+            return null;
+        }
+
+        public String getFileName() {
+            return null;
+        }
+
+        public InputStream getInputStream() {
+            return new ByteArrayInputStream(get());
+        }
+
+        public long getSize() {
+            return get().length;
+        }
+
+        public String getString() {
+            return value;
+        }
+
+        public String getString(String encoding) {
+            return value;
+        }
+
+        public boolean isFormField() {
+            return true;
+        }
+
+    }
+}

Propchange: incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/request/helpers/SlingRequestParameterMap.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/resource/JcrNodeResource.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/resource/JcrNodeResource.java?rev=590999&view=auto
==============================================================================
--- incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/resource/JcrNodeResource.java (added)
+++ incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/resource/JcrNodeResource.java Thu Nov  1 06:30:00 2007
@@ -0,0 +1,106 @@
+/*
+ * 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.microsling.resource;
+
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceMetadata;
+
+/** A Resource that wraps a JCR Node */
+class JcrNodeResource implements Resource {
+    private final Node node;
+    private final String path;
+    private final String resourceType;
+    private Object object;
+    private final ResourceMetadata metadata;
+
+    /** JCR Property that defines the resource type of this node
+     *  (TODO: use a sling:namespaced property name)
+     */
+    public static final String SLING_RESOURCE_TYPE_PROPERTY = "slingResourceType";
+
+    public static final String NODE_TYPE_RT_PREFIX = "NODETYPES/";
+
+    JcrNodeResource(javax.jcr.Session s,String path) throws RepositoryException {
+        node = (Node)s.getItem(path);
+        this.path = node.getPath();
+        metadata = new MicroslingResourceMetadata();
+        resourceType = getResourceTypeForNode(node);
+    }
+
+    JcrNodeResource(Node node) throws RepositoryException {
+        this.node = node;
+        this.path = node.getPath();
+        metadata = new MicroslingResourceMetadata();
+        metadata.put(ResourceMetadata.RESOLUTION_PATH, path);
+        resourceType = getResourceTypeForNode(node);
+    }
+
+    public void setObject(Object object) {
+        this.object = object;
+    }
+
+    public String toString() {
+        return "JcrNodeResource, type=" + resourceType + ", path=" + path;
+    }
+
+    public Object getRawData() {
+        return node;
+    }
+
+    public String getURI() {
+        return path;
+    }
+
+    public String getResourceType() {
+        return resourceType;
+    }
+
+    // no object mapping yet
+    public Object getObject() {
+        return object;
+    }
+
+    public ResourceMetadata getResourceMetadata() {
+        return metadata;
+    }
+
+    /** Compute the resource type of the given node, using either the SLING_RESOURCE_TYPE_PROPERTY,
+     *  or the node's primary type, if the property is not set
+     */
+    public static String getResourceTypeForNode(Node node) throws RepositoryException {
+        String result = null;
+
+        if(node.hasProperty(SLING_RESOURCE_TYPE_PROPERTY)) {
+            result = node.getProperty(SLING_RESOURCE_TYPE_PROPERTY).getValue().getString().toLowerCase().trim();
+        }
+
+        if(result==null || result.length() == 0) {
+            result = NODE_TYPE_RT_PREFIX + filterName(node.getPrimaryNodeType().getName());
+        }
+
+        return result;
+    }
+
+    /** Filter a node type name so that it can be used in a resource type value */
+    public static String filterName(String name) {
+        return name.toLowerCase().replaceAll("\\:","/");
+    }
+}

Propchange: incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/resource/JcrNodeResource.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/resource/MicroslingResourceMetadata.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/resource/MicroslingResourceMetadata.java?rev=590999&view=auto
==============================================================================
--- incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/resource/MicroslingResourceMetadata.java (added)
+++ incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/resource/MicroslingResourceMetadata.java Thu Nov  1 06:30:00 2007
@@ -0,0 +1,28 @@
+/*
+ * 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.microsling.resource;
+
+import java.util.HashMap;
+
+import org.apache.sling.api.resource.ResourceMetadata;
+
+/** Simple implementation of the ResourceMetadata interface using a HashMap */
+class MicroslingResourceMetadata extends HashMap<String, Object> implements
+        ResourceMetadata {
+}
\ No newline at end of file

Propchange: incubator/sling/trunk/microsling/microsling-core/src/main/java/org/apache/sling/microsling/resource/MicroslingResourceMetadata.java
------------------------------------------------------------------------------
    svn:eol-style = native



Mime
View raw message