Displaying differences for changeset
 
display as  

src/java/cfa/guiBaseflow_Model.java

@@ -1,8 +1,6 @@
 package cfa;
 
-import csip.Config;
 import csip.Executable;
-import csip.utils.Binaries;
 import java.awt.Color;
 import java.io.BufferedReader;
 import java.io.File;
@@ -17,7 +15,6 @@
 import java.util.Arrays;
 import java.util.Date;
 import java.util.Iterator;
-import oms3.util.ProcessComponent;
 import org.jfree.chart.ChartUtilities;
 import org.jfree.chart.JFreeChart;
 import org.jfree.chart.axis.DateAxis;
@@ -29,7 +26,7 @@
 import org.jfree.data.time.TimeSeries;
 
 /**
- * Last Updated: 26-January-2015
+ * Last Updated: 23-March-2015
  * @author Tyler Wible
  * @since 15-June-2012
  */
@@ -1046,23 +1043,7 @@
 
             //Call BFLOW model
             //Expected Input: "baseflow.txt" and "file.lst"
-//            String binDir = Config.getString("m.bin.dir", "/tmp/csip/bin");
-//            File bflow = Binaries.unpackResource("/bin/win-x86/bflow.exe", new File(binDir));
-//            ProcessComponent pc = new ProcessComponent();
-//
-//            if (File.pathSeparatorChar == ':') {
-//                pc.exe = Config.getString("wine.path", "/usr/bin/wine");
-//                pc.args = new String[]{bflow.toString()};
-//            } else {
-//                pc.exe = bflow.toString();
-//                pc.args = new String[]{};
-//            }
-//            pc.working_dir = mainFolder;
-//            pc.execute();
-            
-            // this is all that is needed:
-            e.exec();
-            
+            e.exec();            
             
             //Expected Output: "baseflow.dat" and "baseflow.out"
             if (!new File(mainFolder, "baseflow.dat").exists()) {
@@ -1094,17 +1075,6 @@
 
     public static void main(String[] args) throws IOException, InterruptedException, Exception {
         guiBaseflow_Model baseflow_Model = new guiBaseflow_Model();
-        //Set inputs
-//        assert args.length > 0;
-//        baseflow_Model.setMainFolder(args[0]);    //The output location of the graph
-//        baseflow_Model.setFileName(args[1]);      //The name of the output graph and summary text file
-//        baseflow_Model.setOrganizationName(args[2]);//Supervising organization of the station (only used for STORET stations)
-//        baseflow_Model.setStationID(args[3]);     //The station ID used to retrieve the station's flow data
-//        baseflow_Model.setDrainageArea(Double.parseDouble(args[4]));  //The drainage area of the basin to the site of interest in square miles
-//        baseflow_Model.setModelType(args[5]);     //The baseflow model to be run ("BFLOW" by the SWAT group or "HYSEP" by USGS)
-//        baseflow_Model.setBeginDate(args[6]);     //Begin date of analysis
-//        baseflow_Model.setEndDate(args[7]);       //End date of analysis
-
         //Run model
         baseflow_Model.run(null);
     }

src/java/cfa/guiDrought_Model.java

@@ -44,7 +44,7 @@
 import org.jfree.ui.TextAnchor;
 
 /**
-* Last Updated: 26-January-2015
+* Last Updated: 24-March-2015
 * @author Tyler Wible
 * @since 10-July-2012
 */
@@ -93,19 +93,12 @@
     public String getDroughtRecurrenceGraph(){
         return "drought5_recurrence.jpg";
     }
-    public String[] get_optimizeModel_output() {
-        if(thetaValues.equalsIgnoreCase("")){
-            //The drought model used is AR(p) so only 1 graph
-            String[] graphs = new String[1];
-            graphs[0] = "optimize_drought_graph1.jpg";
-            return graphs;
-        }else{
-            //The drought model used is ARMA(p,q) so only 2 graph
-            String[] graphs = new String[2];
-            graphs[0] = "optimize_drought_graph3.jpg";
-            graphs[1] = "optimize_drought_graph4.jpg";
-            return graphs;
-        }
+    public String getOptimizedModel_ARgraph(){
+        return "optimize_drought_graph1.jpg";
+    }
+    public String[] getOptimizedModel_ARMAgraphs(){
+        String[] graphs = {"optimize_drought_graph3.jpg", "optimize_drought_graph4.jpg"};
+        return graphs;
     }
     public File getTimeseriesOutput(){
         //This output file is for use with JSHighCharts
@@ -1072,8 +1065,7 @@
         JFreeChart chart = new JFreeChart("AR(p) Parameter Optimization", graphing.titleFont, plot, false);
 
         try{
-            String[] graphNames = get_optimizeModel_output();
-            String path = mainFolder + File.separator + graphNames[0];
+            String path = mainFolder + File.separator + getOptimizedModel_ARMAgraphs();
             ChartUtilities.saveChartAsJPEG(new File(path), chart, 1280, 800);
             System.out.println("Graph located at:\t" + path);
         }catch(IOException e){
@@ -1208,8 +1200,7 @@
         JFreeChart chart = new JFreeChart("ARMA(p, q) " + method + " Parameter Optimization", graphing.titleFont, plot, false);
 
         try{
-            String[] graphNames = get_optimizeModel_output();
-            String path = mainFolder + File.separator + graphNames[graphNumber-3];
+            String path = mainFolder + File.separator + getOptimizedModel_ARMAgraphs()[graphNumber-3];
             ChartUtilities.saveChartAsJPEG(new File(path), chart, 1280, 800);
             System.out.println("Graph located at:\t" + path);
         }catch(IOException e){

src/java/m/cfa/Drought_V1_0.java

@@ -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());
         }
     }
 }