Strip.java [src/java/crlmod/nodes] Revision:   Date:
/*
 * $Id: 1.0+62 Strip.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 static crlmod.utils.Utils.isNumeric;
import org.w3c.dom.Document;

/**
 *
 * @author User
 */
public class Strip {

    public final String file_key;
    public String name;
    public String path;
    public String owner;
    public String password;
    public String status;
    public String date;
    public String r2Data;
    public String scienceVersion;
    public int BarrierNumStrips;
    public String BarrierAtBottom;
    public String BarrierForWQ;
    public String BarrierManagement;
    public String BarrierRotYearsOffset;
    public String BarrierRotYearsOffsetMethod;
    public String BarrierSpecWidth;
    public String BarrierSystemDescription;
    public String BarrierType;
    public String BarrierWidthAbs;
    public String BarrierWidthRel;


    public Strip(String fk) {
        file_key = fk;
    }


    public Strip(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 String getFile_key() {
        return file_key;
    }


    public String getName() {
        return name;
    }


    public String getPath() {
        return path;
    }


    public String getOwner() {
        return owner;
    }


    public String getDate() {
        return date;
    }


    public String getPassword() {
        return password;
    }


    public String getR2Data() {
        return r2Data;
    }


    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 = 'sbs'";

            try (ResultSet resultSet = statement.executeQuery(query)) {
                if (!resultSet.next()) {
                    return "no barrier 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;
            //get science version
            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 height
            query = "SELECT param_name,param_value \n"
                    + "FROM file_data \n"
                    + "WHERE param_name = 'NUM_STRIPS_BARRIERS' \n"
                    + "AND file_key = " + file_key + "\n";
            try (ResultSet resultSet = statement.executeQuery(query)) {
                if (resultSet.next()) {
                    String str_num_strips = resultSet.getString("param_value");
                    if (!str_num_strips.isEmpty() && isNumeric(str_num_strips)) {
                        BarrierNumStrips = Integer.parseInt(str_num_strips);
                    }
                } else {
                    BarrierNumStrips = -1;
                }
            }
            statement.clearBatch();

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

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

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

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

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

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

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

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

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

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


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

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