@@ -5,52 +5,51 @@ |
* @author RUMPAL SIDHU |
*/ |
import csip.ModelDataService; |
-import static csip.ModelDataService.EXEC_OK; |
import csip.utils.JSONUtils; |
import csip.utils.Dates; |
+import csip.annotations.Polling; |
import java.sql.Connection; |
import java.sql.DriverManager; |
import java.sql.ResultSet; |
import java.sql.SQLException; |
import java.sql.Statement; |
import java.util.ArrayList; |
-import java.util.Calendar; |
import java.util.Map; |
import javax.ws.rs.Path; |
+import oms3.annotations.Name; |
import oms3.annotations.Description; |
-import oms3.annotations.Name; |
import org.codehaus.jettison.json.JSONArray; |
import org.codehaus.jettison.json.JSONObject; |
-import java.util.Date; |
import java.util.concurrent.TimeUnit; |
|
@Name("WQM-16") |
@Description("Nutrient Application Management Scores") |
@Path("m/nutappmgtscores/1.0") |
+@Polling(first = 10000, next = 2000) |
|
public class V1_0 extends ModelDataService { |
|
//SQL params here for quick modification |
private final String USER = "postgres"; |
- private final String PASS = "postgresql"; |
- private final String SERVER = "localhost:5432/postgres"; |
+ private final String PASS = "admin"; |
+ private final String HOST = "localhost"; |
+ private final String PORT = "5432"; |
+ private final String DBNAME = "postgres"; |
private final String JDBC_TYPE = "jdbc:postgresql://"; |
+ private final String CONNECTION = JDBC_TYPE + HOST + ":" + PORT + "/" + DBNAME; |
private final String CLASS_NAME = "org.postgresql.Driver"; |
|
- ArrayList<m.wqm.nutappmgtscores.Input> input = new ArrayList<>(); //Store input |
- ArrayList<m.wqm.nutappmgtscores.Result> result = new ArrayList<>(); //Store result |
+ //Request |
+ private ArrayList<Input> input; |
+ //Response |
+ private ArrayList<Result> result; |
|
@Override |
- // reading the inputs from the json file into input object and placing it in the arraylist |
protected void preProcess() throws Exception { |
- |
+ input = new ArrayList<>(); |
int AoAId = getIntParam("aoa_id", 0); |
String p_soil_test_result = getStringParam("p_soil_test_result", "err"); |
ArrayList<Crop> cropList = new ArrayList<>(); |
- |
- //System.out.println("AoAId = " + AoAId); |
- //System.out.println("p_soil_test_result = " + p_soil_test_result); |
- |
JSONArray cropIds = getJSONArrayParam("cropIds"); |
for (int i = 0; i < cropIds.length(); i++) { |
Map<String, JSONObject> mgtCropId = JSONUtils.preprocess(cropIds.getJSONArray(i)); |
@@ -58,33 +57,20 @@ |
int cropId = JSONUtils.getIntParam(mgtCropId, "mgt_crop_id", 0); |
boolean lmod = JSONUtils.getBooleanParam(mgtCropId, "from_lmod", false); |
String cropPlantDate = JSONUtils.getStringParam(mgtCropId, "crop_plant_date", "err"); |
- //Date crop_plant_date = Dates.parse(crop_plant_date_string); |
double cropYield = JSONUtils.getDoubleParam(mgtCropId, "crop_yield", 0); |
String cropYieldUnits = JSONUtils.getStringParam(mgtCropId, "crop_yield_units", "err"); |
- |
- //System.out.println("cropId = " + cropId); |
- //System.out.println("lmod = " + lmod); |
- //System.out.println("cropPlantDate = " + cropPlantDate); |
- // System.out.println("cropYield = " + cropYield); |
- //System.out.println("cropYieldUnits = " + cropYieldUnits); |
ArrayList<Nutrient> nutrientApplicationList = new ArrayList<>(); |
JSONArray applicationList = JSONUtils.getJSONArrayParam(mgtCropId, "applicationList"); |
for (int j = 0; j < applicationList.length(); j++) { |
Map<String, JSONObject> application = JSONUtils.preprocess(applicationList.getJSONArray(j)); |
String nutrient_application_date = JSONUtils.getStringParam(application, "nutrient_application_date", "err"); |
boolean incorporated = JSONUtils.getBooleanParam(application, "incorporated", false); |
- |
- //tem.out.println("nutrient_application_date = " + nutrient_application_date); |
- // System.out.println("incorporated = " + incorporated); |
ArrayList<NutrientApplied> nutrientAppliedList = new ArrayList<>(); |
JSONArray applicate = JSONUtils.getJSONArrayParam(application, "application"); |
for (int k = 0; k < applicate.length(); k++) { |
Map<String, JSONObject> a = JSONUtils.preprocess(applicate.getJSONArray(k)); |
String nutrient_applied = JSONUtils.getStringParam(a, "nutrient_applied", "err"); |
double application_rate = JSONUtils.getDoubleParam(a, "application_rate", 0); |
- //System.out.println("nutrient_applied = " + nutrient_applied); |
- //System.out.println("application_rate = " + application_rate); |
- |
nutrientAppliedList.add(new NutrientApplied(nutrient_applied, application_rate)); |
} |
nutrientApplicationList.add(new Nutrient(nutrient_application_date, incorporated, nutrientAppliedList)); |
@@ -92,42 +78,31 @@ |
cropList.add(new Crop(cropId, lmod, cropPlantDate, cropYield, cropYieldUnits, nutrientApplicationList)); |
} |
input.add(new m.wqm.nutappmgtscores.Input(AoAId, cropList, p_soil_test_result)); |
- //tem.out.println(input.size()); |
- // System.out.println("Input = " + input.get(0)); |
} |
|
@Override |
protected String process() throws Exception { |
- |
+ result = new ArrayList<>(); |
Connection conn = null; |
Statement statement = null; |
String query; |
- ResultSet resultSet = null; |
+ ResultSet resultSet; |
|
try { |
Class.forName(CLASS_NAME); |
- conn = DriverManager.getConnection(JDBC_TYPE + SERVER, USER, PASS); |
- //System.out.println("Closed = " + conn.isClosed()); |
+ conn = DriverManager.getConnection(CONNECTION, USER, PASS); |
conn.setAutoCommit(false); |
- |
statement = conn.createStatement(); |
- |
- for (m.wqm.nutappmgtscores.Input ip : input) { |
- //System.out.println("In for 1"); |
- |
+ for (Input ip : input) { |
int n_app_timing_score = 100; |
int p_app_timing_score = 100; |
- |
int app_method_score = 0; |
int n_app_rate_score = 0; |
int p_app_rate_score = 0; |
int this_crop_id = 0; |
- |
ArrayList<Crop> cropList = ip.getCropList(); |
for (Crop crop : cropList) { |
- //System.out.println("Crop loop"); |
ArrayList<Nutrient> nutrientApplicationList = crop.getNutrientApplicationList(); |
- |
//#If request payload crop is an LMOD vegetation, then convert it to a wqm_crop using the link table |
if (crop.getLmod()) { |
query = "SELECT wqm_crop_id FROM wqm_lmod_crop_link WHERE lmod_crop_id=" + crop.getMgtCropId() + ";"; |
@@ -160,16 +135,10 @@ |
} else { |
app_type = "split"; |
} |
- |
- // System.out.println("crop id" + this_crop_id); |
- // System.out.println("crop type" + crop_type); |
- // System.out.println("app type" + app_type); |
//If no nutrient_application_date (no nutrient applications for the crop) |
int ncrop_app_rate_score = 0; |
int pcrop_app_rate_score = 0; |
if (nutrientApplicationList.isEmpty()) { |
- // System.out.println("nutrientApplicationList is empty"); |
- |
//#Compute score for not fertilizing. |
query = "SELECT app_mgt_score FROM wqm_nutrient_application_mgt_scores WHERE nutrient='" + "Nitrogen" + "' AND app_mgt_kind='" + "Rate" + "' AND app_mgt_factor='" + "None" + "';"; |
resultSet = statement.executeQuery(query); |
@@ -202,18 +171,11 @@ |
} |
} |
} else { //Else #Compute N and P removal ratios |
- |
- // System.out.println("nutrientApplicationList is not empty!!!"); |
- |
double nrate = 0.0; |
double prate = 0.0; |
- |
for (Nutrient nutrient : nutrientApplicationList) { |
- // System.out.println("In nutrientApplicationList for loop!!!"); |
- |
ArrayList<NutrientApplied> nutrientAppliedList = nutrient.getNutrientAppliedList(); |
for (NutrientApplied nApplied : nutrientAppliedList) { |
- // System.out.println("nApplied = " + nApplied.getNutrientApplied()); |
if (nApplied.getNutrientApplied().equals("Nitrogen")) { |
nrate = nrate + nApplied.getApplicationRate(); |
} else { |
@@ -221,7 +183,6 @@ |
} |
} |
} |
- |
double wqm_crop_pct_dmat = 0.0; |
double wqm_pct_nitrogen = 0.0; |
double wqm_pct_phosphorus = 0.0; |
@@ -305,23 +266,18 @@ |
break; |
} |
} |
- |
//#Update N and P application management rate scores for the AoA |
n_app_rate_score = n_app_rate_score + ncrop_app_rate_score; |
p_app_rate_score = p_app_rate_score + pcrop_app_rate_score; |
} |
- |
//#Compute N and P application timing scores for the crop and update timin scores for the AoA |
int ncrop_app_timing_score = 0; |
int pcrop_app_timing_score = 0; |
for (Nutrient nutrient : nutrientApplicationList) { |
long app_day_diff = Dates.diffInMillis(crop.getCropPlantDate(), nutrient.getApplicationDate()); |
app_day_diff = TimeUnit.MICROSECONDS.convert(app_day_diff, TimeUnit.DAYS); |
- // System.out.println(app_day_diff); |
- |
ArrayList<NutrientApplied> nutrientAppliedList = nutrient.getNutrientAppliedList(); |
for (NutrientApplied nApplied : nutrientAppliedList) { |
- // System.out.println("In for nApplied"); |
switch (nApplied.getNutrientApplied()) { |
case "Nitrogen": { |
if (app_type.equals("split")) { |
@@ -381,10 +337,8 @@ |
} |
} |
} |
- // System.out.println("out of nApplied"); |
} |
for (Nutrient nutrient : nutrientApplicationList) { |
- // System.out.println("final for loop"); |
//#If any nutrient application for any crop is not incorporated, the method score for the AoA is zero |
if (!nutrient.isIncorporated()) { |
app_method_score = 0; |
@@ -394,15 +348,10 @@ |
resultSet = statement.executeQuery(query); |
while (resultSet.next()) { |
app_method_score = resultSet.getInt("app_mgt_score"); |
- |
} |
- |
} |
- |
} |
- // System.out.println("Out of final loop"); |
} |
- // System.out.println("Out"); |
//#Compute application management scores for nitrogen in groundwater, nitrogen in surface water, and phosphorus in surface water |
int nleach_app_mgt_score = n_app_rate_score + n_app_timing_score + app_method_score; |
int nsurf_app_mgt_score = n_app_rate_score + n_app_timing_score + app_method_score; |
@@ -410,12 +359,8 @@ |
m.wqm.nutappmgtscores.Result result1 = new m.wqm.nutappmgtscores.Result(ip.getAoAId(), nleach_app_mgt_score, nsurf_app_mgt_score, psurf_app_mgt_score, n_app_rate_score, n_app_timing_score, p_app_rate_score, p_app_timing_score, app_method_score); |
result.add(result1); |
} |
- // System.out.println("out of for"); |
conn.close(); |
- // System.out.println("closed = " + conn.isClosed()); |
} catch (SQLException se) { |
- // System.out.println(se.getCause()); |
- // System.out.println(se.getStackTrace()); |
LOG.info("Did not open database for WQM-16!"); |
LOG.info(se.getMessage()); |
} finally { |