@@ -15,7 +15,6 @@ |
import java.io.IOException; |
import java.util.Arrays; |
import java.util.HashMap; |
-import java.util.List; |
import java.util.Map; |
import javax.ws.rs.Path; |
import static m.oms.ages.V1_0.ID_AGES_JAR; |
@@ -46,31 +45,53 @@ |
static final String KEY_OPTIONS = "java.options"; |
|
static final String ID_AGES_JAR = "ages.jar"; |
- |
static final String RUN_INC = "run.inc"; |
|
|
@Override |
public void doProcess() throws Exception { |
- String dsl = parameter().getString(KEY_SCRIPT, resources().getFile("ages.sim").toString()); |
- String loglevel = parameter().getString(KEY_LOGLEVEL, "INFO"); |
- String options = parameter().getString(KEY_OPTIONS, ""); |
+ String dsl = parameter().getString(KEY_SCRIPT, resources().getFile(KEY_SCRIPT).toString()); |
|
- Map<String, String> run_param = new HashMap<>(); |
- run_param.put("startTime", "\"" + parameter().getString("startTime") + "\""); |
- run_param.put("endTime", "\"" + parameter().getString("endTime") + "\""); |
+ // pass request param to model runtime parameter -> run.inc |
+ Map<String, String> runParam = new HashMap<>(); |
+ passReqQuotedParam(runParam, "startTime"); |
+ passReqQuotedParam(runParam, "endTime"); |
|
- createParamInclude(run_param); |
+ passOptParam(runParam, "flowRouteTA"); |
+ passOptParam(runParam, "SoilOutLPS"); |
+ |
+ createParamInclude(runParam); |
|
File d = new File(dsl); |
if (!(d.isAbsolute() && d.exists())) { |
d = getWorkspaceFile(dsl); |
} |
- runAges(d, loglevel, options); |
+ runAges(d); |
// results().put(getWorkspaceFile("output")); |
} |
|
|
+ /** |
+ * pass a required parameter, quoted (string). |
+ */ |
+ private void passReqQuotedParam(Map<String, String> p, String name) throws ServiceException { |
+ p.put(name, "\"" + parameter().getString(name) + "\""); |
+ } |
+ |
+ |
+ /** |
+ * pass optional parameter, no quotes. |
+ */ |
+ private void passOptParam(Map<String, String> p, String name) throws ServiceException { |
+ if (parameter().has(name)) { |
+ p.put(name, parameter().getString(name)); |
+ } |
+ } |
+ |
+ |
+ /** |
+ * create a 'sim' include file for the run part. |
+ */ |
private void createParamInclude(Map<String, String> p) throws IOException { |
StringBuilder b = new StringBuilder(); |
b.append("parameter {\n"); |
@@ -82,13 +103,20 @@ |
} |
|
|
- private void runAges(File dsl, String loglevel, String options) throws Exception { |
+ /** |
+ * Run Ages |
+ * |
+ * @param dsl |
+ * @param options |
+ * @throws Exception |
+ */ |
+ private void runAges(File dsl) throws Exception { |
|
getWorkspaceFile("output").mkdirs(); |
getWorkspaceFile("logs").mkdirs(); |
|
// Create/execute a Ages. |
- Executable p = createProcess(loglevel, dsl, options); |
+ Executable p = createProcess(dsl); |
int result = p.exec(); |
if (result != 0) { |
FilenameFilter ff = new WildcardFileFilter("java*stderr.txt", IOCase.INSENSITIVE); |
@@ -103,21 +131,28 @@ |
} |
|
|
- private Executable createProcess(String loglevel, File dsl, String options) throws Exception { |
+ /** |
+ * Create the external Ages process. |
+ */ |
+ private Executable createProcess(File dsl) throws Exception { |
|
Map<String, String> sysprops = new HashMap(); |
sysprops.put("oms_prj", getWorkspaceDir().toString()); |
sysprops.put("csip_ages", resources().getFile(ID_AGES_JAR).getParent()); |
|
String[] jvmOptions = Binaries.asSysProps(sysprops); |
+ String options = parameter().getString(KEY_OPTIONS, ""); |
if (options != null && !options.isEmpty()) { |
- String[] opt = options.split("\\s+"); |
- jvmOptions = (String[]) ArrayUtils.addAll(jvmOptions, opt); |
+ jvmOptions = (String[]) ArrayUtils.addAll(jvmOptions, options.split("\\s+")); |
} |
|
- List<File> jars = Arrays.asList(resources().getFile(ID_AGES_JAR)); |
// java -Doms_prj=. -cp "dist/AgES.jar" oms3.CLI -l OFF -r "projects/sfir30/simulation/sfir30.sim" |
- return Binaries.getResourceOMSDSL(dsl, |
- jvmOptions, getWorkspaceDir(), jars, loglevel, LOG); |
+ return Binaries.getResourceOMSDSL( |
+ dsl, // the dsl file to run |
+ jvmOptions, // jvm options |
+ getWorkspaceDir(), // workspace dir |
+ Arrays.asList(resources().getFile(ID_AGES_JAR)), // the ages jar file |
+ parameter().getString(KEY_LOGLEVEL, "INFO"), // The log level |
+ LOG); // This session logger |
} |
} |