package hex.genmodel.utils;
/**
* Helper function for parsing the serialized model.
*/
public class ParseUtils {
public static double[] parseArrayOfDoubles(String input) {
if (!(input.startsWith("[") && input.endsWith("]")))
throw new NumberFormatException("Array should be enclosed in square brackets");
String[] parts = input.substring(1, input.length()-1).split(",");
double[] res = new double[parts.length];
for (int i = 0; i < parts.length; i++)
res[i] = Double.parseDouble(parts[i].trim());
return res;
}
public static int[] parseArrayOfInts(String input) {
if (!(input.startsWith("[") && input.endsWith("]")))
throw new NumberFormatException("Array should be enclosed in square brackets");
String[] parts = input.substring(1, input.length()-1).split(",");
int[] res = new int[parts.length];
for (int i = 0; i < parts.length; i++)
res[i] = Integer.parseInt(parts[i].trim());
return res;
}
public static Object tryParse(String input, Object defVal) {
if (input.equals("null")) return defVal;
if (defVal instanceof Boolean) {
return Boolean.valueOf(input);
} else {
if (input.equals("true")) return true;
if (input.equals("false")) return false;
}
if ("[]".equals(input) && (defVal != null) && defVal.getClass().isArray())
return defVal;
try { return Integer.parseInt(input); }
catch (NumberFormatException e) {
if ((defVal instanceof Number) && ! (defVal instanceof Double || defVal instanceof Float))
throw e; // integer number expected but couldn't be parsed
}
try { return Double.parseDouble(input); }
catch (NumberFormatException e) {
if (defVal instanceof Number)
throw e; // number expected but couldn't be parsed
}
try { return parseArrayOfInts(input); }
catch (NumberFormatException e) {
if (defVal instanceof int[]) throw e; // int array expected
}
try { return parseArrayOfDoubles(input); }
catch (NumberFormatException e) {
if (defVal instanceof double[]) throw e; // double array expected
}
return input;
}
}