V1_0.java [src/java/m/wqm/soilpestlosspot] Revision: adff553c90716fb46ed91582190fd19597594e86  Date: Mon Jun 01 11:21:47 MDT 2015
package m.wqm.soilpestlosspot;

/**
 *
 * @author RUMPAL SIDHU
 */
import csip.ModelDataService;
import csip.utils.JSONUtils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Map;
import javax.ws.rs.Path;
import oms3.annotations.Description;
import oms3.annotations.Name;
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONObject;

@Name("WQM-10")
@Description("Soil/Pesticide Interaction Loss Potentials")
@Path("m/soilpestlosspot/1.0")

public class V1_0 extends ModelDataService {

    ArrayList<m.wqm.soilpestlosspot.Input> components = new ArrayList<>(); // store the set of all input soilcomponents as objects
    ArrayList<m.wqm.soilpestlosspot.Result> result = new ArrayList<>();  // store the result as objects

    @Override
    // reading the inputs from the json file into input object and placing it in the arraylist
    protected void preProcess() throws Exception {
        JSONArray groups = getJSONArrayParam("components");
        for (int i = 0; i < groups.length(); i++) {
            Map<String, JSONObject> group = JSONUtils.preprocess(groups.getJSONArray(i));
            int AoAId = JSONUtils.getIntParam(group, "AoAId", 0);
            int operation_id = JSONUtils.getIntParam(group, "operation_id", 0);
            String op_pesticide_id = JSONUtils.getStringParam(group, "op_pesticide_id", "err");
            String ai_plp = JSONUtils.getStringParam(group, "ai_plp", "err");
            String ai_psrp = JSONUtils.getStringParam(group, "ai_psrp", "err");
            String ai_parp = JSONUtils.getStringParam(group, "ai_parp", "err");
            String aoa_pslp = JSONUtils.getStringParam(group, "aoa_pslp", "err");
            String aoa_ssrp = JSONUtils.getStringParam(group, "aoa_ssrp", "err");
            String aoa_sarp = JSONUtils.getStringParam(group, "aoa_sarp", "err");
            String aoa_rain_prob = JSONUtils.getStringParam(group, "aoa_rain_prob", "err");
            m.wqm.soilpestlosspot.Input input = new m.wqm.soilpestlosspot.Input(AoAId, operation_id, op_pesticide_id, ai_plp, ai_psrp, ai_parp, aoa_pslp, aoa_ssrp, aoa_sarp, aoa_rain_prob);
            components.add(input);
        }
    }

    @Override
    protected String process() throws Exception {
        Connection conn = null;
        Statement statement = null;
        Class.forName("org.postgresql.Driver");
        conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/WQM Data Mart 20150324", "postgres", "postgresql");
        conn.setAutoCommit(false);
        statement = conn.createStatement();

        for (m.wqm.soilpestlosspot.Input ip : components) {

            String query = "SELECT wqm_ilp FROM wqm_soil_pest_interaction_leaching WHERE wqm_plp='" + ip.ai_plp + "'AND wqm_slp='" + ip.aoa_pslp + "';";
            ResultSet results = statement.executeQuery(query);
            String op_pest_ilp = "err";
            while (results.next()) {
                op_pest_ilp = results.getString("wqm_ilp");
            }
            if (ip.aoa_rain_prob.equals("LOW")) {
                switch (op_pest_ilp) {
                    case "HIGH":
                        op_pest_ilp = "INTERMEDIATE";
                        break;
                    case "INTERMEDIATE":
                        op_pest_ilp = "LOW";
                        break;
                    case "LOW":
                        op_pest_ilp = "VERY LOW";
                        break;
                }
            }

            query = "SELECT wqm_isrp FROM wqm_soil_pest_interaction_solution_runoff WHERE wqm_psrp='" + ip.ai_psrp + "'AND wqm_ssrp ='" + ip.aoa_ssrp + "';";
            results = statement.executeQuery(query);
            String op_pest_isrp = "err";
            while (results.next()) {
                op_pest_isrp = results.getString("wqm_isrp");
            }
            if (ip.aoa_rain_prob.equals("LOW")) {
                switch (op_pest_isrp) {
                    case "HIGH":
                        op_pest_isrp = "INTERMEDIATE";
                        break;
                    case "INTERMEDIATE":
                        op_pest_isrp = "LOW";
                        break;
                    case "LOW":
                        op_pest_isrp = "VERY LOW";
                        break;
                }
            }

            query = "SELECT wqm_iarp FROM wqm_soil_pest_interaction_adsorbed_runoff WHERE wqm_parp='" + ip.ai_parp + "'AND wqm_sarp='" + ip.aoa_sarp + "';";
            results = statement.executeQuery(query);
            String op_pest_iarp = "err";
            while (results.next()) {
                op_pest_iarp = results.getString("wqm_iarp");
            }
            if (ip.aoa_rain_prob.equals("LOW")) {
                switch (op_pest_iarp) {
                    case "HIGH":
                        op_pest_iarp = "INTERMEDIATE";
                        break;
                    case "INTERMEDIATE":
                        op_pest_iarp = "LOW";
                        break;
                    case "LOW":
                        op_pest_iarp = "VERY LOW";
                        break;
                }
            }

            m.wqm.soilpestlosspot.Result result1 = new m.wqm.soilpestlosspot.Result(ip.AoAId, ip.operation_id, ip.op_pesticide_id, op_pest_ilp, op_pest_isrp, op_pest_iarp);
            result.add(result1);
        }
        return EXEC_OK;
    }

    @Override
    //writing the results back to JSON
    protected void postProcess() throws Exception {
        JSONArray resultArr = new JSONArray();
        for (m.wqm.soilpestlosspot.Result rs1 : result) {
            JSONArray tmpArr = new JSONArray();
            tmpArr.put(JSONUtils.dataDesc("AoAId", rs1.AoAId, "Area of Analysis Identifier"));
            tmpArr.put(JSONUtils.dataDesc("operation_id", rs1.operation_id, "Pesticide Application Operation Identifier"));
            tmpArr.put(JSONUtils.dataDesc("op_pesticide_id", rs1.op_pesticide_id, "Pesticide identifier, EPA Pesticide Chemical Code (PC_CODE)"));
            tmpArr.put(JSONUtils.dataDesc("op_pest_ilp", rs1.op_pest_ilp, "Operation Soil Pesticide Interaction Leaching Potential"));
            tmpArr.put(JSONUtils.dataDesc("op_pest_isrp", rs1.op_pest_isrp, "Operation Soil Pesticide Interaction Solution Runoff Potential"));
            tmpArr.put(JSONUtils.dataDesc("op_pest_iarp", rs1.op_pest_iarp, "Operation Soil Pesticide Interaction Adsorbed Runoff Potential"));
            resultArr.put(JSONUtils.dataDesc("pesticide summary", tmpArr, "Pest"));
        }
        putResult("operation", resultArr);
    }

}