if (props == null || props.isEmpty()) {
return new JobParameters();
}
JobParametersBuilder propertiesBuilder = new JobParametersBuilder();
for (Iterator<Entry<Object, Object>> it = props.entrySet().iterator(); it.hasNext();) {
Entry<Object, Object> entry = it.next();
String key = (String) entry.getKey();
String value = (String) entry.getValue();
boolean identifying = isIdentifyingKey(key);
if(!identifying) {
key = key.replaceFirst(NON_IDENTIFYING_FLAG, "");
} else if(identifying && key.startsWith(IDENTIFYING_FLAG)) {
key = key.replaceFirst("\\" + IDENTIFYING_FLAG, "");
}
if (key.endsWith(DATE_TYPE)) {
Date date;
synchronized (dateFormat) {
try {
date = dateFormat.parse(value);
}
catch (ParseException ex) {
String suffix = (dateFormat instanceof SimpleDateFormat) ? ", use "
+ ((SimpleDateFormat) dateFormat).toPattern() : "";
throw new IllegalArgumentException("Date format is invalid: [" + value + "]" + suffix);
}
}
propertiesBuilder.addDate(StringUtils.replace(key, DATE_TYPE, ""), date, identifying);
}
else if (key.endsWith(LONG_TYPE)) {
Long result;
try {
result = (Long) parseNumber(value);
}
catch (ClassCastException ex) {
throw new IllegalArgumentException("Number format is invalid for long value: [" + value
+ "], use a format with no decimal places");
}
propertiesBuilder.addLong(StringUtils.replace(key, LONG_TYPE, ""), result, identifying);
}
else if (key.endsWith(DOUBLE_TYPE)) {
Double result = parseNumber(value).doubleValue();
propertiesBuilder.addDouble(StringUtils.replace(key, DOUBLE_TYPE, ""), result, identifying);
}
else if (StringUtils.endsWithIgnoreCase(key, STRING_TYPE)) {
propertiesBuilder.addString(StringUtils.replace(key, STRING_TYPE, ""), value, identifying);
}
else {
propertiesBuilder.addString(key, value, identifying);
}
}
return propertiesBuilder.toJobParameters();
}