private MSubmission restoreSubmission(Object obj) {
    JSONObject object = (JSONObject) obj;
    MSubmission submission = new MSubmission();
    Long jobId = (Long) object.get(JOB_ID);
    if (jobId == null) {
      jobId = (Long) object.get(JOB);
    }
    submission.setJobId(jobId);
    submission.setStatus(SubmissionStatus.valueOf((String) object.get(STATUS)));
    submission.setProgress((Double) object.get(PROGRESS));

    if (object.containsKey(CREATION_USER)) {
      submission.setCreationUser((String) object.get(CREATION_USER));
    }
    if (object.containsKey(CREATION_DATE)) {
      submission.setCreationDate(new Date((Long) object.get(CREATION_DATE)));
    }
    if (object.containsKey(LAST_UPDATE_USER)) {
      submission.setLastUpdateUser((String) object.get(LAST_UPDATE_USER));
    }
    if (object.containsKey(LAST_UPDATE_DATE)) {
      submission.setLastUpdateDate(new Date((Long) object.get(LAST_UPDATE_DATE)));
    }
    if (object.containsKey(EXTERNAL_ID)) {
      submission.setExternalJobId((String) object.get(EXTERNAL_ID));
    }
    if (object.containsKey(EXTERNAL_LINK)) {
      submission.setExternalLink((String) object.get(EXTERNAL_LINK));
    }
    if (object.containsKey(ERROR_SUMMARY)) {
      submission.getError().setErrorSummary((String) object.get(ERROR_SUMMARY));
    }
    if (object.containsKey(ERROR_DETAILS)) {
      submission.getError().setErrorDetails((String) object.get(ERROR_DETAILS));
    }
    if (object.containsKey(COUNTERS)) {
      submission.setCounters(restoreCounters((JSONObject) object.get(COUNTERS)));
    }

    if (object.containsKey(FROM_SCHEMA)) {
      submission.setFromSchema(restoreSchema((JSONObject) object.get(FROM_SCHEMA)));
    }
    if (object.containsKey(TO_SCHEMA)) {
      submission.setToSchema(restoreSchema((JSONObject) object.get(TO_SCHEMA)));
    }
    return submission;
  }