All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.micromata.genome.tpsb.httpmockup.testbuilder.HttpParser Maven / Gradle / Ivy

The newest version!
//
// Copyright (C) 2010-2016 Micromata GmbH
//
// 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 de.micromata.genome.tpsb.httpmockup.testbuilder;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.StringUtils;

import de.micromata.genome.tpsb.builder.SimpleTextParser;
import de.micromata.genome.util.types.Pair;

/**
 * Parses a Request/Response from a text
 * 
 * TODO Body als param auswerten wenn Content-Type: application/x-www-form-urlencoded; charset=UTF-8
 * 
 * @author Roger Rene Kommer ([email protected])
 * 
 */
public class HttpParser extends SimpleTextParser
{

  private String method;

  private String url;

  private int mayorVersion = 1;

  private int minorVersion = 1;

  private List> headers = new ArrayList>();

  private String queryString = "";

  private List> parameters = new ArrayList>();

  private String body = "";

  private String getHeader(String name)
  {
    for (Pair p : headers) {
      if (p.getKey().equals(name) == true) {
        return p.getValue();
      }
    }
    return null;
  }

  public HttpParser(String text)
  {
    super(text);
    parse();
  }

  private void parse()
  {
    parseMethod();
    parseHeaders();
    skipNl();
    body = rest();
    checkUrlPost();
  }

  private void checkUrlPost()
  {
    String ct = getHeader("Content-Type");
    if (ct == null) {
      return;
    }
    if (ct.contains("application/x-www-form-urlencoded") == false) {
      return;
    }
    String trimmedbody = StringUtils.trim(body);
    if (trimmedbody.isEmpty() == true) {
      return;
    }
    if (StringUtils.isEmpty(queryString) == false) {
      queryString += "&" + trimmedbody;
    } else {
      queryString = trimmedbody;
    }
  }

  public List> getRequestParameters()
  {
    List> ret = new ArrayList>();
    if (queryString.length() == 0) {
      return ret;
    }
    String rest = queryString;
    int idx = 0;
    while (idx != -1 && rest.length() > 0) {
      idx = rest.indexOf('&');
      String ps = rest;
      if (idx != -1) {
        ps = rest.substring(0, idx);
        rest = rest.substring(idx + 1);
      }
      int pidx = ps.indexOf('=');
      String value = "";
      if (pidx != -1) {
        value = ps.substring(pidx + 1);
        ps = ps.substring(0, pidx);
      }
      ret.add(Pair.make(ps, value));
    }
    return ret;
  }

  private String splitUrl(String url)
  {
    int idx = url.indexOf('?');
    if (idx == -1) {
      return url;
    }
    queryString = url.substring(idx + 1);
    url = url.substring(0, idx);
    return url;
  }

  private void parseMethod()
  {
    // GET /Functional-Testing/getting-started-with-assertions.html HTTP/1.1
    int start = currentIndex();
    skipToWs();
    method = substring(start, currentIndex());
    skipWs();
    start = currentIndex();
    skipToWs();
    url = substring(start, currentIndex());
    url = splitUrl(url);
    skipWs();
    if (startsWith("HTTP") == true) {
      inc(4);
    }
    skipLine();
  }

  private void parseHeaders()
  {
    while (eof() == false) {
      if (parseHeader() == false) {
        break;
      }
      if (isEmptyLine() == true) {
        break;
      }
    }

  }

  private boolean parseHeader()
  {
    String key = "";
    int start = currentIndex();
    char nc = skipUntil(':', '\n', '\r');
    if (nc != ':') {
      reset(start);
      return false;
    }

    key = substring(start, currentIndex());
    inc();
    if (key.length() == 0) {
      reset(start);
      return false;
    }
    start = currentIndex();
    skipEndOfLine();
    String value = substring(start, currentIndex());
    headers.add(Pair.make(key, value));
    skipLine();
    return true;
  }

  public String getMethod()
  {
    return method;
  }

  public void setMethod(String method)
  {
    this.method = method;
  }

  public String getUrl()
  {
    return url;
  }

  public void setUrl(String url)
  {
    this.url = url;
  }

  public int getMayorVersion()
  {
    return mayorVersion;
  }

  public void setMayorVersion(int mayorVersion)
  {
    this.mayorVersion = mayorVersion;
  }

  public int getMinorVersion()
  {
    return minorVersion;
  }

  public void setMinorVersion(int minorVersion)
  {
    this.minorVersion = minorVersion;
  }

  public List> getHeaders()
  {
    return headers;
  }

  public void setHeaders(List> headers)
  {
    this.headers = headers;
  }

  public String getBody()
  {
    return body;
  }

  public void setBody(String body)
  {
    this.body = body;
  }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy