Package gargl.typedefinitions

Source Code of gargl.typedefinitions.Function

package gargl.typedefinitions;

import java.util.HashSet;
import java.util.HashMap;
import java.util.Set;
import java.util.Map;

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import gargl.utilities.JsonUtils;
import gargl.utilities.Parameter;

public class Function {

  private String functionName;
  private Set<Parameter> parameters;
  private Map<String, String> headers;
  private String url;
  private String httpVersion;
  private Map<String, String> queryString;
  private String method;
  private Map<String, String> postData;
  private Map<String, String> responseFields;

  public Function(JsonObject jsonRequest) {
    parameters = new HashSet<Parameter>();
    headers = new HashMap<String, String>();
    queryString = new HashMap<String, String>();
    postData = new HashMap<String, String>();
    responseFields = new HashMap<String, String>();

    // Set up Request object with all properties from JSON request
    this.setFunctionName(jsonRequest);
    this.setRequestMethod(jsonRequest);
    this.setHeaders(JsonUtils.findElement(jsonRequest, "headers"));
    this.setUrl(JsonUtils.findElement(jsonRequest, "url"));
    this.setQueryString(JsonUtils.findElement(jsonRequest, "queryString"));
    this.setPostData(JsonUtils.findElement(jsonRequest, "postData"));
    this.setResponseFields(JsonUtils.findElement(jsonRequest, "response"));
  }
 
  private void setResponseFields(JsonElement jsonResponse) {
    JsonElement responseFields = null;
    if(jsonResponse != null) responseFields = JsonUtils.findElement(jsonResponse, "fields");
   
    if (responseFields != null) {
      for (JsonElement responseField : JsonUtils.asJsonArray(responseFields)) {
        JsonObject response = JsonUtils.asJsonObject(responseField);
        String name = response.get("name").getAsString();
        String cssSelector = response.get("cssSelector").getAsString();
        this.addResponseField(name, cssSelector);
      }
    }
  }

  private void setFunctionName(JsonObject jsonRequest) {
    JsonElement functionName = jsonRequest.get("functionName");
    if (functionName != null) {
      this.functionName = functionName.getAsString();
    } else {
      System.out.println("ERROR: Request object did not contain function name");
    }
  }

  private void setHeaders(JsonElement headers) {
    JsonArray array_headers = JsonUtils.asJsonArray(headers);
    if (array_headers != null) {
      for (JsonElement jHeader : array_headers) {
        JsonObject header = JsonUtils.asJsonObject(jHeader);
        String name = header.get("name").getAsString();
        String value = header.get("value").getAsString();
        this.addHeader(name, value);
        if (Parameter.isParameter(value)) {
          this.addParameter(new Parameter(value));
        }
      }
    }
  }

  private void setPostData(JsonElement jsonPostData) {
    JsonArray array_postDataParams = null;
    if(jsonPostData != null) array_postDataParams = JsonUtils.asJsonArray(jsonPostData);
   
    if (array_postDataParams != null) {
      for (JsonElement postParam : array_postDataParams) {
        JsonObject param = JsonUtils.asJsonObject(postParam);
        String name = param.get("name").getAsString();
        String value = param.get("value").getAsString();
        this.addPostData(name, value);
        if (Parameter.isParameter(value)) {
          this.addParameter(new Parameter(value));
        }
      }
    } else {
      // Log if postData is empty for POST request (it shouldn't be)
      if ("POST".equals(this.getMethod())) {
        System.out.println("WARNING: POST request to " + this.getUrl()
            + " contains no postData");
      }
    }
  }

  private void setQueryString(JsonElement queryStringParams) {
    JsonArray array_params = JsonUtils.asJsonArray(queryStringParams);
    if (array_params != null) {
      for (JsonElement jQueryParam : array_params) {
        JsonObject queryParam = JsonUtils.asJsonObject(jQueryParam);
        String name = queryParam.get("name").getAsString();
        String value = queryParam.get("value").getAsString();
        this.addQueryStringParam(name, value);
        if (Parameter.isParameter(value)) {
          this.addParameter(new Parameter(value));
        }
      }
    }
  }

  private void setRequestMethod(JsonObject jsonRequest) {
    String method = JsonUtils.findElement(jsonRequest, "method").getAsString();
    if (method != null) {
      this.method = method;
    } else {
      System.out.println("WARNING: Request did not contain method");
    }
  }

  private void setUrl(JsonElement jsonRequest) {
    if (jsonRequest != null) {
      String url = jsonRequest.getAsString();
      String[] urlParts = url.split("@");
     
      for(int i = 0; i < urlParts.length; i ++) {
        if(i % 2 == 1) this.addParameter( new Parameter("@" + urlParts[i] + "@"));
      }

      this.url = url;
    }
  }

  private void addParameter(Parameter param) {
    parameters.add(param);
  }
 
  private void addResponseField(String name, String cssSelector) {
    responseFields.put(name, cssSelector);
  }

  private void addHeader(String header, String value) {
    headers.put(header, value);
  }

  private void addPostData(String name, String value) {
    this.postData.put(name, value);
  }

  private void addQueryStringParam(String name, String value) {
    this.queryString.put(name, value);
  }

  public Set<Parameter> getParameters() {
    return parameters;
  }
 
  public Map<String, String> getResponseFields() {
    return responseFields;
  }

  public String getFunctionName() {
    return functionName;
  }

  public Map<String, String> getHeaders() {
    return headers;
  }

  public String getHttpVersion() {
    return httpVersion;
  }

  public String getMethod() {
    return method;
  }

  public Map<String, String> getPostData() {
    return postData;
  }

  public Map<String, String> getQueryString() {
    return queryString;
  }

  public String getUrl() {
    return url;
  }

  public void printHeaders() {
    System.out.println(headers);
  }

  private void removeHeader(String header) {
    headers.remove(header);
  }
}
TOP

Related Classes of gargl.typedefinitions.Function

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.