final JsonParser parser = Json.createParser(new StringReader(json));
final JobExecutionBuilder builder = JobExecutionBuilder.create();
String key = null;
while (parser.hasNext()) {
final Event event = parser.next();
switch (event) {
case KEY_NAME:
key = parser.getString();
break;
case VALUE_FALSE:
case VALUE_NULL:
case VALUE_NUMBER:
case VALUE_STRING:
case VALUE_TRUE:
final String value = parser.getString();
if (key == null) {
throw new IllegalStateException(String.format("No key for value '%s'. Parsing position: %s%n\t%s", value, parser.getLocation(), json));
}
switch (key) {
case ID:
if (value != null) {
builder.setId(Long.parseLong(value));
}
break;
case NAME:
builder.setName(value);
break;
case STATUS:
if (value != null) {
builder.setStatus(BatchStatus.valueOf(value));
}
break;
case EXIT_STATUS:
builder.setExitStatus(value);
break;
case CREATE_TIME:
if (value != null) {
builder.setCreateTime(Long.parseLong(value));
}
break;
case END_TIME:
if (value != null) {
builder.setEndTime(Long.parseLong(value));
}
break;
case LAST_UPDATE_TIME:
if (value != null) {
builder.setLastUpdatedTime(Long.parseLong(value));
}
break;
case START_TIME:
if (value != null) {
builder.setStartTime(Long.parseLong(value));
}
break;
case PROPERTIES:
String k = null;
while (parser.hasNext()) {
final Event e = parser.next();
switch (e) {
case KEY_NAME:
k = parser.getString();
break;
case VALUE_FALSE: