V1_0.java [src/java/m/rhem/rhem07_editparfile] Revision: eec6073e52da949dc07faaa850edc3cc717a0a79 Date: Fri Feb 10 10:28:16 MST 2017
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package m.rhem.rhem07_editparfile;
import csip.Config;
import csip.Executable;
import csip.ModelDataService;
import csip.ServiceException;
import csip.annotations.Polling;
import csip.annotations.Resource;
import static csip.annotations.ResourceType.EXECUTABLE;
import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.ws.rs.Path;
import m.rhem.model.Parameter;
import m.rhem.model.RhemModel;
import oms3.annotations.Description;
import oms3.annotations.Name;
import rhem.utils.DBQueries;
import rhem.utils.RHEMResources;
import static rhem.utils.RHEMResources.RHEM_EXE;
/**
* @version 1.0
* @author Rumpal Sidhu
*/
@Name("RHEM-07: Run model with edited paramater file")
@Description("Run the RHEM model with parameter file as input.")
@Path("m/rhem/editparfile/1.0")
@Polling(first = 5000, next = 2000)
@Resource(from = RHEMResources.class)
//@Resource(file = "*.par *.pre *.sum *.out *.run", type = OUTPUT)
public class V1_0 extends ModelDataService {
private String cligen_db = Config.getString("rhem.cligen_db", "file:/Users/rumpal/Documents/Work/csipDocuments/RHEM/cligen");
private String parameterFileName;
private String stormFileName;
private String summaryFileName;
private String runFileName;
private String detailedOutputFileName;
private Parameter parameter;
private int aoaId;
private int rhemSiteId;
private String scenarioName;
private String stateId;
private String climatestationId;
@Override
public void preProcess() throws ServiceException {
try {
aoaId = getIntParam("AoAID", 0);
rhemSiteId = getIntParam("rhem_site_id", 0);
scenarioName = getStringParam("scenarioname");
stateId = getStringParam("stateid");
climatestationId = getStringParam("climatestationid");
String diams = getStringParam("DIAMS");
String density = getStringParam("DENSITY");
String len = getStringParam("LEN");
String chezy = getStringParam("CHEZY");
String rchezy = getStringParam("RCHEZY");
String sl = getStringParam("SL");
String sx = getStringParam("SX");
String cv = getStringParam("CV");
String sat = getStringParam("SAT");
String kss = getStringParam("KSS");
String komega = getStringParam("KOMEGA");
String kcm = getStringParam("KCM");
String ke = getStringParam("KE");
String adf = getStringParam("ADF");
String alf = getStringParam("ALF");
String bare = getStringParam("BARE");
String g = getStringParam("G");
String dist = getStringParam("DIST");
String por = getStringParam("POR");
String fract = getStringParam("FRACT");
parameter = new Parameter(diams, density, len, chezy, rchezy,
sl, sx, cv, sat, kss, komega, kcm, ke, adf, alf, bare, g,
dist, por, fract);
} catch (ServiceException ex) {
throw new ServiceException("Error in processing the request JSON.", ex);
}
}
@Override
public void doProcess() throws ServiceException, IOException {
SimpleDateFormat sdf = new SimpleDateFormat("MMMM dd, YYYY, hh:mm a");
Date now = new Date();
String today = sdf.format(now);
String fileName = scenarioName;
if (scenarioName.length() > 15) {
fileName = scenarioName.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";
RhemModel rhemModel = new RhemModel(stateId, climatestationId,
scenarioName, today, getWorkspaceDir(), parameterFileName,
stormFileName, runFileName, summaryFileName);
rhemModel.generateParamFile(parameter);
rhemModel.generateStormFile(cligen_db, Double.parseDouble(parameter.getKe()));
rhemModel.generateRunFile();
runModel();
//If the run is successful then edit the summary file.
double avgYearlyPrecip = 0;
try (Connection connection = getResourceJDBC(RHEMResources.RHEM_DB);
Statement statement = connection.createStatement();) {
try (ResultSet rs = statement.executeQuery(DBQueries.RHEM07Query01(climatestationId))) {
while (rs.next()) {
avgYearlyPrecip = rs.getDouble("avg_yearly_precip_mm");
}
}
} catch (SQLException e) {
throw new ServiceException(e);
}
rhemModel.appendToSumFile(avgYearlyPrecip);
}
private void runModel() throws ServiceException, IOException {
int run = -1;
Executable rh = getResourceExe(RHEM_EXE);
rh.setArguments("-b", getWorkspaceFile(runFileName).toPath());
run = rh.exec();
if (run != 0) {
throw new ServiceException("Problem in running the model.");
}
}
@Override
public void postProcess() {
putResult("AoAID", aoaId, "Area of Analysis Identifier");
putResult("rhem_site_id", rhemSiteId, "RHEM Evaluation Site Identifier");
putResult("CLEN", parameter.getClen());
putResult("UNITS", "metric");
putResult("DIAMS", parameter.getDiams());
putResult("DENSITY", parameter.getDensity());
putResult("LEN", parameter.getLen());
putResult("CHEZY", parameter.getChezy());
putResult("RCHEZY", parameter.getRchezy());
putResult("SL", parameter.getSl());
putResult("SX", parameter.getSx());
putResult("CV", parameter.getCv());
putResult("SAT", parameter.getSat());
putResult("KSS", parameter.getKss());
putResult("KOMEGA", parameter.getKomega());
putResult("KCM", parameter.getKcm());
putResult("KE", parameter.getKe());
putResult("G", parameter.getG());
putResult("DIST", parameter.getDist());
putResult("POR", parameter.getPor());
putResult("ADF", parameter.getAdf());
putResult("ALF", parameter.getAlf());
putResult("BARE", parameter.getBare());
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");
}
}