V1_0.java [src/java/m/wqm/wqm19_pestpractscores] Revision: Date:
package m.wqm.wqm19_pestpractscores;
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
import csip.ModelDataService;
import csip.api.server.ServiceException;
import csip.annotations.Resource;
import csip.utils.JSONUtils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Map;
import javax.ws.rs.Path;
import csip.annotations.Description;
import csip.annotations.Name;
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
import wqm.utils.DBQueries;
import wqm.utils.DBResources;
import static wqm.utils.DBResources.WQM_ID;
/**
* WQM-19: Pesticide Mitigation Practice Scores
*
* @author dhawal
* @author Shaun Case
* @author anvesh
*
* @version 1.0
*/
@Name("WQM-19: Pesticide Mitigation Practice Scores (PestPractScores)")
@Description("This service computes scores for conservation practices applied "
+ "to mitigate pesticide leaching, solution runoff, adsorbed runoff, and drift.")
@Path("m/pesticide_practice_score/1.0")
@Resource(from = DBResources.class)
public class V1_0 extends ModelDataService {
private int aoaId;
private ArrayList<IPM> ipmList = new ArrayList<>();
private int pleach_practice_score, psolsurf_practice_score, padsurf_practice_score, pdrift_practice_score;
@Override
protected void preProcess() throws ServiceException, JSONException {
aoaId = parameter().getInt("AoAId");
JSONArray pestComponents = parameter().getJSONArray("pestcomponents");
for (int i = 0; i < pestComponents.length(); i++) {
Map<String, JSONObject> pestComponent = JSONUtils.preprocess(pestComponents.getJSONArray(i));
int plan_ipm_practice = JSONUtils.getIntParam(pestComponent, "plan_ipm_practice", -1);
String plan_pract_variant = JSONUtils.getStringParam(pestComponent, "plan_pract_variant", null);
if (plan_pract_variant.isEmpty()) {
plan_pract_variant = null;
}
ipmList.add(new IPM(plan_ipm_practice, plan_pract_variant));
}
}
@Override
protected void doProcess() throws SQLException, ServiceException {
try (Connection connection = resources().getJDBC(WQM_ID)) {
compute(connection);
}
}
@Override
protected void postProcess() {
results().put("AoAId", aoaId, "Area of Analysis Identifier");
results().put("pleach_practice_score", pleach_practice_score, "Conservation Practice Mitigation Score for Pesticide Leaching");
results().put("psolsurf_practice_score", psolsurf_practice_score, "Conservation Practice Mitigation Score for Pesticide Solution Runoff");
results().put("padsurf_practice_score", padsurf_practice_score, "Conservation Practice Mitigation Score for Pesticide Adsorbed Runoff");
results().put("pdrift_practice_score", pdrift_practice_score, "Conservation Practice Mitigation Score for Pesticide Drift");
}
private void compute(Connection connection) throws SQLException {
if (ipmList != null) {
for (IPM ipm : ipmList) {
pleach_practice_score += computeScore(connection, ipm, "Pesticide Leaching");
psolsurf_practice_score += computeScore(connection, ipm, "Pesticide Solution Runoff");
padsurf_practice_score += computeScore(connection, ipm, "Pesticide Adsorbed Runoff");
pdrift_practice_score += computeScore(connection, ipm, "Pesticide Drift");
}
}
}
private int computeScore(Connection connection, IPM ipm, String concern) throws SQLException {
int score = 0;
try (Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(DBQueries.WQM19Query1(ipm.plan_ipm_practice, ipm.plan_pract_variant, concern));) {
while (resultSet.next()) {
score = resultSet.getInt("ipm_practice_score");
}
}
return score;
}
static class IPM {
int plan_ipm_practice;
String plan_pract_variant;
public IPM(int plan_ipm_practice, String plan_pract_variant) {
this.plan_ipm_practice = plan_ipm_practice;
this.plan_pract_variant = plan_pract_variant;
}
}
}