Displaying differences for changeset
 
display as  

src/java/m/rhem/rhem01_runmodel/V1_0.java

@@ -5,7 +5,6 @@
  */
 package m.rhem.rhem01_runmodel;
 
-import csip.Client;
 import csip.Config;
 import csip.Executable;
 import csip.ModelDataService;
@@ -15,15 +14,9 @@
 import csip.annotations.Polling;
 import csip.annotations.Resource;
 import static csip.annotations.ResourceType.EXECUTABLE;
+import java.io.File;
 //import static csip.annotations.ResourceType.OUTPUT;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
 import java.io.IOException;
-import java.io.PrintWriter;
-import java.net.URL;
-import java.net.URLConnection;
 import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.SQLException;
@@ -32,9 +25,11 @@
 import java.util.Date;
 import java.util.logging.Level;
 import javax.ws.rs.Path;
+import m.rhem.model.AoA;
+import m.rhem.model.Parameter;
+import m.rhem.model.RhemModel;
 import oms3.annotations.Description;
 import oms3.annotations.Name;
-import org.apache.commons.io.FileUtils;
 import rhem.utils.DBQueries;
 import rhem.utils.DBResources;
 
@@ -51,7 +46,6 @@
 @Path("m/rhem/runrhem/1.0")
 @Polling(first = 10000, next = 2000)
 @Resource(from = DBResources.class)
-//@Resource(file = "/bin/win-x86/rhem_v2.3.exe", wine = true, id = "rhem", type = EXECUTABLE)
 @Resource(file = "/bin/${csip.arch}/rhem_v23.exe", wine = false, id = "rhem", type = EXECUTABLE)
 //@Resource(file = "*.par *.pre *.sum *.out *.run", type = OUTPUT)
 
@@ -89,10 +83,13 @@
             double rockCover = getDoubleParam("rockcover", 0.0);
             double litterCover = getDoubleParam("littercover", 0.0);
             double cryptogamsCover = getDoubleParam("cryptogamscover", 0.0);
