Contour.java [src/java/crlmod/nodes] Revision:   Date:
/*
 * $Id: 1.0+62 Contour.java a170e1637ffa 2021-12-20 od $
 *
 * This file is part of the Cloud Services Integration Platform (CSIP),
 * a Model-as-a-Service framework, API, and application suite.
 *
 * 2012-2024, OMSLab, Colorado State University.
 *
 * OMSLab licenses this file to you under the MIT license.
 * See the LICENSE file in the project root for more information.
 */
package crlmod.nodes;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import crlmod.utils.NodeTranslator;
import org.codehaus.jettison.json.JSONException;
import org.w3c.dom.Document;

public class Contour {

  public final String file_key;
  public String name;
  public String path;
  public String date;
  public String owner;
  public String password;
  public String status;
  public String type;
  public String rel;
  public String abs;
  public String descrip;
  public String scienceVersion;
  public String r2Data;


  public Contour(String file_key, String name, String path, String date, String owner, String password) {
    this.file_key = file_key;
    this.name = name;
    this.path = path;
    this.date = date;
    this.owner = owner;
    this.password = password;
  }


  public Contour(String file_key) {
    this.file_key = file_key;
  }


  public String getFile_key() {
    return file_key;
  }


  public String getName() {
    return name;
  }


  public String getPath() {
    return path;
  }


  public String getDate() {
    return date;
  }


  public String getR2Data() {
    return r2Data;
  }


  public String getOwner() {
    return owner;
  }


  public String getPassword() {
    return password;
  }


  public String popPrev(Connection connection) throws SQLException {
    try (Statement statement = connection.createStatement()) {
      String query = "SELECT file_name, file_path,\n"
          + "CASE \n"
          + "WHEN published_date is not null THEN 'published' \n"
          + "WHEN approved_date is not null THEN 'approved' \n"
          + "WHEN imported_date is not null THEN 'pending' \n"
          + "END as status \n"
          + "FROM file_metadata \n"
          + "WHERE file_key = " + file_key + "\n"
          + "AND object_key = 'cst'";

      try (ResultSet resultSet = statement.executeQuery(query)) {
        if (!resultSet.next()) {
          return "No contours found with file key " + file_key;
        }
        name = resultSet.getString("file_name");
        path = resultSet.getString("file_path");
        status = resultSet.getString("status");
      }
    }
    return null;
  }


  public String populate(Connection connection) throws SQLException {

    try (Statement statement = connection.createStatement()) {
      String query;
      System.out.println(file_key);
      //get type
      query = "SELECT param_name,param_value \n"
          + "FROM file_data \n"
          + "WHERE param_name = 'CONTOUR_TYPE' \n"
          + "AND file_key = " + file_key + "\n";
      try (ResultSet resultSet = statement.executeQuery(query)) {
        if (resultSet.next()) {
          type = resultSet.getString("param_value");
        }
      }
      statement.clearBatch();

      //get rel
      query = "SELECT param_name,param_value \n"
          + "FROM file_data \n"
          + "WHERE param_name = 'CONTOUR_REL' \n"
          + "AND file_key = " + file_key + "\n";
      try (ResultSet resultSet = statement.executeQuery(query)) {
        if (resultSet.next()) {
          rel = resultSet.getString("param_value");
        }
      }
      statement.clearBatch();

      //get abs
      query = "SELECT param_name,param_value \n"
          + "FROM file_data \n"
          + "WHERE param_name = 'CONTOUR_ABS' \n"
          + "AND file_key = " + file_key + "\n";
      try (ResultSet resultSet = statement.executeQuery(query)) {
        if (resultSet.next()) {
          abs = resultSet.getString("param_value");
        }
      }
      statement.clearBatch();

      //get width
      query = "SELECT param_name,param_value \n"
          + "FROM file_data \n"
          + "WHERE param_name = 'RUSLE2:SCIENCEVERSION' \n"
          + "AND file_key = " + file_key + "\n";
      try (ResultSet resultSet = statement.executeQuery(query)) {
        if (resultSet.next()) {
          scienceVersion = resultSet.getString("param_value");
        }
      }
      statement.clearBatch();

      //get description
      query = "SELECT param_name,param_value \n"
          + "FROM file_data \n"
          + "WHERE param_name = 'CONTOUR_SYSTEM_DESCRIP' \n"
          + "AND file_key = " + file_key + "\n";
      try (ResultSet resultSet = statement.executeQuery(query)) {
        if (resultSet.next()) {
          descrip = resultSet.getString("param_value");
        }
      }
      statement.clearBatch();
    }
    return null;
  }


  public String getContourData(boolean r2) throws SQLException, JSONException, ParserConfigurationException {
    String error = null;
    if (r2) {
      DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
      DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

      // root elements
      Document doc = docBuilder.newDocument();
      error = NodeTranslator.getContourR2XML(this, doc);
      if (error != null) {
        return error;
      }
      r2Data = crlmod.utils.Utils.getStringFromDocument(doc);
    }
    return null;
  }
}