Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * 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.engine.impl.parameters;
 
 import java.util.List;
 import java.util.Map;
 
 
 import  org.apache.commons.fileupload.FileItem;
 import  org.apache.commons.fileupload.FileUploadException;
 import  org.apache.commons.fileupload.RequestContext;
 import  org.apache.commons.fileupload.disk.DiskFileItemFactory;
 import  org.apache.commons.fileupload.servlet.ServletFileUpload;
 import  org.apache.commons.fileupload.servlet.ServletRequestContext;
 
 public class ParameterSupport {
 
     private static final String ATTR_NAME = ParameterSupport.class.getName();

    
The name of the request attribute to set to get the Jetty servlet container to decode the request query using ISO-8859-1 encoding (value is "org.mortbay.jetty.Request.queryEncoding").
 
     private static final String ATTR_JETTY_QUERY_ENCODING = "org.mortbay.jetty.Request.queryEncoding";
 
     private final HttpServletRequest servletRequest;
 
     private ParameterMap postParameterMap;
 
     private boolean requestDataUsed;
 
     public static ParameterSupport getInstance(ServletRequest servletRequest) {
         ParameterSupport instance = (ParameterSupportservletRequest.getAttribute();
         if (instance == null) {
             instance = new ParameterSupport((HttpServletRequestservletRequest);
             servletRequest.setAttribute(instance);
 
             // SLING-559: Hack to get Jetty into decoding the request
             // query with ISO-8859-1 as stipulated by the servlet
             // spec. Other containers ignore this parameter
             servletRequest.setAttribute(,
                 .);
         }
         return instance;
     }
 
     private ParameterSupport(HttpServletRequest servletRequest) {
         this. = servletRequest;
     }
 
     private HttpServletRequest getServletRequest() {
         return ;
     }
 
     public boolean requestDataUsed() {
         return this.;
     }
 
     public String getParameter(String name) {
         return getRequestParameterMapInternal().getStringValue(name);
     }
 
     public String[] getParameterValues(String name) {
         return getRequestParameterMapInternal().getStringValues(name);
     }
 
     public Map<StringString[]> getParameterMap() {
     }
 
     @SuppressWarnings("unchecked")
     public Enumeration<StringgetParameterNames() {
         return new IteratorEnumeration(
             this.getRequestParameterMapInternal().keySet().iterator());
    }
        return getRequestParameterMapInternal().getValue(name);
    }
    public RequestParameter[] getRequestParameters(String name) {
        return getRequestParameterMapInternal().getValues(name);
    }
        return getRequestParameterMapInternal();
    }
        if (this. == null) {
            // SLING-152 Get parameters from the servlet Container
            ParameterMap parameters = new ParameterMap();
            getContainerParameters(parameters);
            // only read input in case of multipart-POST not handled
            // by the servlet container
            if ("POST".equals(this.getServletRequest().getMethod())) {
                if (ServletFileUpload.isMultipartContent(new ServletRequestContext(
                    this.getServletRequest()))) {
                    this.parseMultiPartPost(parameters);
                    this. = true;
                }
            }
            // apply any form encoding (from '_charset_') in the parameter map
            Util.fixEncoding(parameters);
            this. = parameters;
        }
        return this.;
    }
    private void getContainerParameters(ParameterMap parameters) {
        // SLING-508 Try to force servlet container to decode parameters
        // as ISO-8859-1 such that we can recode later
        String encoding = getServletRequest().getCharacterEncoding();
        if (encoding == null) {
            encoding = .;
            try {
                getServletRequest().setCharacterEncoding(encoding);
            } catch (UnsupportedEncodingException uee) {
                throw new SlingUnsupportedEncodingException(uee);
            }
        }
        final Map<?, ?> pMap = getServletRequest().getParameterMap();
        for (Map.Entry<?, ?> entry : pMap.entrySet()) {
            final String name = (Stringentry.getKey();
            final String[] values = (String[]) entry.getValue();
            for (int i = 0; i < values.lengthi++) {
                parameters.addParameter(namenew ContainerRequestParameter(
                    values[i], encoding));
            }
        }
    }
    private void parseMultiPartPost(ParameterMap parameters) {
        // parameters not read yet, read now
        // Create a factory for disk-based file items
        DiskFileItemFactory factory = new DiskFileItemFactory();
        factory.setSizeThreshold(256000);
        // Create a new file upload handler
        ServletFileUpload upload = new ServletFileUpload(factory);
        upload.setSizeMax(-1);
        RequestContext rc = new ServletRequestContext(this.getServletRequest()) {
            public String getCharacterEncoding() {
                String enc = super.getCharacterEncoding();
                return (enc != null) ? enc : .;
            }
        };
        // Parse the request
        try {
            List<?> /* FileItem */items = upload.parseRequest(rc);
            for (Iterator<?> ii = items.iterator(); ii.hasNext();) {
                FileItem fileItem = (FileItem) ii.next();
                RequestParameter pp = new MultipartRequestParameter(fileItem);
                parameters.addParameter(fileItem.getFieldName(), pp);
            }
        } catch (FileUploadException fue) {
            // TODO: log
        }
    }
New to GrepCode? Check out our FAQ X