-//            if (unit != 1 && unit != 2) {
-//                LOG.log(Level.SEVERE, "RHEM-01: Invalid unit");
-//                throw new ServiceException("Unit should be 1-metric or 2 - English. Digit " + unit + " is not valid.");
-//            }
+
+            //Validations
+            //The values allowed for the field unit in the request are 1 and 2. 1 is for metric units and 2 is for English units
+            if (unit != 1 && unit != 2) {
+                LOG.log(Level.SEVERE, "RHEM-01: Invalid unit");
+                throw new ServiceException("Unit should be 1-metric or 2 - English. Digit " + unit + " is not valid.");
+            }
 
             aoa = new AoA(aoaId, rhemSiteId, scenarioName,
                     scenarioDescription, unit, stateId, climatestationId,
@@ -108,24 +105,23 @@
 
     @Override
     public void doProcess() throws ServiceException {
-        long milisec = new Date().getTime();
-        parameterFileName = "scenario_input_" + milisec + ".par";
-        stormFileName = "storm_input_" + milisec + ".pre";
-        summaryFileName = "scenario_output_summary_" + milisec + ".sum";
-        detailedOutputFileName = "scenario_output_summary_" + milisec + ".out";
-        runFileName = milisec + ".run";
+        SimpleDateFormat sdf = new SimpleDateFormat("MMMM dd, YYYY, hh:mm a");
+        Date now = new Date();
+        String today = sdf.format(now);
 
-//        parameterFileName = "scenario_input_" + aoa.scenarioName + ".par";
-//        stormFileName = "storm_input_" + aoa.scenarioName + ".pre";
-//        summaryFileName = "scenario_output_summary_" + aoa.scenarioName + ".sum";
-//        detailedOutputFileName = "scenario_output_summary_" + aoa.scenarioName + ".out";
-//        runFileName = aoa.scenarioName + ".run";
-//        System.out.println(new Date().getTime());
-//
-//
-//        System.out.println("scenario_output_summary_" + aoa.scenarioName + ".out");
-//        System.out.println("Name = " + detailedOutputFileName);
+//        long milisec = new Date().getTime();
+        String fileName = aoa.getScenarioName();
+        if (fileName.length() > 15) {
+            fileName = fileName.substring(0, 15);
+        }
+        parameterFileName = "scenario_input_" + fileName + ".par";
+        stormFileName = "storm_input_" + fileName + ".pre";
+        summaryFileName = "scenario_output_summary_" + fileName + ".sum";
+        detailedOutputFileName = "scenario_output_summary_" + fileName + ".out";
+        runFileName = fileName + ".run";
+
         parameter = new Parameter(aoa);
+
         try (Connection connection = getResourceJDBC(DBResources.MSSQL_RHEM);) {
             parameter.computeParameters(connection);
         } catch (ServiceException | SQLException se) {
@@ -133,156 +129,207 @@
             throw new ServiceException("SQL problem.", se);
         }
 
-        SimpleDateFormat sdf = new SimpleDateFormat("MMMM dd, YYYY, hh:mm a");
-        Date now = new Date();
-        String today = sdf.format(now);
+//        parameterFileName = "scenario_input_" + milisec + ".par";
+//        stormFileName = "storm_input_" + milisec + ".pre";
+//        summaryFileName = "scenario_output_summary_" + milisec + ".sum";
+//        detailedOutputFileName = "scenario_output_summary_" + milisec + ".out";
+//        runFileName = milisec + ".run";
+        RhemModel rhemModel = new RhemModel(aoa.getStateId(), aoa.getClimateStationId(),
+                aoa.getScenarioName(), today, getWorkspaceDir(), parameterFileName,
+                stormFileName, runFileName, summaryFileName);
 
-        generateParamFile(parameter, today);
-        generateRunFile();
-        generateStormFile(parameter.ke, today);
+        rhemModel.generateParamFile(parameter);
+        rhemModel.generateStormFile(cligen_db, Double.parseDouble(parameter.getKe()));
+        rhemModel.generateRunFile();
+        String run = runModel();
+        System.out.println("run model = " + run);
 
-        String run = runModel();
-        System.out.println("run = " + run);
+        //If the run is successful then edit the summary file.
+        if (run == null) {
+            double avgYearlyPrecip = 0;
+            try (Connection connection = getResourceJDBC(DBResources.MSSQL_RHEM);
+                    Statement statement = connection.createStatement();) {
+                ResultSet rs = statement.executeQuery(DBQueries.RHEM01Query02(aoa.getClimateStationId()));
+                while (rs.next()) {
+                    avgYearlyPrecip = rs.getDouble("avg_yearly_precip_mm");
+                }
+            } catch (SQLException e) {
+                throw new ServiceException(e);
+            }
+            rhemModel.appendToSumFile(avgYearlyPrecip);
+        }
 
-        if (run == null) {
-            try (Connection connection = getResourceJDBC(DBResources.MSSQL_RHEM);) {
-                appendToSumFile(connection);
-            } catch (ServiceException | SQLException se) {
-                LOG.log(Level.SEVERE, "RHEM-01: Problem in editing the summary file.", se);
-                throw new ServiceException("Problem in editing the summary file.", se);
-            }
-        }
+//        long milisec = new Date().getTime();
+//        parameterFileName = "scenario_input_" + milisec + ".par";
+//        stormFileName = "storm_input_" + milisec + ".pre";
+//        summaryFileName = "scenario_output_summary_" + milisec + ".sum";
+//        detailedOutputFileName = "scenario_output_summary_" + milisec + ".out";
+//        runFileName = milisec + ".run";
+//
+////        parameterFileName = "scenario_input_" + aoa.scenarioName + ".par";
+////        stormFileName = "storm_input_" + aoa.scenarioName + ".pre";
+////        summaryFileName = "scenario_output_summary_" + aoa.scenarioName + ".sum";
+////        detailedOutputFileName = "scenario_output_summary_" + aoa.scenarioName + ".out";
+////        runFileName = aoa.scenarioName + ".run";
+////        System.out.println(new Date().getTime());
+////
+////
+////        System.out.println("scenario_output_summary_" + aoa.scenarioName + ".out");
+////        System.out.println("Name = " + detailedOutputFileName);
+//        parameter = new Parameter(aoa);
+//        try (Connection connection = getResourceJDBC(DBResources.MSSQL_RHEM);) {
+//            parameter.computeParameters(connection);
+//        } catch (ServiceException | SQLException se) {
+//            LOG.log(Level.SEVERE, "RHEM-01: SQLException.", se);
+//            throw new ServiceException("SQL problem.", se);
+//        }
+//
+//        SimpleDateFormat sdf = new SimpleDateFormat("MMMM dd, YYYY, hh:mm a");
+//        Date now = new Date();
+//        String today = sdf.format(now);
+//
+//        generateParamFile(parameter, today);
+//        generateRunFile();
+//        generateStormFile(parameter.ke, today);
+//
+//        String run = runModel();
+//        System.out.println("run = " + run);
+//
+//        if (run == null) {
+//            try (Connection connection = getResourceJDBC(DBResources.MSSQL_RHEM);) {
+//                appendToSumFile(connection);
+//            } catch (ServiceException | SQLException se) {
+//                LOG.log(Level.SEVERE, "RHEM-01: Problem in editing the summary file.", se);
+//                throw new ServiceException("Problem in editing the summary file.", se);
+//            }
+//        }
     }
 
-    private void generateParamFile(Parameter param, String today) throws ServiceException {
-
-        try (PrintWriter writer = new PrintWriter(new File(getWorkspaceDir(), parameterFileName))) {
-            writer.println("! Parameter file for scenario: " + aoa.scenarioName);
-            writer.println("! Date built: " + today + " (Version 2.3)");
-            writer.println("! Parameter units: DIAMS(mm), DENSITY(g/cc),TEMP(deg C)");
-            writer.println("BEGIN GLOBAL");
-            writer.println(String.format("        %-8s=   %s", "CLEN", param.clen));
-            writer.println(String.format("        %-8s=   %s", "UNITS", "metric"));
-            writer.println(String.format("        %-8s=   %s", "DIAMS", param.diams));
-            writer.println(String.format("        %-8s=   %s", "DENSITY", param.density));
-            writer.println(String.format("        %-8s=   %s", "TEMP", 40));
-            writer.println(String.format("        %-8s=   %s", "NELE", 1));
-            writer.println("END GLOBAL");
-            writer.println("BEGIN PLANE");
-            writer.println(String.format("        %-8s=   %s", "ID", 1));
-            writer.println(String.format("        %-8s=   %s", "LEN", param.slopeLength));
-            writer.println(String.format("        %-8s=   %s", "WIDTH", 1.0));
-            writer.println(String.format("        %-8s=   %s", "CHEZY", param.chezy));
-            writer.println(String.format("        %-8s=   %s", "RCHEZY", param.chezy));
-            writer.println(String.format("        %-8s=   %s", "SL", param.sl));
-            writer.println(String.format("        %-8s=   %s", "SX", param.sx));
-            writer.println(String.format("        %-8s=   %s", "CV", 1.00));
-            writer.println(String.format("        %-8s=   %s", "SAT", 0.25));
-            writer.println(String.format("        %-8s=   %s", "PR", 1));
-            writer.println(String.format("        %-8s=   %s", "KSS", param.kss));
-            writer.println(String.format("        %-8s=   %s", "KOMEGA", "0.000007747"));
-            writer.println(String.format("        %-8s=   %s", "KCM", "0.00029936430000"));
-            writer.println(String.format("        %-8s=   %s", "CA", 1.0));
-            writer.println(String.format("        %-8s=   %s", "IN", 0.0));
-            writer.println(String.format("        %-8s=   %s", "KE", param.ke));
-            writer.println(String.format("        %-8s=   %s", "G", param.g));
-            writer.println(String.format("        %-8s=   %s", "DIST", param.dist));
-            writer.println(String.format("        %-8s=   %s", "POR", param.por));
-            writer.println(String.format("        %-8s=   %s", "ROCK", 0.00));
-            writer.println(String.format("        %-8s=   %s", "SMAX", 1.0));
-            writer.println(String.format("        %-8s=   %s", "ADF", 0.0));
-            writer.println(String.format("        %-8s=   %s", "ALF", 0.8));
-            writer.println(String.format("        %-8s=   %s", "BARE", 0.23));
-            writer.println(String.format("        %-8s=   %s", "RSP", 1.0));
-            writer.println(String.format("        %-8s=   %s", "SPACING", 1.0));
-            writer.println(String.format("        %-8s=   %s", "FRACT", param.fract));
-            writer.println("END PLANE");
-            writer.close();
-        } catch (FileNotFoundException ex) {
-            LOG.log(Level.SEVERE, "RHEM-01: FileNotFoundException.", ex);
-            throw new ServiceException("Problem in generating the parameter file.", ex);
-        }
-    }
-
-    private void generateStormFile(double Ke, String today) throws ServiceException {
-
-        String cligenFileName = "/" + aoa.stateId.toLowerCase()
-                + "/300yr/" + aoa.stateId + "_"
-                + aoa.climatestationId + "_300yr.out";
-
-        Client cl = new Client();
-        File f = getWorkspaceFile(aoa.stateId + "_" + aoa.climatestationId + ".out");
-//        cl.doGET(cligen_db + cligenFileName, f);
-
-        try {
-            URLConnection conn = new URL(cligen_db + cligenFileName).openConnection();
-            FileUtils.copyInputStreamToFile(conn.getInputStream(), f);
-
-            String tempFileName = "tempfile.pre";
-            FileReader fileReader = new FileReader(f);
-            long counter = 0;
-            try (BufferedReader bufferedReader
-                    = new BufferedReader(fileReader)) {
-                try (PrintWriter writer
-                        = new PrintWriter(new File(getWorkspaceDir() + tempFileName))) {
-                    for (int i = 0; i <= 17; i++) {
-                        bufferedReader.readLine();
-                    }
-                    String line;
-                    while ((line = bufferedReader.readLine()) != null) {
-                        String[] test = line.split("\\s+");
-                        double keComparison = Double.parseDouble(test[8]) * (Double.parseDouble(test[5]) / Double.parseDouble(test[6]));
-                        if (Ke < keComparison && test.length > 8) {
-                            counter++;
-                            writer.println(String.format("    %-5s %-5s %-5s %-5s %-5s %-6s %-6s %-6s",
-                                    counter, test[2], test[3], test[4], test[5], test[6], test[7], test[8]));
-                        }
-                    }
-                }
-                bufferedReader.close();
-                appendInfo(tempFileName, today, counter);
-            }
-        } catch (IOException | ServiceException e) {
-            LOG.log(Level.SEVERE, "RHEM-01: Problem in generating the storm file.", e);
-            throw new ServiceException("Problem in generating the storm file.", e);
-        }
-    }
-
-    private void appendInfo(String tempFileName, String today, long counter) throws ServiceException {
-        try (PrintWriter writer
-                = new PrintWriter(new File(getWorkspaceDir(), stormFileName))) {
-            FileReader fileReader = new FileReader(new File(getWorkspaceDir() + tempFileName));
-            writer.println("# Storm file for scenario: " + aoa.scenarioName);
-            writer.println("# Date built: " + today + " (Version 2.3)");
-            writer.println("# State: " + aoa.stateId);
-            writer.println("# Climate Station: " + aoa.climatestationId);
-            writer.println(counter + " # The number of rain events");
-            writer.println("0 # Breakpoint data? (0 for no, 1 for yes)");
-            writer.println("#  id     day  month  year  Rain   Dur    Tp     Ip");
-            writer.println("#                           (mm)   (h)");
-            try (BufferedReader bufferedReader
-                    = new BufferedReader(fileReader)) {
-                String line;
-                while ((line = bufferedReader.readLine()) != null) {
-                    writer.println(line);
-                }
-            }
-        } catch (IOException e) {
-            throw new ServiceException(e);
-        }
-    }
-
-    private void generateRunFile() throws ServiceException {
-        try (PrintWriter writer = new PrintWriter(new File(getWorkspaceDir(), runFileName))) {
-            writer.println(parameterFileName + ", " + stormFileName + ", "
-                    + summaryFileName + ", \"" + aoa.scenarioName + "\", 0, 2, y, y, n, n, y");
-            writer.close();
-        } catch (FileNotFoundException ex) {
-            LOG.log(Level.SEVERE, "RHEM-01: FileNotFoundException.", ex);
-            throw new ServiceException("Problem in generating the run file.", ex);
-        }
-    }
-
+//    private void generateParamFile(Parameter param, String today) throws ServiceException {
+//
+//        try (PrintWriter writer = new PrintWriter(new File(getWorkspaceDir(), parameterFileName))) {
+//            writer.println("! Parameter file for scenario: " + aoa.scenarioName);
+//            writer.println("! Date built: " + today + " (Version 2.3)");
+//            writer.println("! Parameter units: DIAMS(mm), DENSITY(g/cc),TEMP(deg C)");
+//            writer.println("BEGIN GLOBAL");
+//            writer.println(String.format("        %-8s=   %s", "CLEN", param.clen));
+//            writer.println(String.format("        %-8s=   %s", "UNITS", "metric"));
+//            writer.println(String.format("        %-8s=   %s", "DIAMS", param.diams));
+//            writer.println(String.format("        %-8s=   %s", "DENSITY", param.density));
+//            writer.println(String.format("        %-8s=   %s", "TEMP", 40));
+//            writer.println(String.format("        %-8s=   %s", "NELE", 1));
+//            writer.println("END GLOBAL");
+//            writer.println("BEGIN PLANE");
+//            writer.println(String.format("        %-8s=   %s", "ID", 1));
+//            writer.println(String.format("        %-8s=   %s", "LEN", param.slopeLength));
+//            writer.println(String.format("        %-8s=   %s", "WIDTH", 1.0));
+//            writer.println(String.format("        %-8s=   %s", "CHEZY", param.chezy));
+//            writer.println(String.format("        %-8s=   %s", "RCHEZY", param.chezy));
+//            writer.println(String.format("        %-8s=   %s", "SL", param.sl));
+//            writer.println(String.format("        %-8s=   %s", "SX", param.sx));
+//            writer.println(String.format("        %-8s=   %s", "CV", 1.00));
+//            writer.println(String.format("        %-8s=   %s", "SAT", 0.25));
+//            writer.println(String.format("        %-8s=   %s", "PR", 1));
+//            writer.println(String.format("        %-8s=   %s", "KSS", param.kss));
+//            writer.println(String.format("        %-8s=   %s", "KOMEGA", "0.000007747"));
+//            writer.println(String.format("        %-8s=   %s", "KCM", "0.00029936430000"));
+//            writer.println(String.format("        %-8s=   %s", "CA", 1.0));
+//            writer.println(String.format("        %-8s=   %s", "IN", 0.0));
+//            writer.println(String.format("        %-8s=   %s", "KE", param.ke));
+//            writer.println(String.format("        %-8s=   %s", "G", param.g));
+//            writer.println(String.format("        %-8s=   %s", "DIST", param.dist));
+//            writer.println(String.format("        %-8s=   %s", "POR", param.por));
+//            writer.println(String.format("        %-8s=   %s", "ROCK", 0.00));
+//            writer.println(String.format("        %-8s=   %s", "SMAX", 1.0));
+//            writer.println(String.format("        %-8s=   %s", "ADF", 0.0));
+//            writer.println(String.format("        %-8s=   %s", "ALF", 0.8));
+//            writer.println(String.format("        %-8s=   %s", "BARE", 0.23));
+//            writer.println(String.format("        %-8s=   %s", "RSP", 1.0));
+//            writer.println(String.format("        %-8s=   %s", "SPACING", 1.0));
+//            writer.println(String.format("        %-8s=   %s", "FRACT", param.fract));
+//            writer.println("END PLANE");
+//            writer.close();
+//        } catch (FileNotFoundException ex) {
+//            LOG.log(Level.SEVERE, "RHEM-01: FileNotFoundException.", ex);
+//            throw new ServiceException("Problem in generating the parameter file.", ex);
+//        }
+//    }
+//    private void generateStormFile(double Ke, String today) throws ServiceException {
+//
+//        String cligenFileName = "/" + aoa.stateId.toLowerCase()
+//                + "/300yr/" + aoa.stateId + "_"
+//                + aoa.climatestationId + "_300yr.out";
+//
+//        Client cl = new Client();
+//        File f = getWorkspaceFile(aoa.stateId + "_" + aoa.climatestationId + ".out");
+////        cl.doGET(cligen_db + cligenFileName, f);
+//
+//        try {
+//            URLConnection conn = new URL(cligen_db + cligenFileName).openConnection();
+//            FileUtils.copyInputStreamToFile(conn.getInputStream(), f);
+//
+//            String tempFileName = "tempfile.pre";
+//            FileReader fileReader = new FileReader(f);
+//            long counter = 0;
+//            try (BufferedReader bufferedReader
+//                    = new BufferedReader(fileReader)) {
+//                try (PrintWriter writer
+//                        = new PrintWriter(new File(getWorkspaceDir() + tempFileName))) {
+//                    for (int i = 0; i <= 17; i++) {
+//                        bufferedReader.readLine();
+//                    }
+//                    String line;
+//                    while ((line = bufferedReader.readLine()) != null) {
+//                        String[] test = line.split("\\s+");
+//                        double keComparison = Double.parseDouble(test[8]) * (Double.parseDouble(test[5]) / Double.parseDouble(test[6]));
+//                        if (Ke < keComparison && test.length > 8) {
+//                            counter++;
+//                            writer.println(String.format("    %-5s %-5s %-5s %-5s %-5s %-6s %-6s %-6s",
+//                                    counter, test[2], test[3], test[4], test[5], test[6], test[7], test[8]));
+//                        }
+//                    }
+//                }
+//                bufferedReader.close();
+//                appendInfo(tempFileName, today, counter);
+//            }
+//        } catch (IOException | ServiceException e) {
+//            LOG.log(Level.SEVERE, "RHEM-01: Problem in generating the storm file.", e);
+//            throw new ServiceException("Problem in generating the storm file.", e);
+//        }
+//    }
+//    private void appendInfo(String tempFileName, String today, long counter) throws ServiceException {
+//        try (PrintWriter writer
+//                = new PrintWriter(new File(getWorkspaceDir(), stormFileName))) {
+//            FileReader fileReader = new FileReader(new File(getWorkspaceDir() + tempFileName));
+//            writer.println("# Storm file for scenario: " + aoa.scenarioName);
+//            writer.println("# Date built: " + today + " (Version 2.3)");
+//            writer.println("# State: " + aoa.stateId);
+//            writer.println("# Climate Station: " + aoa.climatestationId);
+//            writer.println(counter + " # The number of rain events");
+//            writer.println("0 # Breakpoint data? (0 for no, 1 for yes)");
+//            writer.println("#  id     day  month  year  Rain   Dur    Tp     Ip");
+//            writer.println("#                           (mm)   (h)");
+//            try (BufferedReader bufferedReader
+//                    = new BufferedReader(fileReader)) {
+//                String line;
+//                while ((line = bufferedReader.readLine()) != null) {
+//                    writer.println(line);
+//                }
+//            }
+//        } catch (IOException e) {
+//            throw new ServiceException(e);
+//        }
+//    }
+//    private void generateRunFile() throws ServiceException {
+//        try (PrintWriter writer = new PrintWriter(new File(getWorkspaceDir(), runFileName))) {
+//            writer.println(parameterFileName + ", " + stormFileName + ", "
+//                    + summaryFileName + ", \"" + aoa.scenarioName + "\", 0, 2, y, y, n, n, y");
+//            writer.close();
+//        } catch (FileNotFoundException ex) {
+//            LOG.log(Level.SEVERE, "RHEM-01: FileNotFoundException.", ex);
+//            throw new ServiceException("Problem in generating the run file.", ex);
+//        }
+//    }
     private String runModel() throws ServiceException {
 
         int run = -1;
@@ -297,410 +344,397 @@
         return run == 0 ? EXEC_OK : EXEC_FAILED;
     }
 
-    private void appendToSumFile(Connection connection) throws ServiceException {
-        double avgYearlyPrecip = 0;
-        try (Statement statement = connection.createStatement();) {
-            String query = "SELECT avg_yearly_precip_mm FROM rhem.d_rhem_climate_stations_avg_300yr_est_rain WHERE station_id = '" + aoa.climatestationId + "';";
-            ResultSet rs = statement.executeQuery(query);
-            while (rs.next()) {
-                avgYearlyPrecip = rs.getDouble("avg_yearly_precip_mm");
-            }
-        } catch (SQLException e) {
-            throw new ServiceException(e);
-        }
-        int counter = 0;
-        File tempSummaryFile = new File(getWorkspaceDir(), "final_" + summaryFileName);
-        File summaryFile = new File(getWorkspaceDir(), summaryFileName);
-        try (PrintWriter writer
-                = new PrintWriter(tempSummaryFile)) {
-            FileReader fileReader = new FileReader(summaryFile);
-            writer.println("     -ANNUAL-AVERAGES-");
-            writer.println();
-            writer.println("Avg-Precipitation(mm/year)=   " + avgYearlyPrecip);
-            try (BufferedReader bufferedReader
-                    = new BufferedReader(fileReader)) {
-                String line;
-                for (int i = 0; i < 3; i++) {
-                    bufferedReader.readLine();
-                    counter++;
-                }
-                while ((line = bufferedReader.readLine()) != null) {
-                    counter++;
-//                    writer.println(line);
-                    String[] test = line.split("\\s+");
-                    for (int i = 1; i < test.length; i++) {
-                        switch (counter) {
-                            case 13:
-                                if (i == 1) {
-                                    writer.print(String.format("%-28s", "Precipitation(mm)"));
-                                    i = 2;
-                                } else {
-                                    writer.print(String.format("%-28s", test[i]));
-                                }
-                                break;
-                            default:
-                                writer.print(String.format("%-28s", test[i]));
-                                break;
-                        }
-//                        if (counter != 13) {
-//                            writer.print(String.format("%-28s", test[i]));
-//                        } else {
-//                            if (i == 1) {
-//                                writer.print(String.format("%-28s", "Precipitation(mm)"));
-//                                i = 3;
-//                            } else {
+//    private void appendToSumFile(Connection connection) throws ServiceException {
+//        double avgYearlyPrecip = 0;
+//        try (Statement statement = connection.createStatement();) {
+//            String query = "SELECT avg_yearly_precip_mm FROM rhem.d_rhem_climate_stations_avg_300yr_est_rain WHERE station_id = '" + aoa.climatestationId + "';";
+//            ResultSet rs = statement.executeQuery(query);
+//            while (rs.next()) {
+//                avgYearlyPrecip = rs.getDouble("avg_yearly_precip_mm");
+//            }
+//        } catch (SQLException e) {
+//            throw new ServiceException(e);
+//        }
+//        int counter = 0;
+//        File tempSummaryFile = new File(getWorkspaceDir(), "final_" + summaryFileName);
+//        File summaryFile = new File(getWorkspaceDir(), summaryFileName);
+//        try (PrintWriter writer
+//                = new PrintWriter(tempSummaryFile)) {
+//            FileReader fileReader = new FileReader(summaryFile);
+//            writer.println("     -ANNUAL-AVERAGES-");
+//            writer.println();
+//            writer.println("Avg-Precipitation(mm/year)=   " + avgYearlyPrecip);
+//            try (BufferedReader bufferedReader
+//                    = new BufferedReader(fileReader)) {
+//                String line;
+//                for (int i = 0; i < 3; i++) {
+//                    bufferedReader.readLine();
+//                    counter++;
+//                }
+//                while ((line = bufferedReader.readLine()) != null) {
+//                    counter++;
+////                    writer.println(line);
+//                    String[] test = line.split("\\s+");
+//                    for (int i = 1; i < test.length; i++) {
+//                        switch (counter) {
+//                            case 13:
+//                                if (i == 1) {
+//                                    writer.print(String.format("%-28s", "Precipitation(mm)"));
+//                                    i = 2;
+//                                } else {
+//                                    writer.print(String.format("%-28s", test[i]));
+//                                }
+//                                break;
+//                            default:
 //                                writer.print(String.format("%-28s", test[i]));
-//                            }
+//                                break;
 //                        }
-                    }
-                    writer.println();
-                }
-                bufferedReader.close();
-            }
-            summaryFile.delete();
-            writer.close();
-            tempSummaryFile.renameTo(summaryFile);
-        } catch (IOException e) {
-            throw new ServiceException(e);
-        }
-    }
-
+////                        if (counter != 13) {
+////                            writer.print(String.format("%-28s", test[i]));
+////                        } else {
+////                            if (i == 1) {
+////                                writer.print(String.format("%-28s", "Precipitation(mm)"));
+////                                i = 3;
+////                            } else {
+////                                writer.print(String.format("%-28s", test[i]));
+////                            }
+////                        }
+//                    }
+//                    writer.println();
+//                }
+//                bufferedReader.close();
+//            }
+//            summaryFile.delete();
+//            writer.close();
+//            tempSummaryFile.renameTo(summaryFile);
+//        } catch (IOException e) {
+//            throw new ServiceException(e);
+//        }
+//    }
     @Override
     public void postProcess() {
-        putResult("AoAID", aoa.aoaId, "Area of Analysis Identifier");
-        putResult("rhem_site_id", aoa.rhemSiteId, "RHEM Evaluation Site Identifier");
-        putResult("CLEN", parameter.clen);
+        putResult("AoAID", aoa.getAoaId(), "Area of Analysis Identifier");
+        putResult("rhem_site_id", aoa.getRhemSiteId(), "RHEM Evaluation Site Identifier");
+        putResult("CLEN", parameter.getClen());
         putResult("UNITS", "metric");
-        putResult("DIAMS", parameter.diams);
-        putResult("DENSITY", parameter.density);
-        putResult("CHEZY", parameter.chezy);
-        putResult("RCHEZY", parameter.chezy);
-        putResult("SL", parameter.sl);
-        putResult("SX", parameter.sx);
-        putResult("KSS", parameter.kss);
-        putResult("KE", parameter.ke);
-        putResult("G", parameter.g);
-        putResult("DIST", parameter.dist);
-        putResult("POR", parameter.por);
-        putResult("FRACT", parameter.fract);
+        putResult("DIAMS", parameter.getDiams());
+        putResult("DENSITY", parameter.getDensity());
+        putResult("CHEZY", parameter.getChezy());
+        putResult("RCHEZY", parameter.getRchezy());
+        putResult("SL", parameter.getSl());
+        putResult("SX", parameter.getSx());
+        putResult("KSS", parameter.getKss());
+        putResult("KE", parameter.getKe());
+        putResult("G", parameter.getG());
+        putResult("DIST", parameter.getDist());
+        putResult("POR", parameter.getPor());
+        putResult("FRACT", parameter.getFract());
         putResult(new File(getWorkspaceDir(), parameterFileName), "Parameter input file");
         putResult(new File(getWorkspaceDir(), stormFileName), "Storm input file");
         putResult(new File(getWorkspaceDir(), summaryFileName), "Summary file");
         putResult(new File(getWorkspaceDir(), detailedOutputFileName), "Detailed");
     }
 
-    static class AoA {
-
-        protected int aoaId;
-        protected int rhemSiteId;
-        protected String scenarioName;
-        protected String scenarioDescription;
-        protected int unit;
-        protected String stateId;
-        protected String climatestationId;
-        protected String soilTexture;
-        protected double slopeLength;
-        protected String slopeShape;
-        protected double slopeSteepness;
-        protected double moisturecontent;
-        protected double bunchGgrassCanopyCover;
-        protected double forbsCanopyCover;
-        protected double shrubsCanopyCover;
-        protected double sodGrassCanopyCover;
-        protected double basalCover;
-        protected double rockCover;
-        protected double litterCover;
-        protected double cryptogamsCover;
-
-        public AoA(int aoaId, int rhemSiteId, String scenarioName,
-                String scenarioDescription, int unit, String stateId,
-                String climatestationId, String soilTexture, double slopeLength,
-                String slopeShape, double slopeSteepness,
-                double bunchGgrassCanopyCover, double forbsCanopyCover,
-                double shrubsCanopyCover, double sodGrassCanopyCover, double basalCover,
-                double rockCover, double litterCover, double cryptogamsCover) {
-            this.aoaId = aoaId;
-            this.rhemSiteId = rhemSiteId;
-            this.scenarioName = scenarioName;
-            this.scenarioDescription = scenarioDescription;
-            this.unit = unit;
-            this.stateId = stateId;
-            this.climatestationId = climatestationId;
-            this.soilTexture = soilTexture;
-            this.slopeLength = slopeLength;
-            this.slopeShape = slopeShape;
-            this.slopeSteepness = slopeSteepness / 100.0;
-            this.bunchGgrassCanopyCover = bunchGgrassCanopyCover / 100.0;
-            this.forbsCanopyCover = forbsCanopyCover / 100.0;
-            this.shrubsCanopyCover = shrubsCanopyCover / 100.0;
-            this.sodGrassCanopyCover = sodGrassCanopyCover / 100.0;
-            this.basalCover = basalCover / 100.0;
-            this.rockCover = rockCover / 100.0;
-            this.litterCover = litterCover / 100.0;
-            this.cryptogamsCover = cryptogamsCover / 100.0;
-            moisturecontent = moisturecontent / 100.0;
-        }
-    }
-
-    static class Parameter {
-
-        protected AoA aoa;
-        protected double clen;
-        protected String diams;
-        protected String density;
-        protected double slopeLength;
-        protected double chezy;
-        protected String sx, sl;
-        protected String fract;
-        protected double ke;
-        protected double kss;
-
-        double g, dist, por;
-
-        public Parameter(AoA aoa) {
-            this.aoa = aoa;
-        }
-
-        public void computeParameters(Connection connection) throws SQLException {
-            // canopy cover for grass
-//        double grasscanopycover = aoa.bunchGgrassCanopyCover + aoa.forbsCanopyCover + aoa.sodGrassCanopyCover;
-            // TOTAL CANOPY COVER
-            double totalcanopycover = aoa.bunchGgrassCanopyCover + aoa.forbsCanopyCover + aoa.shrubsCanopyCover + aoa.sodGrassCanopyCover;
-            // TOTAL GROUND COVER
-            double totalgroundcover = aoa.rockCover + aoa.basalCover + aoa.litterCover + aoa.cryptogamsCover;
-
-            if (aoa.unit == 2) {
-                this.slopeLength = aoa.slopeLength * 0.3048;
-            } else {
-                this.slopeLength = aoa.slopeLength;
-            }
-
-            this.computeChezyValue();
-            this.computeSlSxValues();
-            this.computeClenValue();
-            this.getValuesFmDb(connection);
-            this.computeKeValue(totalcanopycover);
-            this.computeKssValue(totalcanopycover, totalgroundcover);
-        }
-
-        public void computeChezyValue() {
-            double ft = (-1 * 0.109) + (1.425 * aoa.litterCover)
-                    + (0.442 * aoa.rockCover) + (1.764 * (aoa.basalCover
-                    + aoa.cryptogamsCover)) + (2.068 * aoa.slopeSteepness);
-            ft = Math.pow(10, ft);
-
-            chezy = Math.pow((8 * 9.8) / ft, 0.5);
-        }
-
-        public void computeSlSxValues() {
-            switch (aoa.slopeShape) {
-
-                case "Uniform":
-                    sl = aoa.slopeSteepness + ", " + aoa.slopeSteepness;
-                    sx = 0.00 + ", " + 1.00;
-                    break;
-
-                case "Convex":
-                    sl = 0.001 + ", " + (aoa.slopeSteepness * 2);
-                    sx = 0.00 + ", " + 1.00;
-                    break;
-
-                case "Concave":
-                    sl = (aoa.slopeSteepness * 2) + ", " + 0.001;
-                    sx = 0.00 + ", " + 1.00;
-                    break;
-
-                case "S-shaped":
-                    sl = 0.001 + ", " + (aoa.slopeSteepness * 2) + ", " + 0.001;
-                    sx = 0.00 + ", " + 0.50 + ", " + 1.00;
-                    break;
-            }
-        }
-
-        public void computeClenValue() {
-            clen = this.slopeLength * 2.5;
-        }
-
-        public void getValuesFmDb(Connection connection) throws SQLException {
-
-            try {
-                Statement statement = connection.createStatement();
-
-//                String query = "SELECT clay_diameter, silt_diameter, "
-//                        + "small_aggregates_diameter, large_aggregates_diameter, "
-//                        + "sand_diameter, clay_specific_gravity, "
-//                        + "silt_specific_gravity, small_aggregates_specific_gravity, "
-//                        + "large_aggregates_specific_gravity, sand_specific_gravity, "
-//                        + "mean_matric_potential, pore_size_distribution, mean_porosity, "
-//                        + "clay_fraction, silt_fraction, small_aggregates_fraction, "
-//                        + "large_aggregates_fraction, sand_fraction "
-//                        + "FROM rhem.soil_texture_table "
-//                        + "WHERE class_name ='" + aoa.soilTexture + "';";
-                try (ResultSet resultSet = statement.executeQuery(DBQueries.RHEM01Query01(aoa.soilTexture))) {
-                    while (resultSet.next()) {
-                        double diam1 = resultSet.getDouble("clay_diameter");
-                        double diam2 = resultSet.getDouble("silt_diameter");
-                        double diam3 = resultSet.getDouble("small_aggregates_diameter");
-                        double diam4 = resultSet.getDouble("large_aggregates_diameter");
-                        double diam5 = resultSet.getDouble("sand_diameter");
-                        diams = diam1 + " " + diam2 + " " + diam3 + " " + diam4 + " " + diam5;
-                        double density1 = resultSet.getDouble("clay_specific_gravity");
-                        double density2 = resultSet.getDouble("silt_specific_gravity");
-                        double density3 = resultSet.getDouble("small_aggregates_specific_gravity");
-                        double density4 = resultSet.getDouble("large_aggregates_specific_gravity");
-                        double density5 = resultSet.getDouble("sand_specific_gravity");
-                        density = density1 + " " + density2 + " " + density3 + " " + density4 + " " + density5;
-                        g = resultSet.getDouble("mean_matric_potential");
-                        dist = resultSet.getDouble("pore_size_distribution");
-                        por = resultSet.getDouble("mean_porosity");
-                        double fract1 = resultSet.getDouble("clay_fraction");
-                        double fract2 = resultSet.getDouble("silt_fraction");
-                        double fract3 = resultSet.getDouble("small_aggregates_fraction");
-                        double fract4 = resultSet.getDouble("large_aggregates_fraction");
-                        double fract5 = resultSet.getDouble("sand_fraction");
-                        fract = fract1 + " " + fract2 + " " + fract3 + " " + fract4 + " " + fract5;
-                    }
-                }
-
-            } catch (SQLException se) {
-                throw new SQLException("SQL problem.", se);
-            }
-        }
-
-        private void computeKeValue(double totalcanopycover) {
-            double Keb = 0;
-            switch (aoa.soilTexture) {
-                case "Sand":
-                    Keb = 24 * Math.exp(0.3483 * (aoa.basalCover + aoa.litterCover));
-                    break;
-                case "Loamy Sand":
-                    Keb = 10 * Math.exp(0.8755 * (aoa.basalCover + aoa.litterCover));
-                    break;
-                case "Sandy Loam":
-                    Keb = 5 * Math.exp(1.1632 * (aoa.basalCover + aoa.litterCover));
-                    break;
-                case "Loam":
-                    Keb = 2.5 * Math.exp(1.5686 * (aoa.basalCover + aoa.litterCover));
-                    break;
-                case "Silt Loam":
-                    Keb = 1.2 * Math.exp(2.0149 * (aoa.basalCover + aoa.litterCover));
-                    break;
-                case "Silt":
-                    Keb = 1.2 * Math.exp(2.0149 * (aoa.basalCover + aoa.litterCover));
-                    break;
-                case "Sandy Clay Loam":
-                    Keb = 0.80 * Math.exp(2.1691 * (aoa.basalCover + aoa.litterCover));
-                    break;
-                case "Clay Loam":
-                    Keb = 0.50 * Math.exp(2.3026 * (aoa.basalCover + aoa.litterCover));
-                    break;
-                case "Silty Clay Loam":
-                    Keb = 0.40 * Math.exp(2.1691 * (aoa.basalCover + aoa.litterCover));
-                    break;
-                case "Sandy Clay":
-                    Keb = 0.30 * Math.exp(2.1203 * (aoa.basalCover + aoa.litterCover));
-                    break;
-                case "Silty Clay":
-                    Keb = 0.25 * Math.exp(1.7918 * (aoa.basalCover + aoa.litterCover));
-                    break;
-                case "Clay":
-                    Keb = 0.2 * Math.exp(1.3218 * (aoa.basalCover + aoa.litterCover));
-                    break;
-            }
-            double weightedKe = 0;
-
-            // calculate weighted Ke and Kss values for the vegetation types that have non-zero values
-            if (totalcanopycover != 0) {
-                weightedKe = weightedKe + ((aoa.shrubsCanopyCover / totalcanopycover) * (Keb * 1.2));
-                weightedKe = weightedKe + ((aoa.sodGrassCanopyCover / totalcanopycover) * (Keb * 0.8));
-                weightedKe = weightedKe + ((aoa.bunchGgrassCanopyCover / totalcanopycover) * (Keb * 1.0));
-                weightedKe = weightedKe + ((aoa.forbsCanopyCover / totalcanopycover) * (Keb * 1.0));
-            } else {
-                weightedKe = Keb;
-            }
-            ke = weightedKe;
-        }
-
-        public void computeKssValue(double totalcanopycover, double totalgroundcover) {
-            // Kss variables
-            double Kss_Seg_Bunch, Kss_Seg_Sod, Kss_Seg_Shrub, Kss_Seg_Shrub_0, Kss_Seg_Forbs;
-            double Kss_Average, Kss_Final;
-
-            // 1)
-            //   a) CALCULATE KSS FOR EACH VEGETATION COMMUNITY USING TOTAL FOLIAR COVER
-            //        A)   BUNCH GRASS
-            if (totalgroundcover < 0.475) {
-                Kss_Seg_Bunch = 4.154 + 2.5535 * aoa.slopeSteepness
-                        - 2.547 * totalgroundcover - 0.7822 * totalcanopycover;
-                Kss_Seg_Bunch = Math.pow(10, Kss_Seg_Bunch);
-
-                Kss_Seg_Sod = 4.2169 + 2.5535 * aoa.slopeSteepness
-                        - 2.547 * totalgroundcover - 0.7822 * totalcanopycover;
-                Kss_Seg_Sod = Math.pow(10, Kss_Seg_Sod);
-
-                Kss_Seg_Shrub = 4.2587 + 2.5535 * aoa.slopeSteepness - 2.547 * totalgroundcover - 0.7822 * totalcanopycover;
-                Kss_Seg_Shrub = Math.pow(10, Kss_Seg_Shrub);
-
-                Kss_Seg_Forbs = 4.1106 + 2.5535 * aoa.slopeSteepness - 2.547 * totalgroundcover - 0.7822 * totalcanopycover;
-                Kss_Seg_Forbs = Math.pow(10, Kss_Seg_Forbs);
-
-                Kss_Seg_Shrub_0 = 4.2587 + 2.5535 * aoa.slopeSteepness - 2.547 * totalgroundcover;
-                Kss_Seg_Shrub_0 = Math.pow(10, Kss_Seg_Shrub_0);
-
-            } else {
-                Kss_Seg_Bunch = 3.1726975 + 2.5535 * aoa.slopeSteepness
-                        - 0.4811 * totalgroundcover - 0.7822 * totalcanopycover;
-                Kss_Seg_Bunch = Math.pow(10, Kss_Seg_Bunch);
-
-                Kss_Seg_Sod = 3.2355975 + 2.5535 * aoa.slopeSteepness
-                        - 0.4811 * totalgroundcover - 0.7822 * totalcanopycover;
-                Kss_Seg_Sod = Math.pow(10, Kss_Seg_Sod);
-
-                Kss_Seg_Shrub = 3.2773975 + 2.5535 * aoa.slopeSteepness - 0.4811 * totalgroundcover - 0.7822 * totalcanopycover;
-                Kss_Seg_Shrub = Math.pow(10, Kss_Seg_Shrub);
-
-                Kss_Seg_Forbs = 3.1292975 + 2.5535 * aoa.slopeSteepness - 0.4811 * totalgroundcover - 0.7822 * totalcanopycover;
-                Kss_Seg_Forbs = Math.pow(10, Kss_Seg_Forbs);
-
-                Kss_Seg_Shrub_0 = 3.2773975 + 2.5535 * aoa.slopeSteepness - 0.4811 * totalgroundcover;
-                Kss_Seg_Shrub_0 = Math.pow(10, Kss_Seg_Shrub_0);
-            }
-            if (totalcanopycover > 0 && totalcanopycover < 0.02) {
-
-                Kss_Average = totalcanopycover / 0.02 * ((aoa.shrubsCanopyCover / totalcanopycover) * Kss_Seg_Shrub
-                        + (aoa.sodGrassCanopyCover / totalcanopycover) * Kss_Seg_Sod
-                        + (aoa.bunchGgrassCanopyCover / totalcanopycover) * Kss_Seg_Bunch
-                        + (aoa.forbsCanopyCover / totalcanopycover) * Kss_Seg_Forbs)
-                        + (0.02 - totalcanopycover) / 0.02 * Kss_Seg_Shrub_0;
-
-            } else {
-
-                Kss_Average = (aoa.shrubsCanopyCover / totalcanopycover) * Kss_Seg_Shrub
-                        + (aoa.sodGrassCanopyCover / totalcanopycover) * Kss_Seg_Sod
-                        + (aoa.bunchGgrassCanopyCover / totalcanopycover) * Kss_Seg_Bunch
-                        + (aoa.forbsCanopyCover / totalcanopycover) * Kss_Seg_Forbs;
-
-            }
-
-            // 3) CALCULATE KSS USED FOR RHEM
-            if (totalcanopycover == 0) {
-                if (totalgroundcover < 0.475) {
-                    Kss_Final = 4.2587 + 2.5535 * aoa.slopeSteepness - 2.547 * totalgroundcover;
-                    Kss_Final = Math.pow(10, Kss_Final);
-                } else {
-                    Kss_Final = 3.2773975 + 2.5535 * aoa.slopeSteepness - 0.4811 * totalgroundcover;
-                    Kss_Final = Math.pow(10, Kss_Final);
-                }
-            } else if (totalgroundcover < 0.475) {
-                Kss_Final = totalgroundcover / 0.475 * Kss_Average + (0.475 - totalgroundcover) / 0.475 * Kss_Seg_Shrub;
-            } else {
-                Kss_Final = Kss_Average;
-            }
-
-            Kss_Final = (Kss_Final * 1.3) * 2.0;
-            this.kss = Kss_Final;
-        }
-
-    }
-
+//    static class AoA {
+//
+//        protected int aoaId;
+//        protected int rhemSiteId;
+//        protected String scenarioName;
+//        protected String scenarioDescription;
+//        protected int unit;
+//        protected String stateId;
+//        protected String climatestationId;
+//        protected String soilTexture;
+//        protected double slopeLength;
+//        protected String slopeShape;
+//        protected double slopeSteepness;
+//        protected double moisturecontent;
+//        protected double bunchGgrassCanopyCover;
+//        protected double forbsCanopyCover;
+//        protected double shrubsCanopyCover;
+//        protected double sodGrassCanopyCover;
+//        protected double basalCover;
+//        protected double rockCover;
+//        protected double litterCover;
+//        protected double cryptogamsCover;
+//
+//        public AoA(int aoaId, int rhemSiteId, String scenarioName,
+//                String scenarioDescription, int unit, String stateId,
+//                String climatestationId, String soilTexture, double slopeLength,
+//                String slopeShape, double slopeSteepness,
+//                double bunchGgrassCanopyCover, double forbsCanopyCover,
+//                double shrubsCanopyCover, double sodGrassCanopyCover, double basalCover,
+//                double rockCover, double litterCover, double cryptogamsCover) {
+//            this.aoaId = aoaId;
+//            this.rhemSiteId = rhemSiteId;
+//            this.scenarioName = scenarioName;
+//            this.scenarioDescription = scenarioDescription;
+//            this.unit = unit;
+//            this.stateId = stateId;
+//            this.climatestationId = climatestationId;
+//            this.soilTexture = soilTexture;
+//            this.slopeLength = slopeLength;
+//            this.slopeShape = slopeShape;
+//            this.slopeSteepness = slopeSteepness / 100.0;
+//            this.bunchGgrassCanopyCover = bunchGgrassCanopyCover / 100.0;
+//            this.forbsCanopyCover = forbsCanopyCover / 100.0;
+//            this.shrubsCanopyCover = shrubsCanopyCover / 100.0;
+//            this.sodGrassCanopyCover = sodGrassCanopyCover / 100.0;
+//            this.basalCover = basalCover / 100.0;
+//            this.rockCover = rockCover / 100.0;
+//            this.litterCover = litterCover / 100.0;
+//            this.cryptogamsCover = cryptogamsCover / 100.0;
+//            moisturecontent = moisturecontent / 100.0;
+//        }
+//    }
+//
+//    static class Parameter {
+//
+//        protected AoA aoa;
+//        protected double clen;
+//        protected String diams;
+//        protected String density;
+//        protected double slopeLength;
+//        protected double chezy;
+//        protected String sx, sl;
+//        protected String fract;
+//        protected double ke;
+//        protected double kss;
+//
+//        protected double g, dist, por;
+//
+//        public Parameter(AoA aoa) {
+//            this.aoa = aoa;
+//        }
+//
+//        public void computeParameters(Connection connection) throws SQLException {
+//            // canopy cover for grass
+////        double grasscanopycover = aoa.bunchGgrassCanopyCover + aoa.forbsCanopyCover + aoa.sodGrassCanopyCover;
+//            // TOTAL CANOPY COVER
+//            double totalcanopycover = aoa.bunchGgrassCanopyCover + aoa.forbsCanopyCover + aoa.shrubsCanopyCover + aoa.sodGrassCanopyCover;
+//            // TOTAL GROUND COVER
+//            double totalgroundcover = aoa.rockCover + aoa.basalCover + aoa.litterCover + aoa.cryptogamsCover;
+//
+//            if (aoa.unit == 2) {
+//                this.slopeLength = aoa.slopeLength * 0.3048;
+//            } else {
+//                this.slopeLength = aoa.slopeLength;
+//            }
+//
+//            this.computeChezyValue();
+//            this.computeSlSxValues();
+//            this.computeClenValue();
+//            this.getValuesFmDb(connection);
+//            this.computeKeValue(totalcanopycover);
+//            this.computeKssValue(totalcanopycover, totalgroundcover);
+//        }
+//
+//        public void computeChezyValue() {
+//            double ft = (-1 * 0.109) + (1.425 * aoa.litterCover)
+//                    + (0.442 * aoa.rockCover) + (1.764 * (aoa.basalCover
+//                    + aoa.cryptogamsCover)) + (2.068 * aoa.slopeSteepness);
+//            ft = Math.pow(10, ft);
+//
+//            chezy = Math.pow((8 * 9.8) / ft, 0.5);
+//        }
+//
+//        public void computeSlSxValues() {
+//            switch (aoa.slopeShape) {
+//
+//                case "Uniform":
+//                    sl = aoa.slopeSteepness + ", " + aoa.slopeSteepness;
+//                    sx = 0.00 + ", " + 1.00;
+//                    break;
+//
+//                case "Convex":
+//                    sl = 0.001 + ", " + (aoa.slopeSteepness * 2);
+//                    sx = 0.00 + ", " + 1.00;
+//                    break;
+//
+//                case "Concave":
+//                    sl = (aoa.slopeSteepness * 2) + ", " + 0.001;
+//                    sx = 0.00 + ", " + 1.00;
+//                    break;
+//
+//                case "S-shaped":
+//                    sl = 0.001 + ", " + (aoa.slopeSteepness * 2) + ", " + 0.001;
+//                    sx = 0.00 + ", " + 0.50 + ", " + 1.00;
+//                    break;
+//            }
+//        }
+//
+//        public void computeClenValue() {
+//            clen = this.slopeLength * 2.5;
+//        }
+//
+//        public void getValuesFmDb(Connection connection) throws SQLException {
+//
+//            try {
+//                Statement statement = connection.createStatement();
+//                try (ResultSet resultSet = statement.executeQuery(DBQueries.RHEM01Query01(aoa.soilTexture))) {
+//                    while (resultSet.next()) {
+//                        double diam1 = resultSet.getDouble("clay_diameter");
+//                        double diam2 = resultSet.getDouble("silt_diameter");
+//                        double diam3 = resultSet.getDouble("small_aggregates_diameter");
+//                        double diam4 = resultSet.getDouble("large_aggregates_diameter");
+//                        double diam5 = resultSet.getDouble("sand_diameter");
+//                        diams = diam1 + " " + diam2 + " " + diam3 + " " + diam4 + " " + diam5;
+//                        double density1 = resultSet.getDouble("clay_specific_gravity");
+//                        double density2 = resultSet.getDouble("silt_specific_gravity");
+//                        double density3 = resultSet.getDouble("small_aggregates_specific_gravity");
+//                        double density4 = resultSet.getDouble("large_aggregates_specific_gravity");
+//                        double density5 = resultSet.getDouble("sand_specific_gravity");
+//                        density = density1 + " " + density2 + " " + density3 + " " + density4 + " " + density5;
+//                        g = resultSet.getDouble("mean_matric_potential");
+//                        dist = resultSet.getDouble("pore_size_distribution");
+//                        por = resultSet.getDouble("mean_porosity");
+//                        double fract1 = resultSet.getDouble("clay_fraction");
+//                        double fract2 = resultSet.getDouble("silt_fraction");
+//                        double fract3 = resultSet.getDouble("small_aggregates_fraction");
+//                        double fract4 = resultSet.getDouble("large_aggregates_fraction");
+//                        double fract5 = resultSet.getDouble("sand_fraction");
+//                        fract = fract1 + " " + fract2 + " " + fract3 + " " + fract4 + " " + fract5;
+//                    }
+//                }
+//
+//            } catch (SQLException se) {
+//                throw new SQLException("SQL problem.", se);
+//            }
+//        }
+//
+//        private void computeKeValue(double totalcanopycover) {
+//            double Keb = 0;
+//            switch (aoa.soilTexture) {
+//                case "Sand":
+//                    Keb = 24 * Math.exp(0.3483 * (aoa.basalCover + aoa.litterCover));
+//                    break;
+//                case "Loamy Sand":
+//                    Keb = 10 * Math.exp(0.8755 * (aoa.basalCover + aoa.litterCover));
+//                    break;
+//                case "Sandy Loam":
+//                    Keb = 5 * Math.exp(1.1632 * (aoa.basalCover + aoa.litterCover));
+//                    break;
+//                case "Loam":
+//                    Keb = 2.5 * Math.exp(1.5686 * (aoa.basalCover + aoa.litterCover));
+//                    break;
+//                case "Silt Loam":
+//                    Keb = 1.2 * Math.exp(2.0149 * (aoa.basalCover + aoa.litterCover));
+//                    break;
+//                case "Silt":
+//                    Keb = 1.2 * Math.exp(2.0149 * (aoa.basalCover + aoa.litterCover));
+//                    break;
+//                case "Sandy Clay Loam":
+//                    Keb = 0.80 * Math.exp(2.1691 * (aoa.basalCover + aoa.litterCover));
+//                    break;
+//                case "Clay Loam":
+//                    Keb = 0.50 * Math.exp(2.3026 * (aoa.basalCover + aoa.litterCover));
+//                    break;
+//                case "Silty Clay Loam":
+//                    Keb = 0.40 * Math.exp(2.1691 * (aoa.basalCover + aoa.litterCover));
+//                    break;
+//                case "Sandy Clay":
+//                    Keb = 0.30 * Math.exp(2.1203 * (aoa.basalCover + aoa.litterCover));
+//                    break;
+//                case "Silty Clay":
+//                    Keb = 0.25 * Math.exp(1.7918 * (aoa.basalCover + aoa.litterCover));
+//                    break;
+//                case "Clay":
+//                    Keb = 0.2 * Math.exp(1.3218 * (aoa.basalCover + aoa.litterCover));
+//                    break;
+//            }
+//            double weightedKe = 0;
+//
+//            // calculate weighted Ke and Kss values for the vegetation types that have non-zero values
+//            if (totalcanopycover != 0) {
+//                weightedKe = weightedKe + ((aoa.shrubsCanopyCover / totalcanopycover) * (Keb * 1.2));
+//                weightedKe = weightedKe + ((aoa.sodGrassCanopyCover / totalcanopycover) * (Keb * 0.8));
+//                weightedKe = weightedKe + ((aoa.bunchGgrassCanopyCover / totalcanopycover) * (Keb * 1.0));
+//                weightedKe = weightedKe + ((aoa.forbsCanopyCover / totalcanopycover) * (Keb * 1.0));
+//            } else {
+//                weightedKe = Keb;
+//            }
+//            ke = weightedKe;
+//        }
+//
+//        public void computeKssValue(double totalcanopycover, double totalgroundcover) {
+//            // Kss variables
+//            double Kss_Seg_Bunch, Kss_Seg_Sod, Kss_Seg_Shrub, Kss_Seg_Shrub_0, Kss_Seg_Forbs;
+//            double Kss_Average, Kss_Final;
+//
+//            // 1)
+//            //   a) CALCULATE KSS FOR EACH VEGETATION COMMUNITY USING TOTAL FOLIAR COVER
+//            //        A)   BUNCH GRASS
+//            if (totalgroundcover < 0.475) {
+//                Kss_Seg_Bunch = 4.154 + 2.5535 * aoa.slopeSteepness
+//                        - 2.547 * totalgroundcover - 0.7822 * totalcanopycover;
+//                Kss_Seg_Bunch = Math.pow(10, Kss_Seg_Bunch);
+//
+//                Kss_Seg_Sod = 4.2169 + 2.5535 * aoa.slopeSteepness
+//                        - 2.547 * totalgroundcover - 0.7822 * totalcanopycover;
+//                Kss_Seg_Sod = Math.pow(10, Kss_Seg_Sod);
+//
+//                Kss_Seg_Shrub = 4.2587 + 2.5535 * aoa.slopeSteepness - 2.547 * totalgroundcover - 0.7822 * totalcanopycover;
+//                Kss_Seg_Shrub = Math.pow(10, Kss_Seg_Shrub);
+//
+//                Kss_Seg_Forbs = 4.1106 + 2.5535 * aoa.slopeSteepness - 2.547 * totalgroundcover - 0.7822 * totalcanopycover;
+//                Kss_Seg_Forbs = Math.pow(10, Kss_Seg_Forbs);
+//
+//                Kss_Seg_Shrub_0 = 4.2587 + 2.5535 * aoa.slopeSteepness - 2.547 * totalgroundcover;
+//                Kss_Seg_Shrub_0 = Math.pow(10, Kss_Seg_Shrub_0);
+//
+//            } else {
+//                Kss_Seg_Bunch = 3.1726975 + 2.5535 * aoa.slopeSteepness
+//                        - 0.4811 * totalgroundcover - 0.7822 * totalcanopycover;
+//                Kss_Seg_Bunch = Math.pow(10, Kss_Seg_Bunch);
+//
+//                Kss_Seg_Sod = 3.2355975 + 2.5535 * aoa.slopeSteepness
+//                        - 0.4811 * totalgroundcover - 0.7822 * totalcanopycover;
+//                Kss_Seg_Sod = Math.pow(10, Kss_Seg_Sod);
+//
+//                Kss_Seg_Shrub = 3.2773975 + 2.5535 * aoa.slopeSteepness - 0.4811 * totalgroundcover - 0.7822 * totalcanopycover;
+//                Kss_Seg_Shrub = Math.pow(10, Kss_Seg_Shrub);
+//
+//                Kss_Seg_Forbs = 3.1292975 + 2.5535 * aoa.slopeSteepness - 0.4811 * totalgroundcover - 0.7822 * totalcanopycover;
+//                Kss_Seg_Forbs = Math.pow(10, Kss_Seg_Forbs);
+//
+//                Kss_Seg_Shrub_0 = 3.2773975 + 2.5535 * aoa.slopeSteepness - 0.4811 * totalgroundcover;
+//                Kss_Seg_Shrub_0 = Math.pow(10, Kss_Seg_Shrub_0);
+//            }
+//            if (totalcanopycover > 0 && totalcanopycover < 0.02) {
+//
+//                Kss_Average = totalcanopycover / 0.02 * ((aoa.shrubsCanopyCover / totalcanopycover) * Kss_Seg_Shrub
+//                        + (aoa.sodGrassCanopyCover / totalcanopycover) * Kss_Seg_Sod
+//                        + (aoa.bunchGgrassCanopyCover / totalcanopycover) * Kss_Seg_Bunch
+//                        + (aoa.forbsCanopyCover / totalcanopycover) * Kss_Seg_Forbs)
+//                        + (0.02 - totalcanopycover) / 0.02 * Kss_Seg_Shrub_0;
+//
+//            } else {
+//
+//                Kss_Average = (aoa.shrubsCanopyCover / totalcanopycover) * Kss_Seg_Shrub
+//                        + (aoa.sodGrassCanopyCover / totalcanopycover) * Kss_Seg_Sod
+//                        + (aoa.bunchGgrassCanopyCover / totalcanopycover) * Kss_Seg_Bunch
+//                        + (aoa.forbsCanopyCover / totalcanopycover) * Kss_Seg_Forbs;
+//
+//            }
+//
+//            // 3) CALCULATE KSS USED FOR RHEM
+//            if (totalcanopycover == 0) {
+//                if (totalgroundcover < 0.475) {
+//                    Kss_Final = 4.2587 + 2.5535 * aoa.slopeSteepness - 2.547 * totalgroundcover;
+//                    Kss_Final = Math.pow(10, Kss_Final);
+//                } else {
+//                    Kss_Final = 3.2773975 + 2.5535 * aoa.slopeSteepness - 0.4811 * totalgroundcover;
+//                    Kss_Final = Math.pow(10, Kss_Final);
+//                }
+//            } else if (totalgroundcover < 0.475) {
+//                Kss_Final = totalgroundcover / 0.475 * Kss_Average + (0.475 - totalgroundcover) / 0.475 * Kss_Seg_Shrub;
+//            } else {
+//                Kss_Final = Kss_Average;
+//            }
+//
+//            Kss_Final = (Kss_Final * 1.3) * 2.0;
+//            this.kss = Kss_Final;
+//        }
+//
+//    }
 }