Package gargl.main

Source Code of gargl.main.InputParser

package gargl.main;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import gargl.typedefinitions.Function;
import gargl.typedefinitions.GarglModule;
import gargl.utilities.JsonUtils;


/**
* @author mross
*
*/
public class InputParser {

  private String filename;

  /**
   * @param filename
   *            the input filename for the parser to read
   */
  public InputParser(String filename) {
    this.filename = filename;
  }

  /**
   * This function reads in the file supplied in the constructor, parses the
   * JSON, and creates a Module with all of the data necessary to generate a
   * class
   *
   * @return a Module containing all of the requests and metadata for the
   *         given file
   */
  public GarglModule parseAndConvert() {
    // Initialize JSON parser
    Gson gson = new Gson();
    String output = new String();
    try {
      output = readFile(filename);
    } catch (FileNotFoundException e) {
      System.out.println("Error: " + filename
          + " does not exist, please specify another file");
      System.exit(0);
    } catch (IOException e) {
      e.printStackTrace();
    }

    // Get metadata for the Module
    List<JsonElement> requestElements = new ArrayList<JsonElement>();
    JsonObject moduleJsonObject = gson.fromJson(output, JsonObject.class);

    JsonElement moduleNameElement = moduleJsonObject.get("moduleName");
    JsonElement moduleDescriptionElement = moduleJsonObject.get("moduleDescription");
    JsonElement moduleVersionElement = moduleJsonObject.get("moduleDescription");

    String moduleName = "default_module_name";
    String moduleDescription = "default_module_description";
    String moduleVersion = "1.0";

    if (moduleNameElement != null && !moduleNameElement.getAsString().isEmpty()) {
      moduleName = moduleNameElement.getAsString();
    }

    if (moduleDescriptionElement != null && !moduleDescriptionElement.getAsString().isEmpty()) {
      moduleDescription = moduleDescriptionElement.getAsString();
    }
   
    if (moduleVersionElement != null && !moduleDescriptionElement.getAsString().isEmpty()) {
      moduleDescription = moduleVersionElement.getAsString();
    }

    // Get all 'functions' as JsonObjects from the file and add them as a
    // list
    JsonElement functions = JsonUtils.findElement(moduleJsonObject, "functions");
    if (functions != null) {
      if (functions.isJsonArray()) {
        JsonArray requests_array = functions.getAsJsonArray();
        for (JsonElement requestElement : requests_array) {
          if (requestElement.isJsonObject()) {
            JsonObject request = requestElement.getAsJsonObject();
            requestElements.add(request);
          }
        }
      }
    }
    else{
      System.out.println("Error: Invalid file format. File does not contain \'functions\' element");
      System.exit(0);
    }

    // Parse all JsonObject requests into Requests
    List<Function> requests = new ArrayList<Function>();
    for (JsonElement jsonRequest : requestElements) {
      JsonObject request = JsonUtils.asJsonObject(jsonRequest);
      if (request != null) {
        if (request.get("functionName") != null
            && !request.get("functionName").getAsString().isEmpty()) {
          // Create Request from JSON Request
          requests.add( new Function(request));
        } else {
          System.out
              .println("WARNING: Function not generated because function is empty!");
        }
      }
    }

    // return Module containing metadata (e.g. name, description) and
    // Requests
    return new GarglModule(moduleName, moduleDescription, moduleVersion, requests);
  }

  /**
   * @param filename
   *            the name of a file to read
   * @return a String with the contents of the file
   * @throws IOException
   */
  private static String readFile(String filename) throws IOException {
    BufferedReader reader = new BufferedReader(new FileReader(filename));
    String line = null;

    StringBuilder sb = new StringBuilder();
    while ((line = reader.readLine()) != null) {
      for (char c : line.toCharArray()) {
        sb.append(c);
      }
      sb.append("\n");
    }

    return sb.toString();
  }

}
TOP

Related Classes of gargl.main.InputParser

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.