Package org.simpleframework.http.core

Source Code of org.simpleframework.http.core.FormCreator

/*
* FormCreator.java October 2002
*
* Copyright (C) 2002, Niall Gallagher <niallg@users.sf.net>
*
* Licensed 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.simpleframework.http.core;

import java.io.IOException;

import org.simpleframework.http.ContentType;
import org.simpleframework.http.Form;
import org.simpleframework.http.Part;
import org.simpleframework.http.Query;
import org.simpleframework.http.Request;

/**
* The <code>FormCreator</code> object is used to create the form.
* It is created using the request URI query and a form post body if
* sent, also if the request is a multipart upload the text parts
* are added to the form. Building a single object form multiple
* sources within the request ensures there is a single convenient
* means to access the data from the request.
*
* @author Niall Gallagher
*
* @see org.simpleframework.http.Form
*/
class FormCreator {
  
   /**
    * This is the request that is used to acquire the data.
    */
   private final Request request;
  
   /**
    * This is used to acquire the content from the request body.
    */
   private final Body body;

   /**
    * Constructor for the <code>FormCreator</code> object. This will
    * create an object that can be used to construct a single form
    * from the multiple sources of data within the request entity.
    *
    * @param request this is the request used to acquire the data
    * @param entity this is the entity that contains the data
    */
   public FormCreator(Request request, Entity entity) {
      this.body = entity.getBody();
      this.request = request;    
   }
  
   /**
    * This is used to acquire a <code>Form</code> using all of the
    * parameters from the request URI as well as a form post if
    * it exists, finally all the text parts from an upload are
    * added to the form. This ensures that all data is accessible.
    *
    * @return this returns the form created from the request
    */
   public Form getInstance() throws IOException {     
      PartList list = getParts();
      Query form = getQuery();
     
      for(Part part : list) {
         String name = part.getName();
         String value = part.getContent();
        
         form.put(name, value);      
      }     
      return new PartForm(body, form);     
   }
  
  
   /**
    * This method is used to acquire the query part from the HTTP
    * request URI target and a form post if it exists. Both the
    * query and the form post are merge together in a single query.
    *
    * @return the query associated with the HTTP target URI
    */  
   private Query getQuery() throws IOException {
      Query query = request.getQuery();
     
      if(!isFormPost()) {
         return query;
      }
      return getQuery(query); // only get if form
   }
  
   /**
    * This method is used to acquire the query part from the HTTP
    * request URI target and a form post if it exists. Both the
    * query and the form post are merge together in a single query.
    *
    * @param query this is the URI query string to be used
    *
    * @return the query associated with the HTTP target URI
    */  
   private Query getQuery(Query query) throws IOException {
      String body = request.getContent();
     
      if(body == null) {
         return query;
      }
      return new QueryForm(query, body);
   }
  
   /**
    * This method provides all parts for this body. The parts for a
    * body can contain text parameters or files. Each file part can
    * contain headers, which are the typical HTTP headers. Typically
    * headers describe the content and any encoding if required.
    *
    * @return this returns a list of parts for this body
    */  
   private PartList getParts() {
      PartList list = body.getParts();
     
      if(list.isEmpty()) {
         return list;
      }
      return getParts(list);        
   }
  
   /**
    * This method provides all parts for this body. The parts for a
    * body can contain text parameters or files. Each file part can
    * contain headers, which are the typical HTTP headers. Typically
    * headers describe the content and any encoding if required.
    *
    * @param body this is the part list taken from the body
    *
    * @return this returns a list of parts for this body
    */  
   private PartList getParts(PartList body) {
      PartList list = new PartList();
     
      for(Part part : body) {
         if(!part.isFile()) {
            list.add(part);
         }
      }
      return list;     
   }
  
   /**
    * This is used to determine if the content type is a form POST
    * of type application/x-www-form-urlencoded. Such a type is
    * used when a HTML form is used to post data to the server.
    *
    * @return this returns true if content type is a form post
    */  
   private boolean isFormPost() {
      ContentType type = request.getContentType();
     
      if(type == null) {
         return false;
      }
      return isFormPost(type);
   }
  
   /**
    * This is used to determine if the content type is a form POST
    * of type application/x-www-form-urlencoded. Such a type is
    * used when a HTML form is used to post data to the server. 
    *
    * @param type the type to determine if its a form post
    *
    * @return this returns true if content type is a form post
    */
   private boolean isFormPost(ContentType type) {  
      String primary = type.getPrimary();
      String secondary = type.getSecondary();
     
      if(!primary.equals("application")) {
         return false;
      }
      return secondary.equals("x-www-form-urlencoded");
   }
}
TOP

Related Classes of org.simpleframework.http.core.FormCreator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.