@@ -1,7 +1,7 @@ |
package m.cfa; |
|
import cfa.guiDrought_Model; |
-import csip.AbstractModelService; |
+import csip.ModelDataService; |
import java.util.Map; |
import java.util.concurrent.Callable; |
import javax.ws.rs.Path; |
@@ -18,85 +18,79 @@ |
@Description("drought") |
@VersionInfo("1.0") |
@Path("m/cfa/drought/1.0") |
-public class Drought_V1_0 extends AbstractModelService { |
+public class Drought_V1_0 extends ModelDataService { |
|
guiDrought_Model model = new guiDrought_Model(); |
|
@Override |
- protected Callable<String> createCallable() throws Exception { |
- return new Callable<String>() { |
- @Override |
- public String call() throws Exception { |
- Map<String, JSONObject> m = getParamMap(); |
+ protected String process() throws Exception { |
+ model.setMainFolder(getWorkspaceDir().toString()); |
+ model.setDatabase(getStringParam("database")); |
+ model.setOrganizationName(getStringParam("org")); |
+ model.setStationID(getStringParam("station_id")); |
+ model.setStationName(getStringParam("station_name")); |
+ model.setBeginDate(getStringParam("begin_date")); |
+ model.setEndDate(getStringParam("end_date")); |
+ model.setLambdaString(getStringParam("lambda_string")); |
+ model.setAction(getStringParam("action")); |
+ model.setPhiValues(getStringParam("phi_values")); |
+ model.setThetaValues(getStringParam("theta_values")); |
+ model.setDroughtLimit(getDoubleParam("drought_limit")); |
+ model.setUseSTORETretrieval(getBooleanParam("useSTORETretrieval")); |
+ model.setSTORETdata(getStringParam("STORETdata")); |
+ model.setMergeDatasets(getBooleanParam("merge_datasets")); |
+ model.setMergeMethod(getStringParam("merge_method")); |
+ model.setUserData(getStringParam("user_data")); |
|
- model.setMainFolder(getWorkspaceDir().toString()); |
- model.setDatabase(m.get("database").getString(VALUE)); |
- model.setOrganizationName(m.get("org").getString(VALUE)); |
- model.setStationID(m.get("station_id").getString(VALUE)); |
- model.setStationName(m.get("station_name").getString(VALUE)); |
- model.setBeginDate(m.get("begin_date").getString(VALUE)); |
- model.setEndDate(m.get("end_date").getString(VALUE)); |
- model.setLambdaString(m.get("lambda_string").getString(VALUE)); |
- model.setAction(m.get("action").getString(VALUE)); |
- model.setPhiValues(m.get("phi_values").getString(VALUE)); |
- model.setThetaValues(m.get("theta_values").getString(VALUE)); |
- model.setDroughtLimit(m.get("drought_limit").getDouble(VALUE)); |
- model.setUseSTORETretrieval(m.get("useSTORETretrieval").getBoolean(VALUE)); |
- model.setSTORETdata(m.get("STORETdata").getString(VALUE)); |
- model.setMergeDatasets(m.get("merge_datasets").getBoolean(VALUE)); |
- model.setMergeMethod(m.get("merge_method").getString(VALUE)); |
- model.setUserData(m.get("user_data").getString(VALUE)); |
- |
- model.run(); |
- return EXEC_OK; |
- } |
- }; |
+ model.run(); |
+ return EXEC_OK; |
} |
|
@Override |
- public File[] postprocess() throws Exception { |
- //This result array is more complex because drought can pass back 1, 2, or 5 graphs |
+ protected void postProcess() throws Exception { |
+ //This result array is more complex because drought analysis can pass back 1, 2, or 5 graphs |
+ // files |
+ if(model.getAction().equalsIgnoreCase("all")){ |
+ putResult(model.getResult(), |
+ new File(model.getTimeseriesGraph()), |
+ new File(model.getColumnChart()), |
+ new File(model.getFittedDataGraph()), |
+ new File(model.getProjectedDataGraph()), |
+ new File(model.getDroughtRecurrenceGraph()), |
+ //Below are the result graph files for use by JSHighCharts on eRAMS for duplicating the above graphs |
+ model.getTimeseriesOutput(), |
+ model.getColumnChartOutput(), |
+ model.getFittedGraphOutput(), |
+ model.getProjectedGraphOutput(), |
+ model.getRecurrenceGraphOutput()); |
|
+ }else if(model.getAction().equalsIgnoreCase("optimizeModel")){ |
+ if(model.getThetaValues().equalsIgnoreCase("")){ |
+ //The drought model used is AR(p) so only 1 graph |
+ putResult(new File(model.getOptimizedModel_ARgraph())); |
+ }else{ |
+ //The drought model used is ARMA(p,q) so only 2 graphs |
+ putResult(new File(model.getOptimizedModel_ARMAgraphs()[0]), |
+ new File(model.getOptimizedModel_ARMAgraphs()[1])); |
+ } |
+ }else{ |
+ putResult(new File(model.getFittedDataGraph())); |
+ } |
+ |
+ // values |
if (model.getAction().equalsIgnoreCase("all")) { |
- |
- return Services.toFiles(model.getResult().getName(), |
- model.getTimeseriesGraph(), |
- model.getColumnChart(), |
- model.getFittedDataGraph(), |
- model.getProjectedDataGraph(), |
- model.getDroughtRecurrenceGraph(), |
- //Below are the result graph files for use by JSHighCharts on eRAMS for duplicating the above graphs |
- model.getTimeseriesOutput().getName(), |
- model.getColumnChartOutput().getName(), |
- model.getFittedGraphOutput().getName(), |
- model.getProjectedGraphOutput().getName(), |
- model.getRecurrenceGraphOutput().getName()); |
- |
- } else if (model.getAction().equalsIgnoreCase("optimizeModel")) { |
- return Services.toFiles(model.get_optimizeModel_output()); |
- |
- } else { |
- return Services.toFiles(model.getFittedDataGraph()); |
- } |
- } |
- |
- @Override |
- protected JSONArray createResults() throws Exception { |
- //This result array is more complex because drought analysis can pass back 1, 2, or 5 graphs |
- if (model.getAction().equalsIgnoreCase("all")) { |
- JSONArray result = new JSONArray(); |
- result.put(JSONUtils.data("len", model.getLen())); |
- result.put(JSONUtils.data("start", model.getStart())); |
- result.put(JSONUtils.data("end", model.getEnd())); |
- result.put(JSONUtils.data("data_source", model.getDataSource())); |
- result.put(JSONUtils.data("drought_limit", model.getDroughtLimit())); |
+ putResult("len", model.getLen()); |
+ putResult("start", model.getStart()); |
+ putResult("end", model.getEnd()); |
+ putResult("data_source", model.getDataSource()); |
+ putResult("drought_limit", model.getDroughtLimit()); |
//Get other results |
- result.put(JSONUtils.data("drought_summary",model.getResult().getName())); |
- result.put(JSONUtils.data("graph1", model.getTimeseriesGraph())); |
- result.put(JSONUtils.data("graph2", model.getColumnChart())); |
- result.put(JSONUtils.data("graph3", model.getFittedDataGraph())); |
- result.put(JSONUtils.data("graph4", model.getProjectedDataGraph())); |
- result.put(JSONUtils.data("graph5", model.getDroughtRecurrenceGraph())); |
+ putResult("drought_summary",model.getResult().getName()); |
+ putResult("graph1", model.getTimeseriesGraph()); |
+ putResult("graph2", model.getColumnChart()); |
+ putResult("graph3", model.getFittedDataGraph()); |
+ putResult("graph4", model.getProjectedDataGraph()); |
+ putResult("graph5", model.getDroughtRecurrenceGraph()); |
|
//Get result files for JSHighCharts |
String graphDataFiles = model.getTimeseriesOutput().getName() + "|" + |
@@ -104,48 +98,35 @@ |
model.getFittedGraphOutput().getName() + "|" + |
model.getProjectedGraphOutput().getName() + "|" + |
model.getRecurrenceGraphOutput().getName(); |
- result.put(JSONUtils.data("graph_data_files", graphDataFiles)); |
- return result; |
+ putResult("graph_data_files", graphDataFiles); |
|
} else if (model.getAction().equalsIgnoreCase("optimizeModel")) { |
- String[] graphs = model.get_optimizeModel_output(); |
if (model.getThetaValues().equalsIgnoreCase("")) { |
//The drought model is AR(p) so only 1 graph |
- String graph1 = graphs[0]; |
- |
- JSONArray result = new JSONArray(); |
- result.put(JSONUtils.data("len", model.getLen())); |
- result.put(JSONUtils.data("start", model.getStart())); |
- result.put(JSONUtils.data("end", model.getEnd())); |
- result.put(JSONUtils.data("data_source", model.getDataSource())); |
- result.put(JSONUtils.data("drought_summary", FileUtils.readFileToString(model.getResult()))); |
- result.put(JSONUtils.data("graph1", graph1)); |
- return result; |
+ putResult("len", model.getLen()); |
+ putResult("start", model.getStart()); |
+ putResult("end", model.getEnd()); |
+ putResult("data_source", model.getDataSource()); |
+ putResult("drought_summary", FileUtils.readFileToString(model.getResult())); |
+ putResult("graph1", model.getOptimizedModel_ARgraph()); |
} else { |
//The drought model used is ARMA(p,q) so only 2 graphs |
- String graph1 = graphs[0]; |
- String graph2 = graphs[1]; |
- |
- JSONArray result = new JSONArray(); |
- result.put(JSONUtils.data("len", model.getLen())); |
- result.put(JSONUtils.data("start", model.getStart())); |
- result.put(JSONUtils.data("end", model.getEnd())); |
- result.put(JSONUtils.data("data_source", model.getDataSource())); |
- result.put(JSONUtils.data("drought_summary", FileUtils.readFileToString(model.getResult()))); |
- result.put(JSONUtils.data("graph1", graph1)); |
- result.put(JSONUtils.data("graph2", graph2)); |
- return result; |
+ putResult("len", model.getLen()); |
+ putResult("start", model.getStart()); |
+ putResult("end", model.getEnd()); |
+ putResult("data_source", model.getDataSource()); |
+ putResult("drought_summary", FileUtils.readFileToString(model.getResult())); |
+ putResult("graph1", model.getOptimizedModel_ARMAgraphs()[0]); |
+ putResult("graph2", model.getOptimizedModel_ARMAgraphs()[1]); |
} |
} else { |
//Return only one graph and updated parameter info |
- JSONArray result = new JSONArray(); |
- result.put(JSONUtils.data("len", model.getLen())); |
- result.put(JSONUtils.data("start", model.getStart())); |
- result.put(JSONUtils.data("end", model.getEnd())); |
- result.put(JSONUtils.data("data_source", model.getDataSource())); |
- result.put(JSONUtils.data("drought_summary", FileUtils.readFileToString(model.getResult()))); |
- result.put(JSONUtils.data("graph1", model.getFittedDataGraph())); |
- return result; |
+ putResult("len", model.getLen()); |
+ putResult("start", model.getStart()); |
+ putResult("end", model.getEnd()); |
+ putResult("data_source", model.getDataSource()); |
+ putResult("drought_summary", FileUtils.readFileToString(model.getResult())); |
+ putResult("graph1", model.getFittedDataGraph()); |
} |
} |
} |