private double getCurrPatientAge(Patient patient) {
    if (currPatientAge == INVALID_PATIENT_AGE && patient.getBirthDate() != null) {

      Calendar dob = Calendar.getInstance();
      dob.setTime(patient.getBirthDate());

      currPatientAge = DateUtil.getAgeInMonths(patient.getBirthDate(), new Date());
    }

    return currPatientAge;
  }
  public ResultLimit getResultLimitForTestAndPatient(Test test, Patient patient) {
    currPatientAge = INVALID_PATIENT_AGE;

    @SuppressWarnings("unchecked")
    List<ResultLimit> resultLimits = resultLimitDAO.getAllResultLimitsForTest(test);

    if (resultLimits.isEmpty()) {
      return null;
    } else if (patient == null
        || patient.getBirthDate() == null && GenericValidator.isBlankOrNull(patient.getGender())) {
      return defaultResultLimit(resultLimits);
    } else if (GenericValidator.isBlankOrNull(patient.getGender())) {
      return ageBasedResultLimit(resultLimits, patient);
    } else if (patient.getBirthDate() == null) {
      return genderBasedResultLimit(resultLimits, patient);
    } else {
      return ageAndGenderBasedResultLimit(resultLimits, patient);
    }
  }
  private ResultLimit genderBasedResultLimit(List<ResultLimit> resultLimits, Patient patient) {

    ResultLimit resultLimit = null;

    // First we look for a limit with no age
    for (ResultLimit limit : resultLimits) {
      if (limit.ageLimitsAreDefault() && patient.getGender().equals(limit.getGender())) {

        resultLimit = limit;
        break;
      }
    }

    // drop the age limit
    if (resultLimit == null) {
      for (ResultLimit limit : resultLimits) {
        if (patient.getGender().equals(limit.getGender())) {
          resultLimit = limit;
          break;
        }
      }
    }
    return resultLimit == null ? defaultResultLimit(resultLimits) : resultLimit;
  }
  /*
   * We only get here if patient has age and gender
   */
  private ResultLimit ageAndGenderBasedResultLimit(
      List<ResultLimit> resultLimits, Patient patient) {

    ResultLimit resultLimit = null;

    List<ResultLimit> fullySpecifiedLimits = new ArrayList<ResultLimit>();
    // first age and gender matter
    for (ResultLimit limit : resultLimits) {
      if (patient.getGender().equals(limit.getGender()) && !limit.ageLimitsAreDefault()) {

        // if fully qualified don't retest for only part of the
        // qualification
        fullySpecifiedLimits.add(limit);

        if (patientInAgeRange(patient, limit)) {

          resultLimit = limit;
          break;
        }
      }
    }

    resultLimits.removeAll(fullySpecifiedLimits);

    // second only age matters
    if (resultLimit == null) {
      for (ResultLimit limit : resultLimits) {
        if (!limit.ageLimitsAreDefault() && patientInAgeRange(patient, limit)) {

          resultLimit = limit;
          break;
        }
      }
    }

    // third only gender matters
    return resultLimit == null ? genderBasedResultLimit(resultLimits, patient) : resultLimit;
  }
  protected ActionForward performAction(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {

    String forward = FWD_SUCCESS;
    request.setAttribute(ALLOW_EDITS_KEY, "true");

    BaseActionForm dynaForm = (BaseActionForm) form;

    ActionMessages errors = dynaForm.validate(mapping, request);

    String accessionNumber = (String) dynaForm.get("accessionNumber");
    String birthWeight = (String) dynaForm.get("birthWeight");

    Patient patient = new Patient();
    Person person = new Person();
    Sample sample = new Sample();
    SampleHuman sampleHuman = new SampleHuman();
    SampleNewborn sampleNewborn = new SampleNewborn();
    UserSessionData usd = (UserSessionData) request.getSession().getAttribute(USER_SESSION_DATA);
    String sysUserId = String.valueOf(usd.getSystemUserId());

    // populate valueholder from form
    PropertyUtils.copyProperties(sample, dynaForm);
    PropertyUtils.copyProperties(person, dynaForm);
    PropertyUtils.copyProperties(sampleHuman, dynaForm);
    PropertyUtils.copyProperties(sampleNewborn, dynaForm);

    String birthDate = dynaForm.getString("birthDateForDisplay");
    String birthTime = dynaForm.getString("birthTimeForDisplay");
    String format = "MM/dd/yyyy";
    if ((birthDate != null) && (birthDate.length() > 0)) {
      java.text.SimpleDateFormat f = new java.text.SimpleDateFormat(format);
      java.sql.Timestamp dob = new java.sql.Timestamp(f.parse(birthDate).getTime());

      if ((birthTime != null) && (birthTime.length() > 0)) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(dob);
        cal.set(Calendar.HOUR_OF_DAY, Integer.valueOf(birthTime.substring(0, 2)).intValue());
        cal.set(Calendar.MINUTE, Integer.valueOf(birthTime.substring(3, 5)).intValue());
        dob = new java.sql.Timestamp(cal.getTimeInMillis());
      }
      patient.setBirthDate(dob);
    }

    String collectionDate = dynaForm.getString("collectionDateForDisplay");
    String collectionTime = dynaForm.getString("collectionTimeForDisplay");
    java.sql.Timestamp collDate = null;
    if ((collectionDate != null) && (collectionDate.length() > 0)) {
      java.text.SimpleDateFormat f = new java.text.SimpleDateFormat(format);
      collDate = new java.sql.Timestamp(f.parse(collectionDate).getTime());

      if ((collectionTime != null) && (collectionTime.length() > 0)) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(collDate);
        cal.set(Calendar.HOUR_OF_DAY, Integer.valueOf(collectionTime.substring(0, 2)).intValue());
        cal.set(Calendar.MINUTE, Integer.valueOf(collectionTime.substring(3, 5)).intValue());
        collDate = new java.sql.Timestamp(cal.getTimeInMillis());
      }
    }

    SampleDAO sampleDAO = new SampleDAOImpl();
    PersonDAO personDAO = new PersonDAOImpl();
    PatientDAO patientDAO = new PatientDAOImpl();
    SampleHumanDAO sampleHumanDAO = new SampleHumanDAOImpl();
    SampleNewbornDAO sampleNewbornDAO = new SampleNewbornDAOImpl();
    try {
      sample.setSysUserId(sysUserId);
      sample.setAccessionNumber(accessionNumber);
      sampleDAO.getSampleByAccessionNumber(sample);
      sample.setStatus(SystemConfiguration.getInstance().getSampleStatusEntry1Complete());
      sample.setCollectionDate(collDate);
      sampleDAO.updateData(sample);

      person.setSysUserId(sysUserId);
      patient.setSysUserId(sysUserId);
      personDAO.insertData(person);
      patient.setPerson(person);
      patientDAO.insertData(patient);

      sampleHuman.setSysUserId(sysUserId);
      sampleHuman.setSampleId(sample.getId());
      sampleHuman.setPatientId(patient.getId());
      sampleHumanDAO.insertData(sampleHuman);

      sampleNewborn.setSysUserId(sysUserId);
      sampleNewborn.setId(sampleHuman.getId());
      sampleNewborn.setWeight(birthWeight);
      sampleNewbornDAO.insertData(sampleNewborn);

    } catch (LIMSRuntimeException lre) {
      LogEvent.logError("NewbornSampleOneUpdateAction", "performAction()", lre.toString());
      request.setAttribute(IActionConstants.REQUEST_FAILED, true);
      errors = new ActionMessages();
      ActionError error = null;
      if (lre.getException() instanceof org.hibernate.StaleObjectStateException) {
        error = new ActionError("errors.OptimisticLockException", null, null);
      } else {
        error = new ActionError("errors.UpdateException", null, null);
      }
      errors.add(ActionMessages.GLOBAL_MESSAGE, error);
      saveErrors(request, errors);
      request.setAttribute(Globals.ERROR_KEY, errors);
      request.setAttribute(ALLOW_EDITS_KEY, "false");
      forward = FWD_FAIL;
    }
    if (forward.equals(FWD_FAIL)) return mapping.findForward(forward);

    return mapping.findForward(FWD_SUCCESS);
  }
  protected ActionForward performAction(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {

    String forward = FWD_SUCCESS;
    request.setAttribute(ALLOW_EDITS_KEY, TRUE);

    BaseActionForm dynaForm = (BaseActionForm) form;

    ActionMessages errors = dynaForm.validate(mapping, request);

    UserSessionData usd = (UserSessionData) request.getSession().getAttribute(USER_SESSION_DATA);
    String sysUserId = String.valueOf(usd.getSystemUserId());

    String birthDateForDisplay = dynaForm.getString("birthDateForDisplay");
    String birthTimeForDisplay = dynaForm.getString("birthTimeForDisplay");
    String format = "MM/dd/yyyy";
    java.sql.Timestamp dob = null;
    if ((birthDateForDisplay != null) && (birthDateForDisplay.length() > 0)) {
      java.text.SimpleDateFormat f = new java.text.SimpleDateFormat(format);
      dob = new java.sql.Timestamp(f.parse(birthDateForDisplay).getTime());

      if ((birthTimeForDisplay != null) && (birthTimeForDisplay.length() > 0)) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(dob);
        cal.set(
            Calendar.HOUR_OF_DAY, Integer.valueOf(birthTimeForDisplay.substring(0, 2)).intValue());
        cal.set(Calendar.MINUTE, Integer.valueOf(birthTimeForDisplay.substring(3, 5)).intValue());
        dob = new java.sql.Timestamp(cal.getTimeInMillis());
      }
    }

    String dateFirstFeedingForDisplay = dynaForm.getString("dateFirstFeedingForDisplay");
    String timeFirstFeedingForDisplay = dynaForm.getString("timeFirstFeedingForDisplay");
    java.sql.Timestamp dateFirstFeeding = null;
    if ((dateFirstFeedingForDisplay != null) && (dateFirstFeedingForDisplay.length() > 0)) {
      java.text.SimpleDateFormat f = new java.text.SimpleDateFormat(format);
      dateFirstFeeding = new java.sql.Timestamp(f.parse(dateFirstFeedingForDisplay).getTime());

      if ((timeFirstFeedingForDisplay != null) && (timeFirstFeedingForDisplay.length() > 0)) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(dob);
        cal.set(
            Calendar.HOUR_OF_DAY,
            Integer.valueOf(timeFirstFeedingForDisplay.substring(0, 2)).intValue());
        cal.set(
            Calendar.MINUTE,
            Integer.valueOf(timeFirstFeedingForDisplay.substring(3, 5)).intValue());
        dateFirstFeeding = new java.sql.Timestamp(cal.getTimeInMillis());
      }
    }

    String collectionDateForDisplay = dynaForm.getString("collectionDateForDisplay");
    String collectionTimeForDisplay = dynaForm.getString("collectionTimeForDisplay");
    java.sql.Timestamp collDate = null;
    if ((collectionDateForDisplay != null) && (collectionDateForDisplay.length() > 0)) {
      java.text.SimpleDateFormat f = new java.text.SimpleDateFormat(format);
      collDate = new java.sql.Timestamp(f.parse(collectionDateForDisplay).getTime());

      if ((collectionTimeForDisplay != null) && (collectionTimeForDisplay.length() > 0)) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(collDate);
        cal.set(
            Calendar.HOUR_OF_DAY,
            Integer.valueOf(collectionTimeForDisplay.substring(0, 2)).intValue());
        cal.set(
            Calendar.MINUTE, Integer.valueOf(collectionTimeForDisplay.substring(3, 5)).intValue());
        collDate = new java.sql.Timestamp(cal.getTimeInMillis());
      }
    }

    String dateTransfutionForDisplay = (String) dynaForm.getString("dateTransfutionForDisplay");
    java.sql.Timestamp dateTransfution = null;
    if ((dateTransfutionForDisplay != null) && (dateTransfutionForDisplay.length() > 0)) {
      java.text.SimpleDateFormat f = new java.text.SimpleDateFormat(format);
      dateTransfution = new java.sql.Timestamp(f.parse(dateTransfutionForDisplay).getTime());
    }

    String motherBirthDateForDisplay = (String) dynaForm.get("motherBirthDateForDisplay");
    java.sql.Timestamp motherBirthDate = null;
    if ((motherBirthDateForDisplay != null) && (motherBirthDateForDisplay.length() > 0)) {
      java.text.SimpleDateFormat f = new java.text.SimpleDateFormat(format);
      motherBirthDate = new java.sql.Timestamp(f.parse(motherBirthDateForDisplay).getTime());
    }

    org.hibernate.Transaction tx = HibernateUtil.getSession().beginTransaction();
    String accessionNumber = (String) dynaForm.get("accessionNumber");
    try {
      // Sample
      Sample sample = new Sample();
      SampleDAO sampleDAO = new SampleDAOImpl();
      sample.setSysUserId(sysUserId);
      sample.setAccessionNumber(accessionNumber);
      sampleDAO.getSampleByAccessionNumber(sample);
      sample.setBarCode((String) dynaForm.get("barcode"));
      sample.setStatus(SystemConfiguration.getInstance().getSampleStatusEntry2Complete());
      sample.setCollectionDate(collDate);
      sampleDAO.updateData(sample);

      // SampleHuman
      SampleHumanDAO sampleHumanDAO = new SampleHumanDAOImpl();
      SampleHuman sampleHuman = new SampleHuman();
      sampleHuman.setSampleId(sample.getId());
      sampleHumanDAO.getDataBySample(sampleHuman);

      // Patient - child
      Patient childPatient = new Patient();
      PatientDAO patientDAO = new PatientDAOImpl();
      Person childPerson = new Person();
      childPatient.setId(sampleHuman.getPatientId());
      patientDAO.getData(childPatient);

      // Person - child
      PersonDAO personDAO = new PersonDAOImpl();
      childPerson = childPatient.getPerson();
      personDAO.getData(childPerson);
      childPerson.setSysUserId(sysUserId);
      childPerson.setLastName((String) dynaForm.get("lastName"));
      childPerson.setFirstName((String) dynaForm.get("firstName"));
      personDAO.updateData(childPerson);

      childPatient.setSysUserId(sysUserId);
      childPatient.setBirthDate(dob);
      childPatient.setGender((String) dynaForm.get("gender"));
      patientDAO.updateData(childPatient);

      // PatientRelation
      PatientRelation patientRelation = new PatientRelation();
      PatientRelationDAO patientRelationDAO = new PatientRelationDAOImpl();
      patientRelation.setPatientIdSource(childPatient.getId());
      patientRelation = patientRelationDAO.getPatientRelationByChildId(patientRelation);
      Person motherPerson = new Person();
      Patient motherPatient = new Patient();
      if (!StringUtil.isNullorNill(patientRelation.getId())) {
        motherPatient.setId(patientRelation.getPatientId());
        patientDAO.getData(motherPatient);
        motherPerson = motherPatient.getPerson();
        personDAO.getData(motherPerson);
      }
      motherPerson.setLastName((String) dynaForm.get("motherLastName"));
      motherPerson.setFirstName((String) dynaForm.get("motherFirstName"));
      String motherHomePhone = (String) dynaForm.get("motherPhoneNumber");
      if ((motherHomePhone != null) && (motherHomePhone.length() > 0))
        motherHomePhone = StringUtil.formatPhone(motherHomePhone, null);
      motherPerson.setHomePhone(motherHomePhone);
      motherPerson.setStreetAddress((String) dynaForm.get("motherStreetAddress"));
      motherPerson.setCity((String) dynaForm.get("city"));
      motherPerson.setState((String) dynaForm.get("state"));
      motherPerson.setZipCode((String) dynaForm.get("zipCode"));
      motherPerson.setSysUserId(sysUserId);
      if (!StringUtil.isNullorNill(motherPerson.getId())) personDAO.updateData(motherPerson);
      else personDAO.insertData(motherPerson);

      motherPatient.setBirthDate(motherBirthDate);
      motherPatient.setPerson(motherPerson);
      motherPatient.setSysUserId(sysUserId);
      if (!StringUtil.isNullorNill(motherPatient.getId())) patientDAO.updateData(motherPatient);
      else patientDAO.insertData(motherPatient);

      patientRelation.setSysUserId(sysUserId);
      patientRelation.setPatientId(motherPatient.getId());

      String motherRelation = SystemConfiguration.getInstance().getNewbornPatientRelation();
      patientRelation.setRelation(motherRelation);
      if (!StringUtil.isNullorNill(patientRelation.getId()))
        patientRelationDAO.updateData(patientRelation);
      else patientRelationDAO.insertData(patientRelation);

      // SampleNewborn
      SampleNewborn sampleNewborn = new SampleNewborn();
      SampleNewbornDAO sampleNewbornDAO = new SampleNewbornDAOImpl();
      sampleNewborn.setId(sampleHuman.getId());
      sampleNewbornDAO.getData(sampleNewborn);
      sampleNewborn.setSysUserId(sysUserId);
      sampleNewborn.setMedicalRecordNumber((String) dynaForm.get("medicalRecordNumber"));
      sampleNewborn.setYnumber((String) dynaForm.get("ynumber"));
      sampleNewborn.setYellowCard((String) dynaForm.get("yellowCard"));
      sampleNewborn.setWeight((String) dynaForm.get("birthWeight"));
      sampleNewborn.setMultiBirth((String) dynaForm.get("multipleBirth"));
      sampleNewborn.setBirthOrder((String) dynaForm.get("birthOrder"));
      sampleNewborn.setGestationalWeek((Double) dynaForm.get("gestationalWeek"));
      sampleNewborn.setDateFirstFeeding(dateFirstFeeding);
      sampleNewborn.setBreast((String) dynaForm.get("breast"));
      sampleNewborn.setTpn((String) dynaForm.get("tpn"));
      sampleNewborn.setFormula((String) dynaForm.get("formula"));
      sampleNewborn.setMilk((String) dynaForm.get("milk"));
      sampleNewborn.setSoy((String) dynaForm.get("soy"));
      sampleNewborn.setJaundice((String) dynaForm.get("jaundice"));
      sampleNewborn.setAntibiotic((String) dynaForm.get("antibiotic"));
      sampleNewborn.setTransfused((String) dynaForm.get("transfused"));
      sampleNewborn.setNicu((String) dynaForm.get("nicuPatient"));
      sampleNewborn.setBirthDefect((String) dynaForm.get("birthDefect"));
      sampleNewborn.setPregnancyComplication((String) dynaForm.get("pregnancyComplication"));
      sampleNewborn.setDeceasedSibling((String) dynaForm.get("deceasedSibling"));
      sampleNewborn.setCauseOfDeath((String) dynaForm.get("causeOfDeath"));
      sampleNewborn.setFamilyHistory((String) dynaForm.get("familyHistory"));
      sampleNewborn.setOther((String) dynaForm.get("other"));
      sampleNewborn.setDateTransfution(dateTransfution);
      if (!StringUtil.isNullorNill(sampleNewborn.getId()))
        sampleNewbornDAO.updateData(sampleNewborn);
      else {
        sampleNewborn.setId(sampleHuman.getId());
        sampleNewbornDAO.insertData(sampleNewborn);
      }

      // Provider
      Provider provider = new Provider();
      Person providerPerson = new Person();
      ProviderDAO providerDAO = new ProviderDAOImpl();
      if (!StringUtil.isNullorNill(sampleHuman.getProviderId())) {
        provider.setId(sampleHuman.getProviderId());
        providerDAO.getData(provider);
      }

      if (!StringUtil.isNullorNill(sampleHuman.getProviderId())) {
        provider.setId(sampleHuman.getProviderId());
        providerDAO.getData(provider);
        providerPerson = (Person) provider.getPerson();
      }

      // SampleOrganization
      Organization o = new Organization();
      OrganizationDAO organizationDAO = new OrganizationDAOImpl();
      o.setOrganizationLocalAbbreviation((String) dynaForm.get("submitterNumber"));
      o = organizationDAO.getOrganizationByLocalAbbreviation(o, true);
      SampleOrganization sampleOrganization = new SampleOrganization();
      SampleOrganizationDAO sampleOrganizationDAO = new SampleOrganizationDAOImpl();
      sampleOrganizationDAO.getDataBySample(sampleOrganization);
      sampleOrganization.setSample(sample);
      sampleOrganization.setOrganization(o);
      sampleOrganization.setSysUserId(sysUserId);
      if (!StringUtil.isNullorNill(sampleOrganization.getId()))
        sampleOrganizationDAO.updateData(sampleOrganization);
      else sampleOrganizationDAO.insertData(sampleOrganization);

      // Person - provider
      providerPerson.setSysUserId(sysUserId);
      providerPerson.setFirstName((String) dynaForm.get("physicianFirstName"));
      providerPerson.setLastName((String) dynaForm.get("physicianLastName"));
      String providerHomePhone = (String) dynaForm.get("physicianPhoneNumber");
      if ((providerHomePhone != null) && (providerHomePhone.length() > 0))
        providerHomePhone = StringUtil.formatPhone(providerHomePhone, null);
      providerPerson.setHomePhone(providerHomePhone);
      if (!StringUtil.isNullorNill(providerPerson.getId())) personDAO.updateData(providerPerson);
      else personDAO.insertData(providerPerson);

      provider.setPerson(providerPerson);
      provider.setExternalId(BLANK);
      provider.setSysUserId(sysUserId);
      if (!StringUtil.isNullorNill(provider.getId())) providerDAO.updateData(provider);
      else providerDAO.insertData(provider);

      sampleHuman.setProviderId(provider.getId());
      sampleHuman.setSysUserId(sysUserId);
      sampleHumanDAO.updateData(sampleHuman);

      tx.commit();
    } catch (LIMSRuntimeException lre) {
      LogEvent.logError("NewbornSampleFullUpdateAction", "performAction()", lre.toString());
      tx.rollback();
      errors = new ActionMessages();
      ActionError error = null;
      if (lre.getException() instanceof org.hibernate.StaleObjectStateException) {
        error = new ActionError("errors.OptimisticLockException", null, null);
      } else {
        error = new ActionError("errors.UpdateException", null, null);
      }
      errors.add(ActionMessages.GLOBAL_MESSAGE, error);
      saveErrors(request, errors);
      request.setAttribute(Globals.ERROR_KEY, errors);
      request.setAttribute(ALLOW_EDITS_KEY, "false");
      forward = FWD_FAIL;

    } finally {
      HibernateUtil.closeSession();
    }
    if (forward.equals(FWD_FAIL)) return mapping.findForward(forward);

    // Trigger QA if birthWeight < 200 grams
    int birthWeight = Integer.parseInt((String) dynaForm.get("birthWeight"));
    if ((birthWeight > 0) && (birthWeight < 200)) {
      forward = FWD_SUCCESS_QA_EVENTS_ENTRY;
      return getForward(mapping.findForward(forward), accessionNumber);
    }

    return mapping.findForward(FWD_SUCCESS);
  }
  protected ActionForward performAction(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {
    String forward = FWD_SUCCESS;
    BaseActionForm dynaForm = (BaseActionForm) form;
    ActionMessages errors = null;

    request.setAttribute(ALLOW_EDITS_KEY, "false");
    request.setAttribute(PREVIOUS_DISABLED, "true");
    request.setAttribute(NEXT_DISABLED, "true");

    String accessionNumber = (String) dynaForm.getString("accessionNumber");
    SampleXmlHelper sampleXmlHelper = new SampleXmlHelper();

    if (!StringUtil.isNullorNill(accessionNumber)) {
      Sample sample = new Sample();
      SampleDAO sampleDAO = new SampleDAOImpl();
      sample.setAccessionNumber(accessionNumber);

      List testTestAnalytes = new ArrayList();
      try {
        sampleDAO.getSampleByAccessionNumber(sample);

        if (!StringUtil.isNullorNill(sample.getStatus())
            && sample
                .getStatus()
                .equals(SystemConfiguration.getInstance().getSampleStatusLabelPrinted())) {
          dynaForm.set("accessionNumber", accessionNumber);
          request.setAttribute(ALLOW_EDITS_KEY, "false");
          return mapping.findForward(FWD_FAIL);
        }

      } catch (LIMSRuntimeException lre) {

        LogEvent.logError(
            "AuditTrailReportBySampleProcessAction", "performAction()", lre.toString());
        errors = new ActionMessages();
        ActionError error = null;
        error = new ActionError("errors.GetException", null, null);
        errors.add(ActionMessages.GLOBAL_MESSAGE, error);
        saveErrors(request, errors);
        request.setAttribute(Globals.ERROR_KEY, errors);
        request.setAttribute(ALLOW_EDITS_KEY, "false");
        return mapping.findForward(FWD_FAIL);
      }

      String domain = sample.getDomain();

      String humanDomain = SystemConfiguration.getInstance().getHumanDomain();

      String animalDomain = SystemConfiguration.getInstance().getAnimalDomain();

      if (domain != null && domain.equals(humanDomain)) {
        // go to human view

        Patient patient = new Patient();
        Person patientPerson = new Person();
        Provider provider = new Provider();
        Person providerPerson = new Person();
        SampleHuman sampleHuman = new SampleHuman();
        SampleOrganization sampleOrganization = new SampleOrganization();
        Organization organization = new Organization();
        List sampleProjects = new ArrayList();
        Project project = new Project();
        Project project2 = new Project();
        SampleItem sampleItem = new SampleItem();

        try {

          PatientDAO patientDAO = new PatientDAOImpl();
          ProviderDAO providerDAO = new ProviderDAOImpl();
          SampleItemDAO sampleItemDAO = new SampleItemDAOImpl();
          SampleHumanDAO sampleHumanDAO = new SampleHumanDAOImpl();
          SampleOrganizationDAO sampleOrganizationDAO = new SampleOrganizationDAOImpl();
          AuditTrailDAO auditTrailDAO = new AuditTrailDAOImpl();
          SystemUserDAO systemUserDAO = new SystemUserDAOImpl();

          if (!StringUtil.isNullorNill(sample.getId())) {
            sampleHuman.setSampleId(sample.getId());
            sampleHumanDAO.getDataBySample(sampleHuman);
            sampleOrganization.setSampleId(sample.getId());
            sampleOrganizationDAO.getDataBySample(sampleOrganization);
            sampleItem.setSample(sample);
            sampleItemDAO.getDataBySample(sampleItem);

            if (sampleHuman != null) {
              if (sampleHuman.getPatientId() != null) {
                patient.setId(sampleHuman.getPatientId());
                patientDAO.getData(patient);
                patientPerson = patient.getPerson();
                provider.setId(sampleHuman.getProviderId());
                providerDAO.getData(provider);
                providerPerson = provider.getPerson();
              }
            }
          }
          organization = (Organization) sampleOrganization.getOrganization();
          sampleProjects = sample.getSampleProjects();

          if (sampleProjects != null && sampleProjects.size() > 0) {
            SampleProject sampleProject = (SampleProject) sampleProjects.get(0);
            project = sampleProject.getProject();
            if (sampleProjects.size() > 1) {
              SampleProject sampleProject2 = (SampleProject) sampleProjects.get(1);
              project2 = sampleProject2.getProject();
            }
          }

          String tableName = "SAMPLE";
          ReferenceTablesDAO referenceTablesDAO = new ReferenceTablesDAOImpl();
          ReferenceTables referenceTables = new ReferenceTables();
          referenceTables.setTableName(tableName);
          ReferenceTables rt = referenceTablesDAO.getReferenceTableByName(referenceTables);

          PropertyUtils.copyProperties(sampleXmlHelper, sample);

          // String data = auditTrailDAO.retrieveBlobData(sample.getId());
          // String data = auditTrailDAO.retrieveBlobData("9446");
          History history = new History();
          history.setReferenceId(sample.getId());
          history.setReferenceTable(rt.getId());
          List historyRecords = auditTrailDAO.getHistoryByRefIdAndRefTableId(history);

          List sampleHistoryRecords =
              populateHistoryList(request, historyRecords, "sample", "sampleHistoryMapping.xsl");
          sampleXmlHelper.setHistoryRecords((ArrayList) sampleHistoryRecords);

          tableName = "SAMPLE_ITEM";
          referenceTables = new ReferenceTables();
          referenceTables.setTableName(tableName);
          rt = referenceTablesDAO.getReferenceTableByName(referenceTables);
          history = new History();
          history.setReferenceId(sampleItem.getId());
          history.setReferenceTable(rt.getId());
          historyRecords = auditTrailDAO.getHistoryByRefIdAndRefTableId(history);

          List sampleItemHistoryRecords =
              populateHistoryList(
                  request, historyRecords, "sampleItem", "sampleItemHistoryMapping.xsl");
          sampleXmlHelper.addHistoryRecords((ArrayList) sampleItemHistoryRecords);

          tableName = "PATIENT";
          referenceTables = new ReferenceTables();
          referenceTables.setTableName(tableName);
          rt = referenceTablesDAO.getReferenceTableByName(referenceTables);
          history = new History();
          history.setReferenceId(patient.getId());
          history.setReferenceTable(rt.getId());
          historyRecords = auditTrailDAO.getHistoryByRefIdAndRefTableId(history);

          List patientHistoryRecords =
              populateHistoryList(request, historyRecords, "patient", "patientHistoryMapping.xsl");
          sampleXmlHelper.addHistoryRecords((ArrayList) patientHistoryRecords);

          tableName = "PERSON";
          referenceTables = new ReferenceTables();
          referenceTables.setTableName(tableName);
          rt = referenceTablesDAO.getReferenceTableByName(referenceTables);
          history = new History();
          history.setReferenceId(patientPerson.getId());
          history.setReferenceTable(rt.getId());
          historyRecords = auditTrailDAO.getHistoryByRefIdAndRefTableId(history);

          // List patientPersonHistoryRecords = populateHistoryList(request, historyRecords,
          // "person", "personHistoryMapping.xsl");
          // sampleXmlHelper.addHistoryRecords((ArrayList)patientPersonHistoryRecords);

          tableName = "PERSON";
          referenceTables = new ReferenceTables();
          referenceTables.setTableName(tableName);
          rt = referenceTablesDAO.getReferenceTableByName(referenceTables);
          history = new History();
          history.setReferenceId(providerPerson.getId());
          history.setReferenceTable(rt.getId());
          historyRecords = auditTrailDAO.getHistoryByRefIdAndRefTableId(history);

          // List providerPersonHistoryRecords = populateHistoryList(request, historyRecords,
          // "person", "personHistoryMapping.xsl");
          // sampleXmlHelper.addHistoryRecords((ArrayList)providerPersonHistoryRecords);

          tableName = "SAMPLE_PROJECTS";
          referenceTables = new ReferenceTables();
          referenceTables.setTableName(tableName);
          rt = referenceTablesDAO.getReferenceTableByName(referenceTables);
          history = new History();
          history.setReferenceId(providerPerson.getId());
          history.setReferenceTable(rt.getId());
          historyRecords = auditTrailDAO.getHistoryByRefIdAndRefTableId(history);

          List sampleProjectHistoryRecords =
              populateHistoryList(
                  request, historyRecords, "sampleProject", "sampleProjectHistoryMapping.xsl");
          sampleXmlHelper.addHistoryRecords((ArrayList) sampleProjectHistoryRecords);

          // initialize the form
          dynaForm.initialize(mapping);

          tableName = "SAMPLE_ORGANIZATION";
          referenceTables = new ReferenceTables();
          referenceTables.setTableName(tableName);
          rt = referenceTablesDAO.getReferenceTableByName(referenceTables);
          history = new History();
          history.setReferenceId(sampleOrganization.getId());
          history.setReferenceTable(rt.getId());
          historyRecords = auditTrailDAO.getHistoryByRefIdAndRefTableId(history);

          List sampleOrganizationHistoryRecords =
              populateHistoryList(
                  request,
                  historyRecords,
                  "sampleOrganization",
                  "sampleOrganizationHistoryMapping.xsl");
          sampleXmlHelper.addHistoryRecords((ArrayList) sampleOrganizationHistoryRecords);

          List historyRecordsForSorting = sampleXmlHelper.getHistoryRecords();

          Collections.sort(historyRecordsForSorting, HistoryComparator.NAME_COMPARATOR);

          String savedUserName = "";
          List dateSortList = new ArrayList();
          List finalList = new ArrayList();
          // now within name sort by date desc
          for (int i = 0; i < historyRecordsForSorting.size(); i++) {
            // break down into chunks by name
            HistoryXmlHelper hist = (HistoryXmlHelper) historyRecordsForSorting.get(i);

            if (i > 0 && !hist.getUserName().equals(savedUserName)) {
              // now sort chunk so far
              Collections.sort(dateSortList, HistoryComparator.DATE_COMPARATOR);
              finalList.addAll(dateSortList);
              dateSortList.clear();
            }
            dateSortList.add(hist);
            savedUserName = hist.getUserName();
          }

          if (dateSortList != null && dateSortList.size() > 0) {
            Collections.sort(dateSortList, HistoryComparator.DATE_COMPARATOR);
            finalList.addAll(dateSortList);
            dateSortList.clear();
          }

          sampleXmlHelper.setHistoryRecords((ArrayList) finalList);

          // initialize the form
          dynaForm.initialize(mapping);

        } catch (LIMSRuntimeException lre) {
          // if error then forward to fail and don't update to blank
          // page
          // = false
          // bugzilla 2154
          LogEvent.logError("ResultsEntryViewAction", "performAction()", lre.toString());
          errors = new ActionMessages();
          ActionError error = null;
          error = new ActionError("errors.GetException", null, null);
          errors.add(ActionMessages.GLOBAL_MESSAGE, error);
          saveErrors(request, errors);
          request.setAttribute(Globals.ERROR_KEY, errors);
          request.setAttribute(ALLOW_EDITS_KEY, "false");
          return mapping.findForward(FWD_FAIL);
        }

        // populate form from valueholder
        // PropertyUtils.setProperty(dynaForm, "sampleLastupdated", sample
        // .getLastupdated());
        PropertyUtils.setProperty(dynaForm, "patientFirstName", patientPerson.getFirstName());
        PropertyUtils.setProperty(dynaForm, "patientLastName", patientPerson.getLastName());
        PropertyUtils.setProperty(dynaForm, "patientId", patient.getExternalId());

        PropertyUtils.setProperty(dynaForm, "gender", patient.getGender());

        PropertyUtils.setProperty(dynaForm, "chartNumber", patient.getChartNumber());

        PropertyUtils.setProperty(
            dynaForm, "birthDateForDisplay", (String) patient.getBirthDateForDisplay());
        TypeOfSample typeOfSample = sampleItem.getTypeOfSample();
        SourceOfSample sourceOfSample = sampleItem.getSourceOfSample();
        if (typeOfSample == null) {
          PropertyUtils.setProperty(dynaForm, "typeOfSample", new TypeOfSample());
        } else {
          PropertyUtils.setProperty(dynaForm, "typeOfSample", typeOfSample);
        }
        if (sourceOfSample == null) {
          PropertyUtils.setProperty(dynaForm, "sourceOfSample", new SourceOfSample());
        } else {
          PropertyUtils.setProperty(dynaForm, "sourceOfSample", sourceOfSample);
        }

        PropertyUtils.setProperty(dynaForm, "sourceOther", sampleItem.getSourceOther());
        PropertyUtils.setProperty(
            dynaForm, "receivedDateForDisplay", (String) sample.getReceivedDateForDisplay());
        PropertyUtils.setProperty(
            dynaForm, "collectionDateForDisplay", (String) sample.getCollectionDateForDisplay());

        PropertyUtils.setProperty(
            dynaForm, "collectionTimeForDisplay", (String) sample.getCollectionTimeForDisplay());

        PropertyUtils.setProperty(
            dynaForm, "referredCultureFlag", (String) sample.getReferredCultureFlag());

        PropertyUtils.setProperty(
            dynaForm, "stickerReceivedFlag", (String) sample.getStickerReceivedFlag());

        if (organization == null) {
          PropertyUtils.setProperty(dynaForm, "organization", new Organization());
        } else {
          PropertyUtils.setProperty(dynaForm, "organization", organization);
        }

        if (project == null) {
          PropertyUtils.setProperty(dynaForm, "project", new Project());
        } else {
          PropertyUtils.setProperty(dynaForm, "project", project);
        }

        if (project2 == null) {
          PropertyUtils.setProperty(dynaForm, "project2", new Project());
        } else {
          PropertyUtils.setProperty(dynaForm, "project2", project2);
        }

        // reload accession number
        PropertyUtils.setProperty(dynaForm, "accessionNumber", accessionNumber);
        PropertyUtils.setProperty(dynaForm, "domain", domain);

        PropertyUtils.setProperty(dynaForm, "sampleXmlHelper", sampleXmlHelper);

        forward = FWD_SUCCESS_HUMAN;
      } else if (domain != null && domain.equals(animalDomain)) {
        // go to animal view
        // System.out.println("Going to animal view");
        forward = FWD_SUCCESS_ANIMAL;
      } else {
        forward = FWD_SUCCESS;
      }
    }

    return mapping.findForward(forward);
  }
  protected ActionForward performAction(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {
    // The first job is to determine if we are coming to this action with an
    // ID parameter in the request. If there is no parameter, we are
    // creating a new Sample.
    // If there is a parameter present, we should bring up an existing
    // Sample to edit.

    String forward = FWD_SUCCESS;
    request.setAttribute(ALLOW_EDITS_KEY, "true");

    String id = request.getParameter(ID);

    if (StringUtil.isNullorNill(id) || "0".equals(id)) {
      isNew = true;
    } else {
      isNew = false;
    }

    BaseActionForm dynaForm = (BaseActionForm) form;

    // first get the accessionNumber and whether we are on blank page or not
    String accessionNumber = (String) dynaForm.get("accessionNumber");
    // bugzilla 2154
    LogEvent.logDebug(
        "HumanSampleTwoPopulateHashMapFromDE1Action",
        "performAction()",
        "accessionNumber coming in: " + accessionNumber);
    String start = (String) request.getParameter("startingRecNo");

    String typeOfSample = (String) dynaForm.get("typeOfSampleDesc");
    String sourceOfSample = (String) dynaForm.get("sourceOfSampleDesc");

    List typeOfSamples = new ArrayList();
    List sourceOfSamples = new ArrayList();

    if (dynaForm.get("typeOfSamples") != null) {
      typeOfSamples = (List) dynaForm.get("typeOfSamples");
    } else {
      TypeOfSampleDAO typeOfSampleDAO = new TypeOfSampleDAOImpl();
      typeOfSamples = typeOfSampleDAO.getAllTypeOfSamples();
    }
    if (dynaForm.get("sourceOfSamples") != null) {
      sourceOfSamples = (List) dynaForm.get("sourceOfSamples");
    } else {
      SourceOfSampleDAO sourceOfSampleDAO = new SourceOfSampleDAOImpl();
      sourceOfSamples = sourceOfSampleDAO.getAllSourceOfSamples();
    }

    HashMap humanSampleOneMap = new HashMap();
    if (dynaForm.get("humanSampleOneMap") != null) {
      humanSampleOneMap = (HashMap) dynaForm.get("humanSampleOneMap");
    }

    String projectIdOrName = (String) dynaForm.get("projectIdOrName");
    String project2IdOrName = (String) dynaForm.get("project2IdOrName");

    String projectNameOrId = (String) dynaForm.get("projectNameOrId");
    String project2NameOrId = (String) dynaForm.get("project2NameOrId");

    String projectId = null;
    String project2Id = null;
    if (projectIdOrName != null && projectNameOrId != null) {
      try {
        Integer i = Integer.valueOf(projectIdOrName);
        projectId = projectIdOrName;

      } catch (NumberFormatException nfe) {
        // bugzilla 2154
        LogEvent.logError(
            "HumanSampleTwoPopulateHashMapFromDE1Action", "performAction()", nfe.toString());
        projectId = projectNameOrId;
      }
    }

    if (project2IdOrName != null && project2NameOrId != null) {
      try {
        Integer i = Integer.valueOf(project2IdOrName);
        project2Id = project2IdOrName;

      } catch (NumberFormatException nfe) {
        // bugzilla 2154
        LogEvent.logError(
            "HumanSampleTwoPopulateHashMapFromDE1Action", "performAction()", nfe.toString());
        project2Id = project2NameOrId;
      }
    }

    // bugzilla 2154
    LogEvent.logDebug(
        "HumanSampleTwoPopulateHashMapFromDE1Action",
        "performAction()",
        "ProjectId is: " + projectId + " Project2Id is: " + project2Id);

    // set current date for validation of dates
    Date today = Calendar.getInstance().getTime();
    Locale locale = (Locale) request.getSession().getAttribute("org.apache.struts.action.LOCALE");
    String dateAsText = DateUtil.formatDateAsText(today, locale);

    Patient patient = new Patient();
    Person person = new Person();
    Provider provider = new Provider();
    Person providerPerson = new Person();
    Sample sample = new Sample();
    SampleHuman sampleHuman = new SampleHuman();
    SampleOrganization sampleOrganization = new SampleOrganization();
    List sampleProjects = new ArrayList();
    List updatedSampleProjects = new ArrayList();
    SampleItem sampleItem = new SampleItem();
    // TODO need to populate this with tests entered in HSE I
    List analyses = new ArrayList();

    // tests are not handled in HSE II
    /*
     * String stringOfTestIds = (String) dynaForm.get("selectedTestIds");
     *
     * String[] listOfTestIds = stringOfTestIds.split(SystemConfiguration
     * .getInstance().getDefaultIdSeparator(), -1);
     *
     * List analyses = new ArrayList(); for (int i = 0; i <
     * listOfTestIds.length; i++) { if
     * (!StringUtil.isNullorNill(listOfTestIds[i])) { Analysis analysis =
     * new Analysis(); analysis.setTestId(listOfTestIds[i]); // TODO: need
     * to populate this with actual data!!!
     * analysis.setAnalysisType("TEST"); analyses.add(analysis); } }
     */

    ActionMessages errors = null;

    // validate on server-side sample accession number

    try {
      errors = new ActionMessages();
      errors = validateAccessionNumber(request, errors, dynaForm);
      // System.out.println("Just validated accessionNumber");
    } catch (Exception e) {
      // bugzilla 2154
      LogEvent.logError(
          "HumanSampleTwoPopulateHashMapFromDE1Action", "performAction()", e.toString());
      ActionError error = new ActionError("errors.ValidationException", null, null);
      errors.add(ActionMessages.GLOBAL_MESSAGE, error);
    }
    // System.out.println("This is errors after validation of accn Number "
    // + errors);
    if (errors != null && errors.size() > 0) {
      saveErrors(request, errors);
      // initialize the form but retain the invalid accessionNumber
      dynaForm.initialize(mapping);
      dynaForm.set("accessionNumber", accessionNumber);

      // repopulate lists
      PropertyUtils.setProperty(dynaForm, "typeOfSamples", typeOfSamples);
      PropertyUtils.setProperty(dynaForm, "sourceOfSamples", sourceOfSamples);
      request.setAttribute(ALLOW_EDITS_KEY, "false");

      return mapping.findForward(FWD_FAIL);
    }
    // System.out.println("Now try to get data for accession number ");
    try {

      PatientDAO patientDAO = new PatientDAOImpl();
      PersonDAO personDAO = new PersonDAOImpl();
      ProviderDAO providerDAO = new ProviderDAOImpl();
      SampleDAO sampleDAO = new SampleDAOImpl();
      SampleItemDAO sampleItemDAO = new SampleItemDAOImpl();
      SampleHumanDAO sampleHumanDAO = new SampleHumanDAOImpl();
      SampleOrganizationDAO sampleOrganizationDAO = new SampleOrganizationDAOImpl();
      AnalysisDAO analysisDAO = new AnalysisDAOImpl();

      sample.setAccessionNumber(accessionNumber);
      sampleDAO.getSampleByAccessionNumber(sample);
      if (!StringUtil.isNullorNill(sample.getId())) {
        sampleHuman.setSampleId(sample.getId());
        sampleHumanDAO.getDataBySample(sampleHuman);
        sampleOrganization.setSampleId(sample.getId());
        sampleOrganizationDAO.getDataBySample(sampleOrganization);
        // bugzilla 1773 need to store sample not sampleId for use in
        // sorting
        sampleItem.setSample(sample);
        sampleItemDAO.getDataBySample(sampleItem);
        patient.setId(sampleHuman.getPatientId());
        patientDAO.getData(patient);
        person = patient.getPerson();
        personDAO.getData(person);

        provider.setId(sampleHuman.getProviderId());
        providerDAO.getData(provider);
        providerPerson = provider.getPerson();
        personDAO.getData(providerPerson);
        // bugzilla 2227
        analyses = analysisDAO.getMaxRevisionAnalysesBySample(sampleItem);

        humanSampleOneMap =
            populateHumanSampleOneMap(
                patient,
                person,
                provider,
                providerPerson,
                sample,
                sampleHuman,
                sampleOrganization,
                sampleItem,
                analyses);
      }

    } catch (LIMSRuntimeException lre) {
      // if error then forward to fail and don't update to blank page
      // = false
      // bugzilla 2154
      LogEvent.logError(
          "HumanSampleTwoPopulateHashMapFromDE1Action", "performAction()", lre.toString());
      errors = new ActionMessages();
      ActionError error = null;
      if (lre.getException() instanceof org.hibernate.StaleObjectStateException) {
        // how can I get popup instead of struts error at the top of
        // page?
        // ActionMessages errors = dynaForm.validate(mapping,
        // request);
        error = new ActionError("errors.OptimisticLockException", null, null);
        // bugzilla 2154
        LogEvent.logError(
            "HumanSampleTwoPopulateHashMapFromDE1Action",
            "performAction()",
            "errors.OptimisticLockException");
      } else {
        error = new ActionError("errors.GetException", null, null);
        // bugzilla 2154
        LogEvent.logError(
            "HumanSampleTwoPopulateHashMapFromDE1Action", "performAction()", "errors.GetException");
      }
      errors.add(ActionMessages.GLOBAL_MESSAGE, error);
      saveErrors(request, errors);
      request.setAttribute(Globals.ERROR_KEY, errors);
      request.setAttribute(ALLOW_EDITS_KEY, "false");
      return mapping.findForward(FWD_FAIL);
    }

    // initialize the form
    dynaForm.initialize(mapping);

    // set lastupdated fields
    dynaForm.set("lastupdated", sample.getLastupdated());
    dynaForm.set("personLastupdated", person.getLastupdated());
    dynaForm.set("patientLastupdated", patient.getLastupdated());
    dynaForm.set("providerPersonLastupdated", providerPerson.getLastupdated());
    dynaForm.set("providerLastupdated", provider.getLastupdated());
    dynaForm.set("sampleItemLastupdated", sampleItem.getLastupdated());
    dynaForm.set("sampleHumanLastupdated", sampleHuman.getLastupdated());
    dynaForm.set("sampleOrganizationLastupdated", sampleOrganization.getLastupdated());

    if (updatedSampleProjects != null && updatedSampleProjects.size() > 0) {
      if (updatedSampleProjects.size() == 1) {
        SampleProject sp = (SampleProject) updatedSampleProjects.get(0);
        dynaForm.set("sampleProject1Lastupdated", sp.getLastupdated());
        // bugzilla 1857 deprecated stuff
        // System.out.println("This is sp ts "
        //		+ StringUtil.formatDateAsText(sp.getLastupdated(),
        //				SystemConfiguration.getInstance()
        //						.getDefaultLocale()));
      }
      if (updatedSampleProjects.size() == 2) {
        SampleProject sp2 = (SampleProject) updatedSampleProjects.get(1);
        dynaForm.set("sampleProject2Lastupdated", sp2.getLastupdated());
        // bugzilla 1857 deprecated stuff
        // System.out.println("This is sp2 ts "
        //		+ StringUtil.formatDateAsText(sp2.getLastupdated(),
        //				SystemConfiguration.getInstance()
        //						.getDefaultLocale()));
      }
    }

    if (dynaForm.get("sampleProject1Lastupdated") == null) {
      PropertyUtils.setProperty(
          form, "sampleProject1Lastupdated", new Timestamp(System.currentTimeMillis()));
    }
    if (dynaForm.get("sampleProject2Lastupdated") == null) {
      PropertyUtils.setProperty(
          form, "sampleProject2Lastupdated", new Timestamp(System.currentTimeMillis()));
    }

    PropertyUtils.setProperty(dynaForm, "currentDate", dateAsText);
    PropertyUtils.setProperty(dynaForm, "accessionNumber", sample.getAccessionNumber());
    // set receivedDate
    PropertyUtils.setProperty(
        dynaForm, "receivedDateForDisplay", (String) sample.getReceivedDateForDisplay());

    PropertyUtils.setProperty(dynaForm, "typeOfSamples", typeOfSamples);
    PropertyUtils.setProperty(dynaForm, "sourceOfSamples", sourceOfSamples);
    PropertyUtils.setProperty(dynaForm, "humanSampleOneMap", humanSampleOneMap);

    if ("true".equalsIgnoreCase(request.getParameter("close"))) {
      forward = FWD_CLOSE;
    }

    if (sample.getId() != null && !sample.getId().equals("0")) {
      request.setAttribute(ID, sample.getId());
    }

    if (forward.equals(FWD_SUCCESS)) {
      request.setAttribute("menuDefinition", "default");
    }

    // bugzilla 2154
    LogEvent.logDebug(
        "HumanSampleTwoPopulateHashMapFromDE1Action",
        "performAction()",
        "forwarding to: " + forward);

    // pdf - get accession number List
    if (SystemConfiguration.getInstance().getEnabledSamplePdf().equals(YES)) {
      String status =
          SystemConfiguration.getInstance().getSampleStatusEntry1Complete(); // status = 2
      String humanDomain = SystemConfiguration.getInstance().getHumanDomain();
      UserTestSectionDAO userTestSectionDAO = new UserTestSectionDAOImpl();
      List accessionNumberListTwo =
          userTestSectionDAO.getSamplePdfList(request, locale, status, humanDomain);
      PropertyUtils.setProperty(form, "accessionNumberListTwo", accessionNumberListTwo);
    }

    // return getForward(mapping.findForward(forward), id, start);
    return mapping.findForward(forward);
  }
  private HashMap populateHumanSampleOneMap(
      Patient patient,
      Person person,
      Provider provider,
      Person providerPerson,
      Sample sample,
      SampleHuman sampleHuman,
      SampleOrganization sampleOrganization,
      SampleItem sampleItem,
      List analyses) {
    HashMap humanSampleOneMap = new HashMap();

    List sampleProjects = new ArrayList();
    SampleProject sampleProject = null;
    SampleProject sampleProject2 = null;

    sampleProjects = sample.getSampleProjects();

    if (sampleProjects != null && sampleProjects.size() > 0) {
      sampleProject = (SampleProject) sampleProjects.get(0);
      if (sampleProjects.size() > 1) {
        sampleProject2 = (SampleProject) sampleProjects.get(1);
      }
    }

    if (sample.getAccessionNumber() != null) {
      humanSampleOneMap.put("accessionNumber", sample.getAccessionNumber());
    } else {
      humanSampleOneMap.put("accessionNumber", "");
    }

    if (patient.getBirthDateForDisplay() != null) {
      humanSampleOneMap.put("birthDateForDisplay", patient.getBirthDateForDisplay());
    } else {
      humanSampleOneMap.put("birthDateForDisplay", "");
    }

    if (sample.getCollectionDateForDisplay() != null) {
      humanSampleOneMap.put("collectionDateForDisplay", sample.getCollectionDateForDisplay());
    } else {
      humanSampleOneMap.put("collectionDateForDisplay", "");
    }

    if (sample.getCollectionTimeForDisplay() != null) {
      humanSampleOneMap.put("collectionTimeForDisplay", sample.getCollectionTimeForDisplay());
    } else {
      // bugzilla 1894
      humanSampleOneMap.put(
          "collectionTimeForDisplay",
          SystemConfiguration.getInstance().getHumanSampleOneDefaultCollectionTimeForDisplay());
    }

    // bugzilla 1904
    if (patient.getChartNumber() != null) {
      humanSampleOneMap.put("chartNumber", patient.getChartNumber());
    } else {
      humanSampleOneMap.put("chartNumber", "");
    }

    if (person.getCity() != null) {
      // bugzilla 1766
      humanSampleOneMap.put("city", person.getCity().toUpperCase().trim());
    } else {
      humanSampleOneMap.put("city", "");
    }

    if (sample.getClientReference() != null) {
      humanSampleOneMap.put("clientReference", sample.getClientReference());
    } else {
      humanSampleOneMap.put("clientReference", "");
    }

    if (patient.getExternalId() != null) {
      humanSampleOneMap.put("externalId", patient.getExternalId());
    } else {
      humanSampleOneMap.put("externalId", "");
    }

    if (person.getFirstName() != null) {
      humanSampleOneMap.put("firstName", person.getFirstName());
    } else {
      humanSampleOneMap.put("firstName", "");
    }

    if (patient.getGender() != null) {
      humanSampleOneMap.put("gender", patient.getGender());
    } else {
      humanSampleOneMap.put("gender", "");
    }

    if (person.getLastName() != null) {
      humanSampleOneMap.put("lastName", person.getLastName());
    } else {
      humanSampleOneMap.put("lastName", "");
    }

    if (person.getMiddleName() != null) {
      humanSampleOneMap.put("middleName", person.getMiddleName());
    } else {
      humanSampleOneMap.put("middleName", "");
    }

    if (person.getMultipleUnit() != null) {
      humanSampleOneMap.put("multipleUnit", person.getMultipleUnit());
    } else {
      humanSampleOneMap.put("multipleUnit", "");
    }

    if (sampleOrganization != null && sampleOrganization.getOrganization() != null) {
      // bugzilla 2069
      humanSampleOneMap.put(
          "organizationLocalAbbreviation",
          sampleOrganization.getOrganization().getOrganizationLocalAbbreviation());
      humanSampleOneMap.put(
          "organizationNameForDisplay", sampleOrganization.getOrganization().getOrganizationName());
    } else {
      humanSampleOneMap.put("organizationLocalAbbreviation", "");
      humanSampleOneMap.put("organizationNameForDisplay", "");
    }
    if (sampleProject != null && sampleProject.getProject() != null) {
      // bugzilla 2438
      humanSampleOneMap.put("projectId", sampleProject.getProject().getLocalAbbreviation());
      // bugzilla 1766 since we capitolize project name do this here
      // for comparison purposes
      humanSampleOneMap.put(
          "projectName", sampleProject.getProject().getProjectName().toUpperCase().trim());
    } else {
      humanSampleOneMap.put("projectId", "");
      humanSampleOneMap.put("projectName", "");
    }

    if (sampleProject2 != null && sampleProject2.getProject() != null) {
      // bugzilla 2438
      humanSampleOneMap.put("projectId2", sampleProject2.getProject().getLocalAbbreviation());
      // bugzilla 1766 since we capitolize project name do this here
      // for comparison purposes
      humanSampleOneMap.put(
          "projectName2", sampleProject2.getProject().getProjectName().toUpperCase().trim());
    } else {
      humanSampleOneMap.put("projectId2", "");
      humanSampleOneMap.put("projectName2", "");
    }

    if (providerPerson.getFirstName() != null) {
      humanSampleOneMap.put("providerFirstName", providerPerson.getFirstName());
    } else {
      humanSampleOneMap.put("providerFirstName", "");
    }

    if (providerPerson.getLastName() != null) {
      humanSampleOneMap.put("providerLastName", providerPerson.getLastName());
    } else {
      humanSampleOneMap.put("providerLastName", "");
    }

    if (providerPerson.getWorkPhone() != null) {
      String storedResult = providerPerson.getWorkPhone();
      humanSampleOneMap.put("providerWorkPhone", StringUtil.formatPhoneForDisplay(storedResult));
    } else {
      humanSampleOneMap.put("providerWorkPhone", "");
    }

    if (providerPerson.getWorkPhone() != null) {
      String storedResult = providerPerson.getWorkPhone();
      // bugzilla 2442
      String extension = StringUtil.formatExtensionForDisplay(storedResult);
      humanSampleOneMap.put("providerWorkPhoneExtension", StringUtil.trim(extension));
    } else {
      humanSampleOneMap.put("providerWorkPhoneExtension", "");
    }

    if (sample.getReceivedDateForDisplay() != null) {
      humanSampleOneMap.put("receivedDateForDisplay", sample.getReceivedDateForDisplay());
    } else {
      humanSampleOneMap.put("receivedDateForDisplay", "");
    }

    if (sample.getReferredCultureFlag() != null) {
      humanSampleOneMap.put("referredCultureFlag", sample.getReferredCultureFlag());
    } else {
      humanSampleOneMap.put("referredCultureFlag", "");
    }

    if (sampleItem.getSourceOfSample() != null) {
      SourceOfSample sos = (SourceOfSample) sampleItem.getSourceOfSample();
      // bugzilla 1766
      humanSampleOneMap.put("sourceOfSampleDesc", sos.getDescription().toUpperCase().trim());
      // bugzilla 1465
      humanSampleOneMap.put("sourceOfSampleId", sos.getId());
    } else {
      humanSampleOneMap.put("sourceOfSampleDesc", "");
      // bugzilla 1465
      humanSampleOneMap.put("sourceOfSampleId", "");
    }

    if (sampleItem.getSourceOther() != null) {
      humanSampleOneMap.put("sourceOther", sampleItem.getSourceOther().trim());
    } else {
      humanSampleOneMap.put("sourceOther", "");
    }

    if (person.getState() != null) {
      humanSampleOneMap.put("state", person.getState());
    } else {
      humanSampleOneMap.put("state", "");
    }

    if (sample.getStickerReceivedFlag() != null) {
      humanSampleOneMap.put("stickerReceivedFlag", sample.getStickerReceivedFlag());
    } else {
      humanSampleOneMap.put("stickerReceivedFlag", "");
    }

    if (person.getStreetAddress() != null) {
      humanSampleOneMap.put("streetAddress", person.getStreetAddress().trim());
    } else {
      humanSampleOneMap.put("streetAddress", "");
    }

    if (sampleItem.getTypeOfSample() != null) {
      TypeOfSample tos = (TypeOfSample) sampleItem.getTypeOfSample();
      // bugzilla 1766
      humanSampleOneMap.put("typeOfSampleDesc", tos.getDescription().toUpperCase().trim());
      // bugzilla 1465
      humanSampleOneMap.put("typeOfSampleId", tos.getId());
    } else {
      humanSampleOneMap.put("typeOfSampleDesc", "");
      // bugzilla 1465
      humanSampleOneMap.put("typeOfSampleId", "");
    }

    if (person.getZipCode() != null) {
      humanSampleOneMap.put("zipCode", person.getZipCode().trim());
    } else {
      humanSampleOneMap.put("zipCode", "");
    }

    return humanSampleOneMap;
  }