ToPRMS_V1.java [src/java/m/prms/conv] Revision: 165da58a8724d08c41749b1fe4b7229568dbefc5 Date: Wed Jun 19 17:13:49 MDT 2019
package m.prms.conv;
import csip.ModelDataService;
import csip.ServiceException;
import csip.annotations.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.util.List;
import javax.ws.rs.Path;
import oms3.Conversions;
import oms3.io.CSProperties;
import oms3.io.CSTable;
import oms3.io.DataIO;
/**
* PRMS/OMS Resource conversion.
*
* @author od
*/
@Name("PRMS")
@Description("Parameter Converter OMS -> MMS")
@State(State.UNSTABLE)
@Author(org = "USGS")
@Author(org = "CSU")
@Category("Hydrology")
@Path("m/oms_to_mms/params/convert/1.0")
public class ToPRMS_V1 extends ModelDataService {
static final String FILE = "file";
@Override
protected void doProcess() throws Exception {
File f = formdata().getFile(FILE);
String name = f.getName();
if (name.endsWith(".csv")) {
File result = new File(f.getParentFile(), name.substring(0, name.indexOf('.')) + ".param");
CSProperties p = readParameter(f);
writeParamFile(p, result);
results().put(result);
} else {
throw new ServiceException("Error: cannot convert: " + f);
}
}
static String getParameterType(String p) {
try {
Integer.parseInt(p);
return "1";
} catch (NumberFormatException E) {
try {
Double.parseDouble(p);
return "2";
} catch (NumberFormatException E1) {
return "4";
}
}
}
static void writeParamFile(CSProperties p, File result) throws FileNotFoundException, ParseException {
PrintWriter w = new PrintWriter(result);
List<String> keys1D = DataIO.keysByMeta(p, "role", "dimension");
w.println("Generated by csip-prms");
w.println("Version: 1.7");
// write dimensions
w.println("** Dimensions **");
for (String k : keys1D) {
w.println("####");
w.println(k);
w.println(p.get(k));
}
// write parameter
w.println("** Parameter **");
// scalars
List<String> scalars = DataIO.keysByNotMeta(p, "bound");
for (String s : scalars) {
w.println("####");
w.println(s);
w.println("1");
w.println("one");
w.println("1");
String o = p.get(s).toString();
w.println(getParameterType(o));
w.println(o);
}
// 1D parameter
for (String s : p.keySet()) {
if (DataIO.isBound(p, s, 1)) {
w.println("####");
String[] d = s.split("\\$");
w.println(d[1]);
w.println("1");
w.println(d[0]);
w.println(p.get(d[0]));
System.out.println("1dim : " + s + " " + d[0] + "'" + d[1]);
System.out.println(" " + p.get(s));
String[] d1 = Conversions.convert(p.get(s), String[].class);
w.println(getParameterType(d1[0]));
for (String elem : d1) {
w.println(elem.trim());
}
System.out.println(d1);
}
}
// 2D parameter
for (String s : p.keySet()) {
if (DataIO.isBound(p, s, 2)) {
String m = p.getInfo(s).get("bound");
w.println("####");
w.println(s);
w.println("2");
String[] dims = m.split(",");
final int rows = DataIO.getInt(p, dims[0].trim());
final int cols = DataIO.getInt(p, dims[1].trim());
w.println(dims[0].trim());
w.println(dims[1].trim());
w.println(rows * cols);
String[][] d = Conversions.convert(p.get(s), String[][].class);
w.println(getParameterType(d[0][0]));
for (String[] row : d) {
for (String col : row) {
w.println(col.trim());
}
}
System.out.println("2dim : " + s);
}
}
w.close();
}
static CSProperties readParameter(File file) throws IOException {
CSProperties p = DataIO.properties();
if (DataIO.propertyExists("Parameter", file)) {
// original properties.
p.putAll(DataIO.properties(new FileReader(file), "Parameter"));
}
// check for tables in the file.
List<String> tables = DataIO.tables(file);
if (!tables.isEmpty()) {
for (String name : tables) {
CSTable t = DataIO.table(file, name);
// convert them to Properties.
CSProperties prop = DataIO.toProperties(t);
//prop.().put("file", f);
p.putAll(prop);
}
}
return p;
}
public static void main(String[] args) throws IOException, ParseException {
String b = "/od/oms/oms_examples/oms3.prj.prms/data/mixed_params.csv";
String b1 = "/tmp/mixed_params.param";
CSProperties p = readParameter(new File(b));
writeParamFile(p, new File(b1));
}
}