You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by fm...@apache.org on 2014/01/20 11:40:08 UTC
svn commit: r1559665 [1/2] - in /sling/whiteboard/fmeschbe/parameters:
engine/ engine/src/main/java/org/apache/sling/engine/impl/
engine/src/main/java/org/apache/sling/engine/impl/adapter/
engine/src/main/java/org/apache/sling/engine/impl/helper/ engin...
Author: fmeschbe
Date: Mon Jan 20 10:40:07 2014
New Revision: 1559665
URL: http://svn.apache.org/r1559665
Log:
Request Parameter Support prototype
- Create new parameters bundle
- Move parameters package (inkl tests) from engine to parameters
- Extract ParameterSupport API from ParameterSupport class
- Update to Servlet API 3.0
(still need to check on whether and how to deploy on
Servlet API 2.5 platform)
- Add support to get list of request parameter name-value pairs
in order declared in the query string (first) and POST
body (for both URL encoded and Multipart POSTs)
- Decode query and URL encoded POST parameters in Util class
to have the correct parameter order preserved
Added:
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/engine/
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/engine/impl/
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/engine/impl/parameters/
- copied from r1559659, sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/ParameterEntry.java (with props)
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/ParameterSupport.java (with props)
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/SlingUnsupportedEncodingException.java
- copied, changed from r1559659, sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/SlingUnsupportedEncodingException.java
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/AbstractRequestParameter.java
- copied, changed from r1559659, sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/AbstractRequestParameter.java
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ContainerRequestParameter.java
- copied, changed from r1559659, sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/ContainerRequestParameter.java
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/MultipartRequestParameter.java
- copied, changed from r1559659, sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/MultipartRequestParameter.java
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ParameterEntryImpl.java (with props)
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ParameterMap.java
- copied, changed from r1559659, sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterMap.java
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ParameterSupportImpl.java
- copied, changed from r1559659, sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupport.java
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/SlingPart.java (with props)
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/Util.java
- copied, changed from r1559659, sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/Util.java
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/package-info.java (with props)
sling/whiteboard/fmeschbe/parameters/parameters/src/test/java/org/apache/sling/parameters/
sling/whiteboard/fmeschbe/parameters/parameters/src/test/java/org/apache/sling/parameters/impl/
- copied from r1559659, sling/whiteboard/fmeschbe/parameters/engine/src/test/java/org/apache/sling/engine/impl/parameters/
Removed:
sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/
sling/whiteboard/fmeschbe/parameters/engine/src/test/java/org/apache/sling/engine/impl/parameters/
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/engine/impl/parameters/AbstractRequestParameter.java
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/engine/impl/parameters/ContainerRequestParameter.java
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/engine/impl/parameters/MultipartRequestParameter.java
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/engine/impl/parameters/ParameterMap.java
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupport.java
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/engine/impl/parameters/SlingUnsupportedEncodingException.java
sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/engine/impl/parameters/Util.java
Modified:
sling/whiteboard/fmeschbe/parameters/engine/pom.xml
sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpContext.java
sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpServletRequestImpl.java
sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java
sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/adapter/SlingServletRequestAdapter.java
sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/helper/ExternalServletContextWrapper.java
sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/helper/SlingFilterConfig.java
sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/helper/SlingServletContext.java
sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/log/CustomLogFormat.java
sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/log/RequestLoggerResponse.java
sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/request/RequestData.java
sling/whiteboard/fmeschbe/parameters/parameters/src/test/java/org/apache/sling/parameters/impl/ContainerRequestParameterTest.java
sling/whiteboard/fmeschbe/parameters/parameters/src/test/java/org/apache/sling/parameters/impl/UtilTest.java
Modified: sling/whiteboard/fmeschbe/parameters/engine/pom.xml
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/engine/pom.xml?rev=1559665&r1=1559664&r2=1559665&view=diff
==============================================================================
--- sling/whiteboard/fmeschbe/parameters/engine/pom.xml (original)
+++ sling/whiteboard/fmeschbe/parameters/engine/pom.xml Mon Jan 20 10:40:07 2014
@@ -60,21 +60,16 @@
<configuration>
<instructions>
<Export-Package>
- org.apache.sling.engine;version=2.1,
- org.apache.sling.engine.servlets;version=2.0.6,
- org.apache.sling.engine.jmx;version=1.0
+ org.apache.sling.engine;version=2.1;provide:=true,
+ org.apache.sling.engine.servlets;version=2.0.6;provide:=true,
+ org.apache.sling.engine.jmx;version=1.0;provide:=true
</Export-Package>
<Private-Package>
org.apache.sling.engine.impl,
org.apache.sling.engine.impl.*
</Private-Package>
<Import-Package>
- org.apache.commons.fileupload;version=1.2,
- org.apache.commons.fileupload.disk;version=1.2,
- org.apache.commons.fileupload.portlet;version=1.2,
- org.apache.commons.fileupload.servlet;version=1.2,
org.osgi.service.useradmin;
- javax.portlet;
org.apache.commons.math.*;resolution:=optional,
*
</Import-Package>
@@ -105,6 +100,12 @@
</dependency>
<dependency>
<groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.parameters</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.settings</artifactId>
<version>1.0.0</version>
<scope>provided</scope>
@@ -133,18 +134,6 @@
<version>2.5</version>
</dependency>
<dependency>
- <groupId>commons-collections</groupId>
- <artifactId>commons-collections</artifactId>
- <version>3.2.1</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>commons-fileupload</groupId>
- <artifactId>commons-fileupload</artifactId>
- <version>1.2.2</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
</dependency>
Modified: sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpContext.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpContext.java?rev=1559665&r1=1559664&r2=1559665&view=diff
==============================================================================
--- sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpContext.java (original)
+++ sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpContext.java Mon Jan 20 10:40:07 2014
@@ -20,16 +20,13 @@ package org.apache.sling.engine.impl;
import java.io.IOException;
import java.net.URL;
-import java.util.Enumeration;
-import java.util.Map;
import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import org.apache.sling.auth.core.AuthenticationSupport;
import org.apache.sling.commons.mime.MimeTypeService;
-import org.apache.sling.engine.impl.parameters.ParameterSupport;
+import org.apache.sling.parameters.ParameterSupport;
import org.osgi.service.http.HttpContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -118,32 +115,8 @@ class SlingHttpContext implements HttpCo
if (authenticator != null) {
// SLING-559: ensure correct parameter handling according to
- // ParameterSupport
- request = new HttpServletRequestWrapper(request) {
- @Override
- public String getParameter(String name) {
- return getParameterSupport().getParameter(name);
- }
-
- @Override
- public Map<String, String[]> getParameterMap() {
- return getParameterSupport().getParameterMap();
- }
-
- @Override
- public Enumeration<String> getParameterNames() {
- return getParameterSupport().getParameterNames();
- }
-
- @Override
- public String[] getParameterValues(String name) {
- return getParameterSupport().getParameterValues(name);
- }
-
- private ParameterSupport getParameterSupport() {
- return ParameterSupport.getInstance(getRequest());
- }
- };
+ // ParameterSupportImpl
+ request = ParameterSupport.getParameterSupportRequestWrapper(request);
return authenticator.handleSecurity(request, response);
Modified: sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpServletRequestImpl.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpServletRequestImpl.java?rev=1559665&r1=1559664&r2=1559665&view=diff
==============================================================================
--- sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpServletRequestImpl.java (original)
+++ sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/SlingHttpServletRequestImpl.java Mon Jan 20 10:40:07 2014
@@ -24,6 +24,7 @@ import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.security.Principal;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;
@@ -36,6 +37,7 @@ import javax.servlet.ServletInputStream;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
+import javax.servlet.http.Part;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.request.RequestDispatcherOptions;
@@ -46,10 +48,10 @@ import org.apache.sling.api.request.Requ
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.engine.impl.helper.NullResourceBundle;
-import org.apache.sling.engine.impl.parameters.ParameterSupport;
import org.apache.sling.engine.impl.request.ContentData;
import org.apache.sling.engine.impl.request.RequestData;
import org.apache.sling.engine.impl.request.SlingRequestDispatcher;
+import org.apache.sling.parameters.ParameterSupport;
import org.osgi.service.http.HttpContext;
import org.osgi.service.useradmin.Authorization;
@@ -164,6 +166,20 @@ public class SlingHttpServletRequestImpl
}
/**
+ * @see HttpServletRequestWrapper#getPart(String)
+ */
+ public Part getPart(String name) {
+ return this.getParameterSupport().getPart(name);
+ }
+
+ /**
+ * @see HttpServletRequestWrapper#getParts()
+ */
+ public Collection<Part> getParts() {
+ return this.getParameterSupport().getParts();
+ }
+
+ /**
* @see org.apache.sling.api.SlingHttpServletRequest#getRequestParameter(java.lang.String)
*/
public RequestParameter getRequestParameter(String name) {
Modified: sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java?rev=1559665&r1=1559664&r2=1559665&view=diff
==============================================================================
--- sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java (original)
+++ sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java Mon Jan 20 10:40:07 2014
@@ -56,11 +56,11 @@ import org.apache.sling.engine.SlingRequ
import org.apache.sling.engine.impl.filter.ServletFilterManager;
import org.apache.sling.engine.impl.helper.RequestListenerManager;
import org.apache.sling.engine.impl.helper.SlingServletContext;
-import org.apache.sling.engine.impl.parameters.ParameterSupport;
import org.apache.sling.engine.impl.request.RequestData;
import org.apache.sling.engine.impl.request.RequestHistoryConsolePlugin;
import org.apache.sling.engine.jmx.RequestProcessorMBean;
import org.apache.sling.engine.servlets.ErrorHandler;
+import org.apache.sling.parameters.ParameterSupport;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
import org.osgi.framework.ServiceRegistration;
Modified: sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/adapter/SlingServletRequestAdapter.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/adapter/SlingServletRequestAdapter.java?rev=1559665&r1=1559664&r2=1559665&view=diff
==============================================================================
--- sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/adapter/SlingServletRequestAdapter.java (original)
+++ sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/adapter/SlingServletRequestAdapter.java Mon Jan 20 10:40:07 2014
@@ -101,12 +101,12 @@ public class SlingServletRequestAdapter
}
@Override
- public Enumeration<?> getHeaderNames() {
+ public Enumeration<String> getHeaderNames() {
return request.getHeaderNames();
}
@Override
- public Enumeration<?> getHeaders(String name) {
+ public Enumeration<String> getHeaders(String name) {
return request.getHeaders(name);
}
@@ -207,7 +207,7 @@ public class SlingServletRequestAdapter
}
@Override
- public Enumeration<?> getAttributeNames() {
+ public Enumeration<String> getAttributeNames() {
return request.getAttributeNames();
}
@@ -237,7 +237,7 @@ public class SlingServletRequestAdapter
}
@Override
- public Enumeration<?> getLocales() {
+ public Enumeration<Locale> getLocales() {
return request.getLocales();
}
@@ -247,12 +247,12 @@ public class SlingServletRequestAdapter
}
@Override
- public Map<?, ?> getParameterMap() {
+ public Map<String, String[]> getParameterMap() {
return request.getParameterMap();
}
@Override
- public Enumeration<?> getParameterNames() {
+ public Enumeration<String> getParameterNames() {
return request.getParameterNames();
}
Modified: sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/helper/ExternalServletContextWrapper.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/helper/ExternalServletContextWrapper.java?rev=1559665&r1=1559664&r2=1559665&view=diff
==============================================================================
--- sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/helper/ExternalServletContextWrapper.java (original)
+++ sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/helper/ExternalServletContextWrapper.java Mon Jan 20 10:40:07 2014
@@ -21,16 +21,25 @@ import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Enumeration;
+import java.util.EventListener;
+import java.util.Map;
import java.util.Set;
+import javax.servlet.Filter;
+import javax.servlet.FilterRegistration;
import javax.servlet.RequestDispatcher;
import javax.servlet.Servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
+import javax.servlet.ServletRegistration.Dynamic;
import javax.servlet.ServletRequest;
import javax.servlet.ServletRequestWrapper;
import javax.servlet.ServletResponse;
import javax.servlet.ServletResponseWrapper;
+import javax.servlet.SessionCookieConfig;
+import javax.servlet.SessionTrackingMode;
+import javax.servlet.descriptor.JspConfigDescriptor;
import org.apache.sling.engine.impl.SlingHttpServletRequestImpl;
import org.apache.sling.engine.impl.SlingHttpServletResponseImpl;
@@ -201,4 +210,136 @@ class ExternalServletContextWrapper impl
}
+ // New Servlet API 3.0 methods
+
+ public int getEffectiveMajorVersion() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ public int getEffectiveMinorVersion() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ public boolean setInitParameter(String name, String value) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public Dynamic addServlet(String servletName, String className) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Dynamic addServlet(String servletName, Servlet servlet) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Dynamic addServlet(String servletName, Class<? extends Servlet> servletClass) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public <T extends Servlet> T createServlet(Class<T> clazz) throws ServletException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public ServletRegistration getServletRegistration(String servletName) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Map<String, ? extends ServletRegistration> getServletRegistrations() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public javax.servlet.FilterRegistration.Dynamic addFilter(String filterName, String className) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public javax.servlet.FilterRegistration.Dynamic addFilter(String filterName, Filter filter) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public javax.servlet.FilterRegistration.Dynamic addFilter(String filterName, Class<? extends Filter> filterClass) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public <T extends Filter> T createFilter(Class<T> clazz) throws ServletException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public FilterRegistration getFilterRegistration(String filterName) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Map<String, ? extends FilterRegistration> getFilterRegistrations() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public SessionCookieConfig getSessionCookieConfig() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void setSessionTrackingModes(Set<SessionTrackingMode> sessionTrackingModes) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public Set<SessionTrackingMode> getDefaultSessionTrackingModes() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Set<SessionTrackingMode> getEffectiveSessionTrackingModes() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void addListener(String className) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public <T extends EventListener> void addListener(T t) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void addListener(Class<? extends EventListener> listenerClass) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public <T extends EventListener> T createListener(Class<T> clazz) throws ServletException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public JspConfigDescriptor getJspConfigDescriptor() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public ClassLoader getClassLoader() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void declareRoles(String... roleNames) {
+ // TODO Auto-generated method stub
+
+ }
+
}
Modified: sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/helper/SlingFilterConfig.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/helper/SlingFilterConfig.java?rev=1559665&r1=1559664&r2=1559665&view=diff
==============================================================================
--- sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/helper/SlingFilterConfig.java (original)
+++ sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/helper/SlingFilterConfig.java Mon Jan 20 10:40:07 2014
@@ -76,8 +76,8 @@ public class SlingFilterConfig implement
/**
* @see javax.servlet.FilterConfig#getInitParameterNames()
*/
- public Enumeration<?> getInitParameterNames() {
- List<?> keys = Arrays.asList(reference.getPropertyKeys());
+ public Enumeration<String> getInitParameterNames() {
+ List<String> keys = Arrays.asList(reference.getPropertyKeys());
return Collections.enumeration(keys);
}
Modified: sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/helper/SlingServletContext.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/helper/SlingServletContext.java?rev=1559665&r1=1559664&r2=1559665&view=diff
==============================================================================
--- sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/helper/SlingServletContext.java (original)
+++ sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/helper/SlingServletContext.java Mon Jan 20 10:40:07 2014
@@ -24,12 +24,22 @@ import java.net.URL;
import java.util.Collections;
import java.util.Dictionary;
import java.util.Enumeration;
+import java.util.EventListener;
import java.util.Hashtable;
+import java.util.Map;
import java.util.Set;
+import javax.servlet.Filter;
+import javax.servlet.FilterRegistration;
import javax.servlet.RequestDispatcher;
import javax.servlet.Servlet;
import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
+import javax.servlet.ServletRegistration.Dynamic;
+import javax.servlet.SessionCookieConfig;
+import javax.servlet.SessionTrackingMode;
+import javax.servlet.descriptor.JspConfigDescriptor;
import org.apache.sling.engine.impl.SlingMainServlet;
import org.apache.sling.engine.impl.request.SlingRequestDispatcher;
@@ -423,14 +433,14 @@ public class SlingServletContext impleme
/** Returns an empty enumeration as defined in Servlet API 2.4 */
@Deprecated
- public Enumeration<?> getServletNames() {
- return Collections.enumeration(Collections.emptyList());
+ public Enumeration<String> getServletNames() {
+ return Collections.enumeration(Collections.<String>emptyList());
}
/** Returns an empty enumeration as defined in Servlet API 2.4 */
@Deprecated
- public Enumeration<?> getServlets() {
- return Collections.enumeration(Collections.emptyList());
+ public Enumeration<Servlet> getServlets() {
+ return Collections.enumeration(Collections.<Servlet>emptyList());
}
// ---------- internal -----------------------------------------------------
@@ -442,4 +452,136 @@ public class SlingServletContext impleme
private ServletContext getServletContext() {
return slingMainServlet.getServletContext();
}
+
+ // New Servlet API 3.0 methods
+
+ public int getEffectiveMajorVersion() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ public int getEffectiveMinorVersion() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ public boolean setInitParameter(String name, String value) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ public Dynamic addServlet(String servletName, String className) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Dynamic addServlet(String servletName, Servlet servlet) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Dynamic addServlet(String servletName, Class<? extends Servlet> servletClass) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public <T extends Servlet> T createServlet(Class<T> clazz) throws ServletException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public ServletRegistration getServletRegistration(String servletName) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Map<String, ? extends ServletRegistration> getServletRegistrations() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public javax.servlet.FilterRegistration.Dynamic addFilter(String filterName, String className) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public javax.servlet.FilterRegistration.Dynamic addFilter(String filterName, Filter filter) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public javax.servlet.FilterRegistration.Dynamic addFilter(String filterName, Class<? extends Filter> filterClass) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public <T extends Filter> T createFilter(Class<T> clazz) throws ServletException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public FilterRegistration getFilterRegistration(String filterName) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Map<String, ? extends FilterRegistration> getFilterRegistrations() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public SessionCookieConfig getSessionCookieConfig() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void setSessionTrackingModes(Set<SessionTrackingMode> sessionTrackingModes) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public Set<SessionTrackingMode> getDefaultSessionTrackingModes() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public Set<SessionTrackingMode> getEffectiveSessionTrackingModes() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void addListener(String className) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public <T extends EventListener> void addListener(T t) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void addListener(Class<? extends EventListener> listenerClass) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public <T extends EventListener> T createListener(Class<T> clazz) throws ServletException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public JspConfigDescriptor getJspConfigDescriptor() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public ClassLoader getClassLoader() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public void declareRoles(String... roleNames) {
+ // TODO Auto-generated method stub
+
+ }
}
Modified: sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/log/CustomLogFormat.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/log/CustomLogFormat.java?rev=1559665&r1=1559664&r2=1559665&view=diff
==============================================================================
--- sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/log/CustomLogFormat.java (original)
+++ sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/log/CustomLogFormat.java Mon Jan 20 10:40:07 2014
@@ -937,7 +937,7 @@ class CustomLogFormat {
}
protected String getValue(RequestLoggerResponse response) {
- return escape(response.getHeaders(this.headerName));
+ return escape(response.getHeadersString(this.headerName));
}
}
}
Modified: sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/log/RequestLoggerResponse.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/log/RequestLoggerResponse.java?rev=1559665&r1=1559664&r2=1559665&view=diff
==============================================================================
--- sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/log/RequestLoggerResponse.java (original)
+++ sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/log/RequestLoggerResponse.java Mon Jan 20 10:40:07 2014
@@ -271,7 +271,7 @@ class RequestLoggerResponse extends Http
return (this.cookies != null) ? (Cookie) this.cookies.get(name) : null;
}
- public String getHeaders(String name) {
+ public String getHeadersString(String name) {
// normalize header name to lower case to support case-insensitive
// headers
name = name.toLowerCase();
Modified: sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/request/RequestData.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/request/RequestData.java?rev=1559665&r1=1559664&r2=1559665&view=diff
==============================================================================
--- sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/request/RequestData.java (original)
+++ sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/request/RequestData.java Mon Jan 20 10:40:07 2014
@@ -52,7 +52,7 @@ import org.apache.sling.engine.impl.Slin
import org.apache.sling.engine.impl.SlingRequestProcessorImpl;
import org.apache.sling.engine.impl.adapter.SlingServletRequestAdapter;
import org.apache.sling.engine.impl.adapter.SlingServletResponseAdapter;
-import org.apache.sling.engine.impl.parameters.ParameterSupport;
+import org.apache.sling.parameters.ParameterSupport;
/**
* The <code>RequestData</code> class provides access to objects which are set
@@ -108,7 +108,7 @@ public class RequestData {
/** The SlingMainServlet used for request dispatching and other stuff */
private final SlingRequestProcessorImpl slingRequestProcessor;
-
+
private final long startTimestamp;
/** The original servlet Servlet Request Object */
@@ -180,7 +180,7 @@ public class RequestData {
public RequestData(SlingRequestProcessorImpl slingRequestProcessor,
HttpServletRequest request, HttpServletResponse response) {
this.startTimestamp = System.currentTimeMillis();
-
+
this.slingRequestProcessor = slingRequestProcessor;
this.servletRequest = request;
@@ -550,15 +550,15 @@ public class RequestData {
public RequestProgressTracker getRequestProgressTracker() {
return requestProgressTracker;
}
-
+
public int getPeakRecusionDepth() {
return peakRecusionDepth;
}
-
+
public int getServletCallCount() {
return servletCallCounter;
}
-
+
public long getElapsedTimeMsec() {
return System.currentTimeMillis() - startTimestamp;
}
Added: sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/ParameterEntry.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/ParameterEntry.java?rev=1559665&view=auto
==============================================================================
--- sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/ParameterEntry.java (added)
+++ sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/ParameterEntry.java Mon Jan 20 10:40:07 2014
@@ -0,0 +1,32 @@
+/*
+ * 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.parameters;
+
+import org.apache.sling.api.request.RequestParameter;
+
+import aQute.bnd.annotation.ProviderType;
+
+@ProviderType
+public interface ParameterEntry {
+
+ String getName();
+
+ RequestParameter getParameter();
+
+}
Propchange: sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/ParameterEntry.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/ParameterSupport.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/ParameterSupport.java?rev=1559665&view=auto
==============================================================================
--- sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/ParameterSupport.java (added)
+++ sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/ParameterSupport.java Mon Jan 20 10:40:07 2014
@@ -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.parameters;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import javax.servlet.http.Part;
+
+import org.apache.sling.api.request.RequestParameter;
+import org.apache.sling.api.request.RequestParameterMap;
+import org.apache.sling.parameters.impl.ParameterSupportImpl;
+import org.apache.sling.parameters.impl.Util;
+
+import aQute.bnd.annotation.ProviderType;
+
+@ProviderType
+public abstract class ParameterSupport {
+
+ private static final String ATTR_NAME = ParameterSupportImpl.class.getName();
+
+ public static ParameterSupport getInstance(ServletRequest servletRequest) {
+ ParameterSupport instance = (ParameterSupport) servletRequest.getAttribute(ATTR_NAME);
+ if (instance == null) {
+ instance = new ParameterSupportImpl((HttpServletRequest) servletRequest);
+ servletRequest.setAttribute(ATTR_NAME, instance);
+ }
+ return instance;
+ }
+
+ /**
+ * Sets the default encoding used to decode request parameters if the
+ * <code>_charset_</code> request parameter is not set (or is not set to an
+ * encoding supported by the platform). By default this default encoding is
+ * <code>ISO-8859-1</code>. For applications which alway use the same
+ * encoding this default can be changed.
+ *
+ * @param encoding The default encoding to be used. If this encoding is
+ * <code>null</code> or not supported by the platform the current
+ * default encoding remains unchanged.
+ */
+ public static void setDefaultParameterEncoding(final String encoding) {
+ Util.setDefaultFixEncoding(encoding);
+ }
+
+ public static HttpServletRequestWrapper getParameterSupportRequestWrapper(final HttpServletRequest request) {
+ return new HttpServletRequestWrapper(request) {
+ @Override
+ public String getParameter(String name) {
+ return getParameterSupport().getParameter(name);
+ }
+
+ @Override
+ public Map<String, String[]> getParameterMap() {
+ return getParameterSupport().getParameterMap();
+ }
+
+ @Override
+ public Enumeration<String> getParameterNames() {
+ return getParameterSupport().getParameterNames();
+ }
+
+ @Override
+ public String[] getParameterValues(String name) {
+ return getParameterSupport().getParameterValues(name);
+ }
+
+ @Override
+ public Part getPart(String name) throws IOException, ServletException {
+ return getParameterSupport().getPart(name);
+ }
+
+ @Override
+ public Collection<Part> getParts() throws IOException, ServletException {
+ return getParameterSupport().getParts();
+ }
+
+ private ParameterSupport getParameterSupport() {
+ return ParameterSupport.getInstance(getRequest());
+ }
+ };
+ }
+
+ public abstract boolean requestDataUsed();
+
+ public abstract String getParameter(String name);
+
+ public abstract String[] getParameterValues(String name);
+
+ public abstract Map<String, String[]> getParameterMap();
+
+ public abstract Enumeration<String> getParameterNames();
+
+ public abstract RequestParameter getRequestParameter(String name);
+
+ public abstract RequestParameter[] getRequestParameters(String name);
+
+ public abstract Part getPart(String name);
+
+ public abstract Collection<Part> getParts();
+
+ public abstract RequestParameterMap getRequestParameterMap();
+
+ public abstract List<ParameterEntry> getRequestParameterList();
+
+}
\ No newline at end of file
Propchange: sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/ParameterSupport.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied: sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/SlingUnsupportedEncodingException.java (from r1559659, sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/SlingUnsupportedEncodingException.java)
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/SlingUnsupportedEncodingException.java?p2=sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/SlingUnsupportedEncodingException.java&p1=sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/SlingUnsupportedEncodingException.java&r1=1559659&r2=1559665&rev=1559665&view=diff
==============================================================================
--- sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/SlingUnsupportedEncodingException.java (original)
+++ sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/SlingUnsupportedEncodingException.java Mon Jan 20 10:40:07 2014
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.sling.engine.impl.parameters;
+package org.apache.sling.parameters;
import java.io.UnsupportedEncodingException;
@@ -26,7 +26,7 @@ public class SlingUnsupportedEncodingExc
private static final long serialVersionUID = -4482276105859280247L;
- SlingUnsupportedEncodingException(UnsupportedEncodingException uee) {
+ public SlingUnsupportedEncodingException(UnsupportedEncodingException uee) {
super(uee);
}
Copied: sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/AbstractRequestParameter.java (from r1559659, sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/AbstractRequestParameter.java)
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/AbstractRequestParameter.java?p2=sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/AbstractRequestParameter.java&p1=sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/AbstractRequestParameter.java&r1=1559659&r2=1559665&rev=1559665&view=diff
==============================================================================
--- sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/AbstractRequestParameter.java (original)
+++ sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/AbstractRequestParameter.java Mon Jan 20 10:40:07 2014
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.sling.engine.impl.parameters;
+package org.apache.sling.parameters.impl;
import org.apache.sling.api.request.RequestParameter;
@@ -32,7 +32,7 @@ abstract class AbstractRequestParameter
this.encoding = encoding;
}
- String getEncoding() {
+ public String getEncoding() {
return this.encoding;
}
Copied: sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ContainerRequestParameter.java (from r1559659, sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/ContainerRequestParameter.java)
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ContainerRequestParameter.java?p2=sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ContainerRequestParameter.java&p1=sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/ContainerRequestParameter.java&r1=1559659&r2=1559665&rev=1559665&view=diff
==============================================================================
--- sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/ContainerRequestParameter.java (original)
+++ sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ContainerRequestParameter.java Mon Jan 20 10:40:07 2014
@@ -16,12 +16,14 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.sling.engine.impl.parameters;
+package org.apache.sling.parameters.impl;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
+import org.apache.sling.parameters.SlingUnsupportedEncodingException;
+
/**
* The <code>ContainerRequestParameter</code> TODO
*/
@@ -31,14 +33,14 @@ public class ContainerRequestParameter e
private byte[] content;
- ContainerRequestParameter(String value, String encoding) {
+ public ContainerRequestParameter(String value, String encoding) {
super(encoding);
this.value = value;
this.content = null;
}
@Override
- void setEncoding(String encoding) {
+ public void setEncoding(String encoding) {
// recode this parameter by encoding the string with the current
// encoding and decode the bytes with the encoding
try {
Copied: sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/MultipartRequestParameter.java (from r1559659, sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/MultipartRequestParameter.java)
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/MultipartRequestParameter.java?p2=sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/MultipartRequestParameter.java&p1=sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/MultipartRequestParameter.java&r1=1559659&r2=1559665&rev=1559665&view=diff
==============================================================================
--- sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/MultipartRequestParameter.java (original)
+++ sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/MultipartRequestParameter.java Mon Jan 20 10:40:07 2014
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.sling.engine.impl.parameters;
+package org.apache.sling.parameters.impl;
import java.io.IOException;
import java.io.InputStream;
@@ -27,7 +27,7 @@ import org.apache.commons.fileupload.Fil
/**
* The <code>MultipartRequestParameter</code> TODO
*/
-class MultipartRequestParameter extends AbstractRequestParameter {
+public class MultipartRequestParameter extends AbstractRequestParameter {
private final FileItem delegatee;
@@ -38,7 +38,7 @@ class MultipartRequestParameter extends
/**
*
*/
- MultipartRequestParameter(FileItem delegatee) {
+ public MultipartRequestParameter(FileItem delegatee) {
super(null);
this.delegatee = delegatee;
}
@@ -47,6 +47,10 @@ class MultipartRequestParameter extends
this.delegatee.delete();
}
+ FileItem getFileItem() {
+ return this.delegatee;
+ }
+
@Override
void setEncoding(String encoding) {
super.setEncoding(encoding);
Added: sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ParameterEntryImpl.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ParameterEntryImpl.java?rev=1559665&view=auto
==============================================================================
--- sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ParameterEntryImpl.java (added)
+++ sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ParameterEntryImpl.java Mon Jan 20 10:40:07 2014
@@ -0,0 +1,43 @@
+/*
+ * 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.parameters.impl;
+
+import org.apache.sling.api.request.RequestParameter;
+import org.apache.sling.parameters.ParameterEntry;
+
+class ParameterEntryImpl implements ParameterEntry {
+
+ final String name;
+
+ final RequestParameter parameter;
+
+ ParameterEntryImpl(final String name, final RequestParameter parameter) {
+ this.name = name;
+ this.parameter = parameter;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public RequestParameter getParameter() {
+ return parameter;
+ }
+
+}
Propchange: sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ParameterEntryImpl.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied: sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ParameterMap.java (from r1559659, sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterMap.java)
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ParameterMap.java?p2=sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ParameterMap.java&p1=sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterMap.java&r1=1559659&r2=1559665&rev=1559665&view=diff
==============================================================================
--- sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterMap.java (original)
+++ sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ParameterMap.java Mon Jan 20 10:40:07 2014
@@ -16,27 +16,32 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.sling.engine.impl.parameters;
+package org.apache.sling.parameters.impl;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
+import java.util.List;
import java.util.Map;
+import javax.servlet.http.Part;
+
import org.apache.sling.api.request.RequestParameter;
import org.apache.sling.api.request.RequestParameterMap;
+import org.apache.sling.parameters.ParameterEntry;
/**
* The <code>ParameterMap</code> TODO
*/
-class ParameterMap extends LinkedHashMap<String, RequestParameter[]> implements
+public class ParameterMap extends LinkedHashMap<String, RequestParameter[]> implements
RequestParameterMap {
private static final long serialVersionUID = -3984737679401682171L;
private Map<String, String[]> stringParameterMap;
- ParameterMap() {
- }
+ private List<ParameterEntry> requestParameters = new ArrayList<ParameterEntry>();
public RequestParameter getValue(String name) {
RequestParameter[] params = getValues(name);
@@ -52,18 +57,21 @@ class ParameterMap extends LinkedHashMap
super.put(newName, params);
}
- void addParameter(String name, RequestParameter parameter) {
- Object current = this.get(name);
+ public void addParameter(String name, RequestParameter parameter, boolean prependNew) {
+ // map of parameters
+ RequestParameter[] current = this.get(name);
if (current == null) {
super.put(name, new RequestParameter[] { parameter });
} else {
- RequestParameter[] ppo = (RequestParameter[]) current;
- RequestParameter[] ppn = new RequestParameter[ppo.length + 1];
- System.arraycopy(ppo, 0, ppn, 0, ppo.length);
- ppn[ppo.length] = parameter;
+ RequestParameter[] ppn = new RequestParameter[current.length + 1];
+ System.arraycopy(current, 0, ppn, prependNew ? 1 : 0, current.length);
+ ppn[prependNew ? 0 : current.length] = parameter;
super.put(name, ppn);
}
+
+ // list of parameters
+ this.requestParameters.add(new ParameterEntryImpl(name, parameter));
}
void setParameters(String name, RequestParameter[] parameters) {
@@ -72,16 +80,16 @@ class ParameterMap extends LinkedHashMap
//---------- String parameter support
- String getStringValue(final String name) {
+ public String getStringValue(final String name) {
final RequestParameter param = getValue(name);
return (param != null) ? param.getString() : null;
}
- String[] getStringValues(final String name) {
+ public String[] getStringValues(final String name) {
return toStringArray(getValues(name));
}
- Map<String, String[]> getStringParameterMap() {
+ public Map<String, String[]> getStringParameterMap() {
if (this.stringParameterMap == null) {
LinkedHashMap<String, String[]> pm = new LinkedHashMap<String, String[]>();
for (Map.Entry<String, RequestParameter[]> ppmEntry : entrySet()) {
@@ -92,6 +100,34 @@ class ParameterMap extends LinkedHashMap
return stringParameterMap;
}
+ // ---------- Servlet API 3.0 Part
+
+ public Part getPart(final String name) {
+ final RequestParameter p = this.getValue(name);
+ if (p instanceof MultipartRequestParameter) {
+ return new SlingPart((MultipartRequestParameter) p);
+ }
+
+ // no such part
+ return null;
+ }
+
+ public Collection<Part> getParts() {
+ final ArrayList<Part> parts = new ArrayList<Part>(this.size());
+ for (RequestParameter[] param : this.values()) {
+ if (param.length >= 1 && param[0] instanceof MultipartRequestParameter) {
+ parts.add(new SlingPart((MultipartRequestParameter) param[0]));
+ }
+ }
+ return parts;
+ }
+
+ // ---------- Order Request Parameter access
+
+ public List<ParameterEntry> getRequestParameterList() {
+ return Collections.unmodifiableList(requestParameters);
+ }
+
// ---------- Prohibited Write Access --------------------------------------
/*
Copied: sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ParameterSupportImpl.java (from r1559659, sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupport.java)
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ParameterSupportImpl.java?p2=sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ParameterSupportImpl.java&p1=sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupport.java&r1=1559659&r2=1559665&rev=1559665&view=diff
==============================================================================
--- sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupport.java (original)
+++ sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/ParameterSupportImpl.java Mon Jan 20 10:40:07 2014
@@ -16,18 +16,21 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.sling.engine.impl.parameters;
+package org.apache.sling.parameters.impl;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
import java.io.UnsupportedEncodingException;
+import java.util.Collection;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.Part;
-import org.apache.commons.collections.iterators.IteratorEnumeration;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.RequestContext;
@@ -36,11 +39,12 @@ import org.apache.commons.fileupload.ser
import org.apache.commons.fileupload.servlet.ServletRequestContext;
import org.apache.sling.api.request.RequestParameter;
import org.apache.sling.api.request.RequestParameterMap;
+import org.apache.sling.parameters.ParameterEntry;
+import org.apache.sling.parameters.ParameterSupport;
+import org.apache.sling.parameters.SlingUnsupportedEncodingException;
import org.slf4j.LoggerFactory;
-public class ParameterSupport {
-
- private static final String ATTR_NAME = ParameterSupport.class.getName();
+public class ParameterSupportImpl extends ParameterSupport {
/**
* The name of the request attribute to set to get the Jetty servlet
@@ -49,32 +53,17 @@ public class ParameterSupport {
*/
private static final String ATTR_JETTY_QUERY_ENCODING = "org.mortbay.jetty.Request.queryEncoding";
+ /** Content type signaling parameters in request body */
+ private static final String WWW_FORM_URL_ENC = "application/x-www-form-urlencoded";
+
private final HttpServletRequest servletRequest;
private ParameterMap postParameterMap;
private boolean requestDataUsed;
- /**
- * Sets the default encoding used to decode request parameters if the
- * <code>_charset_</code> request parameter is not set (or is not set to an
- * encoding supported by the platform). By default this default encoding is
- * <code>ISO-8859-1</code>. For applications which alway use the same
- * encoding this default can be changed.
- *
- * @param encoding The default encoding to be used. If this encoding is
- * <code>null</code> or not supported by the platform the current
- * default encoding remains unchanged.
- */
- public static void setDefaultParameterEncoding(final String encoding) {
- Util.setDefaultFixEncoding(encoding);
- }
-
- public static ParameterSupport getInstance(ServletRequest servletRequest) {
- ParameterSupport instance = (ParameterSupport) servletRequest.getAttribute(ATTR_NAME);
- if (instance == null) {
- instance = new ParameterSupport((HttpServletRequest) servletRequest);
- servletRequest.setAttribute(ATTR_NAME, instance);
+ public ParameterSupportImpl(HttpServletRequest servletRequest) {
+ this.servletRequest = servletRequest;
// SLING-559: Hack to get Jetty into decoding the request
// query with ISO-8859-1 as stipulated by the servlet
@@ -82,12 +71,6 @@ public class ParameterSupport {
servletRequest.setAttribute(ATTR_JETTY_QUERY_ENCODING,
Util.ENCODING_DIRECT);
}
- return instance;
- }
-
- private ParameterSupport(HttpServletRequest servletRequest) {
- this.servletRequest = servletRequest;
- }
private HttpServletRequest getServletRequest() {
return servletRequest;
@@ -111,8 +94,17 @@ public class ParameterSupport {
@SuppressWarnings("unchecked")
public Enumeration<String> getParameterNames() {
- return new IteratorEnumeration(
- this.getRequestParameterMapInternal().keySet().iterator());
+ return new Enumeration<String>() {
+ private final Iterator<String> base = ParameterSupportImpl.this.getRequestParameterMapInternal().keySet().iterator();
+
+ public boolean hasMoreElements() {
+ return this.base.hasNext();
+ }
+
+ public String nextElement() {
+ return this.base.next();
+ }
+ };
}
public RequestParameter getRequestParameter(String name) {
@@ -123,10 +115,22 @@ public class ParameterSupport {
return getRequestParameterMapInternal().getValues(name);
}
+ public Part getPart(String name) {
+ return getRequestParameterMapInternal().getPart(name);
+ }
+
+ public Collection<Part> getParts() {
+ return getRequestParameterMapInternal().getParts();
+ }
+
public RequestParameterMap getRequestParameterMap() {
return getRequestParameterMapInternal();
}
+ public List<ParameterEntry> getRequestParameterList() {
+ return getRequestParameterMapInternal().getRequestParameterList();
+ }
+
private ParameterMap getRequestParameterMapInternal() {
if (this.postParameterMap == null) {
@@ -166,19 +170,47 @@ public class ParameterSupport {
}
}
- final Map<?, ?> pMap = getServletRequest().getParameterMap();
- for (Map.Entry<?, ?> entry : pMap.entrySet()) {
-
- final String name = (String) entry.getKey();
- final String[] values = (String[]) entry.getValue();
+ final String query = getServletRequest().getQueryString();
+ if (query != null) {
+ try {
+ ByteArrayInputStream input = new ByteArrayInputStream(query.getBytes(Util.ENCODING_DIRECT));
+ Util.parseQueryString(input, encoding, parameters, false, -1);
+ } catch (UnsupportedEncodingException e) {
+ // TODO: don't expect this, thus log !!
+ } catch (IOException e) {
+ // TODO: don't expect this, thus log !!
+ }
+ }
- for (int i = 0; i < values.length; i++) {
- parameters.addParameter(name, new ContainerRequestParameter(
- values[i], encoding));
+ // only read input in case of multipart-POST not handled
+ // by the servlet container
+ if ("POST".equals(this.getServletRequest().getMethod()) && WWW_FORM_URL_ENC.equalsIgnoreCase(this.getServletRequest().getContentType())) {
+ try {
+ InputStream input = this.getServletRequest().getInputStream();
+ Util.parseQueryString(input, encoding, parameters, false, -1);
+ } catch (IllegalArgumentException e) {
+ // TODO: don't expect this, thus log !!
+ } catch (UnsupportedEncodingException e) {
+ // TODO: don't expect this, thus log !!
+ } catch (IOException e) {
+ // TODO: don't expect this, thus log !!
+ }
+ this.requestDataUsed = true;
}
+// final Map<?, ?> pMap = getServletRequest().getParameterMap();
+// for (Map.Entry<?, ?> entry : pMap.entrySet()) {
+//
+// final String name = (String) entry.getKey();
+// final String[] values = (String[]) entry.getValue();
+//
+// for (int i = 0; i < values.length; i++) {
+// parameters.addParameter(name, new ContainerRequestParameter(
+// values[i], encoding));
+// }
+//
+// }
}
- }
private void parseMultiPartPost(ParameterMap parameters) {
// parameters not read yet, read now
@@ -209,7 +241,7 @@ public class ParameterSupport {
for (Iterator<?> ii = items.iterator(); ii.hasNext();) {
FileItem fileItem = (FileItem) ii.next();
RequestParameter pp = new MultipartRequestParameter(fileItem);
- parameters.addParameter(fileItem.getFieldName(), pp);
+ parameters.addParameter(fileItem.getFieldName(), pp, false);
}
}
}
Added: sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/SlingPart.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/SlingPart.java?rev=1559665&view=auto
==============================================================================
--- sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/SlingPart.java (added)
+++ sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/SlingPart.java Mon Jan 20 10:40:07 2014
@@ -0,0 +1,82 @@
+/*
+ * 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.parameters.impl;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+import javax.servlet.http.Part;
+
+public class SlingPart implements Part {
+
+ private final MultipartRequestParameter param;
+
+ public SlingPart(final MultipartRequestParameter param) {
+ this.param = param;
+ }
+
+ public InputStream getInputStream() throws IOException {
+ return this.param.getInputStream();
+ }
+
+ public String getContentType() {
+ return this.param.getContentType();
+ }
+
+ public String getName() {
+ return this.param.getFileItem().getFieldName();
+ }
+
+ public long getSize() {
+ return this.param.getSize();
+ }
+
+ public void write(String fileName) throws IOException {
+ throw new IOException("Unsupported yet");
+ }
+
+ public void delete() {
+ this.param.getFileItem().delete();
+ }
+
+ public String getHeader(String name) {
+ return this.param.getFileItem().getHeaders().getHeader(name);
+ }
+
+ public Collection<String> getHeaders(String name) {
+ final ArrayList<String> headers = new ArrayList<String>();
+ final Iterator<String> itemHeaders = this.param.getFileItem().getHeaders().getHeaders(name);
+ while (itemHeaders.hasNext()) {
+ headers.add(itemHeaders.next());
+ }
+ return headers;
+ }
+
+ public Collection<String> getHeaderNames() {
+ final ArrayList<String> headers = new ArrayList<String>();
+ final Iterator<String> itemHeaders = this.param.getFileItem().getHeaders().getHeaderNames();
+ while (itemHeaders.hasNext()) {
+ headers.add(itemHeaders.next());
+ }
+ return headers;
+ }
+}
Propchange: sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/SlingPart.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied: sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/Util.java (from r1559659, sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/Util.java)
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/Util.java?p2=sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/Util.java&p1=sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/Util.java&r1=1559659&r2=1559665&rev=1559665&view=diff
==============================================================================
--- sling/whiteboard/fmeschbe/parameters/engine/src/main/java/org/apache/sling/engine/impl/parameters/Util.java (original)
+++ sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/impl/Util.java Mon Jan 20 10:40:07 2014
@@ -16,20 +16,23 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.sling.engine.impl.parameters;
+package org.apache.sling.parameters.impl;
import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.sling.api.request.RequestParameter;
+import org.slf4j.LoggerFactory;
/**
* The <code>Util</code> TODO
*/
-class Util {
+public class Util {
/** The name of the form encoding parameter */
public final static String PARAMETER_FORMENCODING = "_charset_";
@@ -48,7 +51,34 @@ class Util {
public static final byte[] NO_CONTENT = new byte[0];
- static void setDefaultFixEncoding(final String encoding) {
+ /** Parse state constant */
+ private static final int BEFORE_NAME = 0;
+
+ /** Parse state constant */
+ private static final int INSIDE_NAME = BEFORE_NAME + 1;
+
+ /** Parse state constant */
+ private static final int ESC_NAME = INSIDE_NAME + 1;
+
+ /** Parse state constant */
+ private static final int BEFORE_EQU = ESC_NAME + 1;
+
+ /** Parse state constant */
+ private static final int BEFORE_VALUE = BEFORE_EQU + 1;
+
+ /** Parse state constant */
+ private static final int INSIDE_VALUE = BEFORE_VALUE + 1;
+
+ /** Parse state constant */
+ private static final int ESC_VALUE = INSIDE_VALUE + 1;
+
+ /** Parse state constant */
+ private static final int AFTER_VALUE = INSIDE_VALUE + 1;
+
+ /** Parse state constant */
+ private static final int BEFORE_SEP = AFTER_VALUE + 1;
+
+ public static void setDefaultFixEncoding(final String encoding) {
defaultFixEncoding = validateEncoding(encoding);
}
@@ -85,7 +115,7 @@ class Util {
return new ByteArrayInputStream(data);
}
- static void fixEncoding(ParameterMap parameterMap) {
+ public static void fixEncoding(ParameterMap parameterMap) {
// default the encoding to defaultFixEncoding
String formEncoding = defaultFixEncoding;
@@ -173,4 +203,203 @@ class Util {
// no encoding or unsupported encoding
return defaultFixEncoding;
}
+
+ /**
+ * Parse a query string and store entries inside a map
+ *
+ * @param data querystring data
+ * @param encoding encoding to use for converting bytes to characters
+ * @param map map to populate
+ * @param prependNew whether to prepend new values
+ * @param maxcount maximum name/value count to process;
+ * <code>-1</code> to allow unlimited number
+ *
+ * @exception IllegalArgumentException if the query string is malformed
+ * @exception UnsupportedEncodingException if the encoding is not supported
+ * @throws IOException
+ */
+ public static void parseQueryString(InputStream data, String encoding, ParameterMap map,
+ boolean prependNew, int maxcount)
+ throws IllegalArgumentException, UnsupportedEncodingException, IOException {
+
+ parseNVPairString(data, encoding, map, '&', false, prependNew, maxcount);
+ }
+
+ /**
+ * Parse a name/value pair string and populate a map with key -> value[s]
+ *
+ * @param data name value data
+ * @param encoding encoding to use for converting bytes to characters
+ * @param map map to populate
+ * @param separator multi-value separator character
+ * @param allowSpaces allow spaces inside name/values
+ * @param prependNew whether to prepend new values
+ * @param maxcount maximum name/value count to process;
+ * <code>-1</code> to allow unlimited number
+ *
+ * @exception IllegalArgumentException if the nv string is malformed
+ */
+ private static void parseNVPairString(InputStream data, String encoding, ParameterMap map,
+ char separator, boolean allowSpaces,
+ boolean prependNew, int maxcount)
+ throws IllegalArgumentException, UnsupportedEncodingException, IOException {
+
+ ByteArrayOutputStream keyBuffer = new ByteArrayOutputStream(256);
+ ByteArrayOutputStream valueBuffer = new ByteArrayOutputStream(256);
+ char[] chCode = new char[2];
+
+ int state = BEFORE_NAME;
+ int subState = 0, count = 0;
+
+ for (int in = data.read(); in >= 0; in = data.read()) {
+ char ch = (char) in;
+
+ switch (state) {
+ case BEFORE_NAME:
+ if (ch == ' ') {
+ continue;
+ } else if (ch == '%') {
+ state = ESC_NAME;
+ subState = 0;
+ } else if (ch == '+' && !allowSpaces) {
+ keyBuffer.write(' ');
+ state = INSIDE_NAME;
+ } else {
+ keyBuffer.write(ch);
+ state = INSIDE_NAME;
+ }
+ break;
+ case INSIDE_NAME:
+ if (ch == '=') {
+ state = BEFORE_VALUE;
+ } else if (ch == '+' && !allowSpaces) {
+ keyBuffer.write(' ');
+ } else if (ch == '%') {
+ state = ESC_NAME;
+ subState = 0;
+ } else if (ch == '&') {
+ String key = keyBuffer.toString(encoding);
+ if (count++ == maxcount) {
+ LoggerFactory.getLogger(Util.class).warn("Too many name/value pairs, stopped processing after " + maxcount + " entries");
+ return;
+ }
+ addNVPair(map, key, "", encoding, prependNew);
+ keyBuffer.reset();
+ valueBuffer.reset();
+ state = BEFORE_NAME;
+ } else {
+ keyBuffer.write(ch);
+ }
+ break;
+ case ESC_NAME:
+ chCode[subState++] = ch;
+ if (subState == chCode.length) {
+ String code = new String(chCode);
+ try {
+ keyBuffer.write(Integer.parseInt(code, 16));
+ } catch (NumberFormatException e) {
+ throw new IllegalArgumentException(
+ "Bad escape sequence: %" + code);
+ }
+ state = INSIDE_NAME;
+ }
+ break;
+ case BEFORE_EQU:
+ if (ch == '=') {
+ state = BEFORE_VALUE;
+ }
+ break;
+ case BEFORE_VALUE:
+ if (ch == ' ') {
+ continue;
+ } else if (ch == '%') {
+ state = ESC_VALUE;
+ subState = 0;
+ } else if (ch == '+' && !allowSpaces) {
+ valueBuffer.write(' ');
+ state = INSIDE_VALUE;
+ } else if (ch == separator) {
+ String key = keyBuffer.toString(encoding);
+ String value = valueBuffer.toString(encoding);
+
+ if (count++ == maxcount) {
+ LoggerFactory.getLogger(Util.class).warn("Too many name/value pairs, stopped processing after " + maxcount + " entries");
+ return;
+ }
+ addNVPair(map, key, value, encoding, prependNew);
+
+ keyBuffer.reset();
+ valueBuffer.reset();
+
+ state = BEFORE_NAME;
+ } else {
+ valueBuffer.write(ch);
+ state = INSIDE_VALUE;
+ }
+ break;
+ case INSIDE_VALUE:
+ if (ch == separator) {
+ String key = keyBuffer.toString(encoding);
+ String value = valueBuffer.toString(encoding);
+
+ if (count++ == maxcount) {
+ LoggerFactory.getLogger(Util.class).warn("Too many name/value pairs, stopped processing after " + maxcount + " entries");
+ return;
+ }
+ addNVPair(map, key, value, encoding, prependNew);
+
+ keyBuffer.reset();
+ valueBuffer.reset();
+
+ state = BEFORE_NAME;
+ } else if (ch == '+' && !allowSpaces) {
+ valueBuffer.write(' ');
+ } else if (ch == '%') {
+ state = ESC_VALUE;
+ subState = 0;
+ } else {
+ valueBuffer.write(ch);
+ }
+ break;
+ case ESC_VALUE:
+ chCode[subState++] = ch;
+ if (subState == chCode.length) {
+ String code = new String(chCode);
+ try {
+ valueBuffer.write(Integer.parseInt(code, 16));
+ } catch (NumberFormatException e) {
+ throw new IllegalArgumentException(
+ "Bad escape sequence: %" + code);
+ }
+ state = INSIDE_VALUE;
+ }
+ break;
+ case BEFORE_SEP:
+ if (ch == separator) {
+ state = BEFORE_NAME;
+ }
+ break;
+ }
+ }
+
+ if (keyBuffer.size() > 0) {
+ String key = keyBuffer.toString(encoding);
+ String value = valueBuffer.toString(encoding);
+
+ if (count++ == maxcount) {
+ LoggerFactory.getLogger(Util.class).warn("Too many name/value pairs, stopped processing after " + maxcount + " entries");
+ return;
+ }
+ addNVPair(map, key, value, encoding, prependNew);
+ }
+ }
+
+ /**
+ * Add a name/value pair to a map. The values are string arrays
+ * @param encoding TODO
+ */
+ private static void addNVPair(ParameterMap map, String key, String value,
+ String encoding, boolean prependNew) {
+ map.addParameter(key, new ContainerRequestParameter(value, encoding), prependNew);
+ }
}
Added: sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/package-info.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/package-info.java?rev=1559665&view=auto
==============================================================================
--- sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/package-info.java (added)
+++ sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/package-info.java Mon Jan 20 10:40:07 2014
@@ -0,0 +1,26 @@
+/*
+ * 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.
+ */
+
+@Version("1.0")
+@Export(optional="provide:=true")
+package org.apache.sling.parameters;
+
+import aQute.bnd.annotation.Export;
+import aQute.bnd.annotation.Version;
+
Propchange: sling/whiteboard/fmeschbe/parameters/parameters/src/main/java/org/apache/sling/parameters/package-info.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: sling/whiteboard/fmeschbe/parameters/parameters/src/test/java/org/apache/sling/parameters/impl/ContainerRequestParameterTest.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/fmeschbe/parameters/parameters/src/test/java/org/apache/sling/parameters/impl/ContainerRequestParameterTest.java?rev=1559665&r1=1559659&r2=1559665&view=diff
==============================================================================
--- sling/whiteboard/fmeschbe/parameters/parameters/src/test/java/org/apache/sling/parameters/impl/ContainerRequestParameterTest.java (original)
+++ sling/whiteboard/fmeschbe/parameters/parameters/src/test/java/org/apache/sling/parameters/impl/ContainerRequestParameterTest.java Mon Jan 20 10:40:07 2014
@@ -16,10 +16,12 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.sling.engine.impl.parameters;
+package org.apache.sling.parameters.impl;
import java.io.UnsupportedEncodingException;
+import org.apache.sling.parameters.impl.ContainerRequestParameter;
+
import junit.framework.TestCase;
public class ContainerRequestParameterTest extends TestCase {