public void deleteData(String siteInformationId, String currentUserId)
      throws LIMSRuntimeException {

    try {
      AuditTrailDAO auditDAO = new AuditTrailDAOImpl();

      SiteInformation oldData = readSiteInformation(siteInformationId);
      SiteInformation newData = new SiteInformation();

      auditDAO.saveHistory(
          newData, oldData, currentUserId, IActionConstants.AUDIT_TRAIL_DELETE, "SITE_INFORMATION");

    } catch (Exception e) {
      LogEvent.logError("SiteInformationDAOImpl", "AuditTrail deleteData()", e.toString());
      throw new LIMSRuntimeException("Error in SiteInformation AuditTrail deleteData()", e);
    }

    try {
      SiteInformation siteInformation = readSiteInformation(siteInformationId);
      HibernateUtil.getSession().delete(siteInformation);
      HibernateUtil.getSession().flush();
      HibernateUtil.getSession().clear();

    } catch (Exception e) {
      LogEvent.logError("SiteInformationsDAOImpl", "deleteData()", e.toString());
      throw new LIMSRuntimeException("Error in SiteInformation deleteData()", e);
    }
  }
  public void updateData(SiteInformation siteInformation) throws LIMSRuntimeException {

    SiteInformation oldData = readSiteInformation(siteInformation.getId());
    SiteInformation newData = siteInformation;

    try {
      AuditTrailDAO auditDAO = new AuditTrailDAOImpl();

      auditDAO.saveHistory(
          newData,
          oldData,
          siteInformation.getSysUserId(),
          IActionConstants.AUDIT_TRAIL_UPDATE,
          "SITE_INFORMATION");
    } catch (Exception e) {
      LogEvent.logError("SiteInformationDAOImpl", "AuditTrail updateData()", e.toString());
      throw new LIMSRuntimeException("Error in SiteInformation AuditTrail updateData()", e);
    }

    try {
      HibernateUtil.getSession().merge(siteInformation);
      HibernateUtil.getSession().flush();
      HibernateUtil.getSession().clear();
      HibernateUtil.getSession().evict(siteInformation);
      HibernateUtil.getSession().refresh(siteInformation);
    } catch (Exception e) {
      LogEvent.logError("SiteInformationsDAOImpl", "updateData()", e.toString());
      throw new LIMSRuntimeException("Error in SiteInformation updateData()", e);
    }
  }
Example #3
0
  public void updateData(SampleHuman sampleHuman) throws LIMSRuntimeException {

    SampleHuman oldData = readSampleHuman(sampleHuman.getId());
    SampleHuman newData = sampleHuman;

    // add to audit trail
    try {
      AuditTrailDAO auditDAO = new AuditTrailDAOImpl();
      String sysUserId = sampleHuman.getSysUserId();
      String event = IActionConstants.AUDIT_TRAIL_UPDATE;
      String tableName = "SAMPLE_HUMAN";
      auditDAO.saveHistory(newData, oldData, sysUserId, event, tableName);
    } catch (Exception e) {
      // bugzilla 2154
      LogEvent.logError("SampleHumanDAOImpl", "updateData()", e.toString());
      throw new LIMSRuntimeException("Error in SampleHuman AuditTrail updateData()", e);
    }

    try {
      HibernateUtil.getSession().merge(sampleHuman);
      HibernateUtil.getSession().flush();
      HibernateUtil.getSession().clear();
      HibernateUtil.getSession().evict(sampleHuman);
      HibernateUtil.getSession().refresh(sampleHuman);
    } catch (Exception e) {
      // bugzilla 2154
      LogEvent.logError("SampleHumanDAOImpl", "updateData()", e.toString());
      throw new LIMSRuntimeException("Error in SampleHuman updateData()", e);
    }
  }
  public void updateData(ReferenceTables referenceTables) throws LIMSRuntimeException {
    // bugzilla 1482 throw Exception if record already exists

    // String isHl7Encoded;
    // String keepHistory;
    boolean isNew = false;

    /*isHl7Encoded = referencetables.getIsHl7Encoded();
    System.out.println ("Yi isH17Encodded is " + isHl7Encoded);
    if (StringUtil.isNullorNill(isHl7Encoded) || "0".equals(isHl7Encoded)) {
    	referencetables.setIsHl7Encoded ("N");
    }

    keepHistory = referencetables.getKeepHistory();
    System.out.println ("Yi isH17Encodded is " + keepHistory);
    if (StringUtil.isNullorNill(keepHistory) || "0".equals(keepHistory)) {
    	referencetables.setKeepHistory ("N");
    }*/

    try {
      if (duplicateReferenceTablesExists(referenceTables, isNew)) {
        throw new LIMSDuplicateRecordException(
            "Duplicate record exists for " + referenceTables.getTableName());
      }
    } catch (Exception e) {
      // bugzilla 2154
      LogEvent.logError("ReferenceTablesDAOImpl", "updateData()", e.toString());
      throw new LIMSRuntimeException("Error in Referencetables updateData()", e);
    }

    // System.out.println("This is name from updateData " + referencetables.getTableName());
    ReferenceTables oldData = (ReferenceTables) readReferenceTables(referenceTables.getId());
    ReferenceTables newData = referenceTables;

    // System.out.println("updateDate " + newData.getTableName() + " " + oldData.getTableName());
    // add to audit trail
    try {
      AuditTrailDAO auditDAO = new AuditTrailDAOImpl();
      String sysUserId = referenceTables.getSysUserId();
      String event = IActionConstants.AUDIT_TRAIL_UPDATE;
      String tableName = "REFERENCE_TABLES";
      auditDAO.saveHistory(newData, oldData, sysUserId, event, tableName);
    } catch (Exception e) {
      // bugzilla 2154
      LogEvent.logError("ReferenceTablesDAOImpl", "AuditTrail updateData()", e.toString());
      throw new LIMSRuntimeException("Error in Referencetables AuditTrail updateData()", e);
    }

    try {
      HibernateUtil.getSession().merge(referenceTables);
      HibernateUtil.getSession().flush();
      HibernateUtil.getSession().clear();
      HibernateUtil.getSession().evict(referenceTables);
      HibernateUtil.getSession().refresh(referenceTables);
    } catch (Exception e) {
      // bugzilla 2154
      LogEvent.logError("ReferenceTablesDAOImpl", "updateData()", e.toString());
      throw new LIMSRuntimeException("Error in Referencetables updateData()", e);
    }
  }
  protected ActionForward performAction(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {

    String forward = FWD_SUCCESS;

    DynaActionForm dynaForm = (DynaActionForm) form;
    // get selected qaEvents
    String[] selectedIDs = (String[]) dynaForm.get("selectedIDs");

    // get sysUserId from login module
    UserSessionData usd = (UserSessionData) request.getSession().getAttribute(USER_SESSION_DATA);
    String sysUserId = String.valueOf(usd.getSystemUserId());

    List qaEvents = new ArrayList();

    for (int i = 0; i < selectedIDs.length; i++) {
      QaEvent qaEvent = new QaEvent();
      qaEvent.setId(selectedIDs[i]);
      qaEvent.setSysUserId(sysUserId);
      qaEvents.add(qaEvent);
    }
    ActionMessages errors = null;
    try {

      QaEventDAO qaEventDAO = new QaEventDAOImpl();
      qaEventDAO.deleteData(qaEvents);
      // System.out.println("Just deleted QaEvent");
      // initialize the form
      dynaForm.initialize(mapping);

    } catch (LIMSRuntimeException lre) {
      // bugzilla 2154
      LogEvent.logError("QaEventDeleteAction", "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.DeleteException", null, null);
      }
      errors.add(ActionMessages.GLOBAL_MESSAGE, error);
      saveErrors(request, errors);
      request.setAttribute(Globals.ERROR_KEY, errors);
      forward = FWD_FAIL;
    }
    if (forward.equals(FWD_FAIL)) return mapping.findForward(forward);

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

    request.setAttribute("menuDefinition", "QaEventMenuDefinition");
    return mapping.findForward(forward);
  }
  // bugzilla 1427
  public List getPreviousRecord(String id, String table, Class clazz) throws LIMSRuntimeException {
    int currentId = (Integer.valueOf(id)).intValue();
    String tablePrefix = getTablePrefix(table);

    List list = new Vector();
    // bugzilla 1908
    int rrn = 0;
    try {
      // bugzilla 1908 cannot use named query for postgres because of oracle ROWNUM
      // instead get the list in this sortorder and determine the index of record with id =
      // currentId
      String sql = "select r.id from ReferenceTables r order by r.tableName";
      org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql);
      list = query.list();
      HibernateUtil.getSession().flush();
      HibernateUtil.getSession().clear();
      rrn = list.indexOf(String.valueOf(currentId));

      list =
          HibernateUtil.getSession()
              .getNamedQuery(tablePrefix + "getPrevious")
              .setFirstResult(rrn - 1)
              .setMaxResults(2)
              .list();

    } catch (Exception e) {
      // bugzilla 2154
      LogEvent.logError("ReferenceTablesDAOImpl", "getPreviousRecord()", e.toString());
      throw new LIMSRuntimeException("Error in getPreviousRecord() for " + table, e);
    }

    return list;
  }
  public void deleteData(List referenceTableses) throws LIMSRuntimeException {
    // add to audit trail
    try {
      AuditTrailDAO auditDAO = new AuditTrailDAOImpl();
      for (int i = 0; i < referenceTableses.size(); i++) {

        ReferenceTables data = (ReferenceTables) referenceTableses.get(i);

        ReferenceTables oldData = (ReferenceTables) readReferenceTables(data.getId());
        ReferenceTables newData = new ReferenceTables();

        String sysUserId = data.getSysUserId();
        String event = IActionConstants.AUDIT_TRAIL_DELETE;
        String tableName = "REFERENCE_TABLES";
        auditDAO.saveHistory(newData, oldData, sysUserId, event, tableName);
      }
    } catch (Exception e) {
      // bugzilla 2154
      LogEvent.logError("ReferenceTablesDAOImpl", "AuditTrail deleteData()", e.toString());
      throw new LIMSRuntimeException("Error in ReferenceTables AuditTrail deleteData()", e);
    }

    try {
      for (int i = 0; i < referenceTableses.size(); i++) {

        ReferenceTables data = (ReferenceTables) referenceTableses.get(i);
        // bugzilla 2206
        data = (ReferenceTables) readReferenceTables(data.getId());
        HibernateUtil.getSession().delete(data);
        HibernateUtil.getSession().flush();
        HibernateUtil.getSession().clear();
      }
    } catch (Exception e) {
      // bugzilla 2154
      LogEvent.logError("ReferenceTablesDAOImpl", "deleteData()", e.toString());
      throw new LIMSRuntimeException("Error in ReferenceTables deleteData()", e);
    }
  }
Example #8
0
  public SampleHuman readSampleHuman(String idString) {
    SampleHuman sh = null;
    try {
      sh = (SampleHuman) HibernateUtil.getSession().get(SampleHuman.class, idString);
      HibernateUtil.getSession().flush();
      HibernateUtil.getSession().clear();
    } catch (Exception e) {
      // bugzilla 2154
      LogEvent.logError("SampleHumanDAOImpl", "readSampleHuman()", e.toString());
      throw new LIMSRuntimeException("Error in SampleHuman readSampleHuman()", e);
    }

    return sh;
  }
  public SiteInformation readSiteInformation(String idString) {
    SiteInformation recoveredSiteInformation = null;
    try {
      recoveredSiteInformation =
          (SiteInformation) HibernateUtil.getSession().get(SiteInformation.class, idString);
      HibernateUtil.getSession().flush();
      HibernateUtil.getSession().clear();
    } catch (Exception e) {
      LogEvent.logError("SiteInformationDAOImpl", "readSiteInformation()", e.toString());
      throw new LIMSRuntimeException("Error in SiteInformation readSiteInformation()", e);
    }

    return recoveredSiteInformation;
  }
Example #10
0
  public void deleteData(List sampleHumans) throws LIMSRuntimeException {
    // add to audit trail
    try {
      AuditTrailDAO auditDAO = new AuditTrailDAOImpl();
      for (int i = 0; i < sampleHumans.size(); i++) {
        SampleHuman data = (SampleHuman) sampleHumans.get(i);

        SampleHuman oldData = (SampleHuman) readSampleHuman(data.getId());
        SampleHuman newData = new SampleHuman();

        String sysUserId = data.getSysUserId();
        String event = IActionConstants.AUDIT_TRAIL_DELETE;
        String tableName = "SAMPLE_HUMAN";
        auditDAO.saveHistory(newData, oldData, sysUserId, event, tableName);
      }
    } catch (Exception e) {
      // bugzilla 2154
      LogEvent.logError("SampleHumanDAOImpl", "AuditTrail deleteData()", e.toString());
      throw new LIMSRuntimeException("Error in SampleHuman AuditTrail deleteData()", e);
    }

    try {
      for (int i = 0; i < sampleHumans.size(); i++) {
        SampleHuman data = (SampleHuman) sampleHumans.get(i);
        // bugzilla 2206
        data = (SampleHuman) readSampleHuman(data.getId());
        HibernateUtil.getSession().delete(data);
        HibernateUtil.getSession().flush();
        HibernateUtil.getSession().clear();
      }
    } catch (Exception e) {
      // bugzilla 2154
      LogEvent.logError("SampleHumanDAOImpl", "deleteData()", e.toString());
      throw new LIMSRuntimeException("Error in SampleHuman deleteData()", e);
    }
  }
  public ReferenceTables readReferenceTables(String idString) {
    ReferenceTables referenceTables = null;
    try {
      referenceTables =
          (ReferenceTables) HibernateUtil.getSession().get(ReferenceTables.class, idString);
      HibernateUtil.getSession().flush();
      HibernateUtil.getSession().clear();
    } catch (Exception e) {
      // bugzilla 2154
      LogEvent.logError("ReferenceTablesDAOImpl", "readReferenceTables()", e.toString());
      throw new LIMSRuntimeException("Error in Referencetables readReferenceTables(idString)", e);
    }

    return referenceTables;
  }
  // bugzilla 1482
  private boolean duplicateReferenceTablesExists(ReferenceTables referenceTables, boolean isNew)
      throws LIMSRuntimeException {
    try {

      List list = new ArrayList();
      String sql;

      // not case sensitive hemolysis and Hemolysis are considered
      // duplicates
      if (isNew) {
        sql = "from ReferenceTables t where trim(lower(t.tableName)) = :param";
      } else {
        sql = "from ReferenceTables t where trim(lower(t.tableName)) = :param and id != :param2";
      }

      // System.out.println("Yi in duplicateReferencetables sql is " + sql);
      org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql);
      // System.out.println("duplicateReferencetables sql is " + sql);

      query.setParameter("param", referenceTables.getTableName().toLowerCase().trim());

      // initialize with 0 (for new records where no id has been generated
      // yet
      String referenceTablesId = "0";
      if (!StringUtil.isNullorNill(referenceTables.getId())) {
        referenceTablesId = referenceTables.getId();
      }

      if (!isNew) {
        query.setParameter("param2", referenceTablesId);
      }
      list = query.list();
      HibernateUtil.getSession().flush();
      HibernateUtil.getSession().clear();

      if (list.size() > 0) {
        return true;
      } else {
        return false;
      }

    } catch (Exception e) {
      // bugzilla 2154
      LogEvent.logError("ReferenceTablesDAOImpl", "duplicateReferenceTablesExists()", e.toString());
      throw new LIMSRuntimeException("Error in duplicateReferenceTablesExists()", e);
    }
  }
Example #13
0
 public void getData(SampleHuman sampleHuman) throws LIMSRuntimeException {
   try {
     SampleHuman sampHuman =
         (SampleHuman) HibernateUtil.getSession().get(SampleHuman.class, sampleHuman.getId());
     HibernateUtil.getSession().flush();
     HibernateUtil.getSession().clear();
     if (sampHuman != null) {
       PropertyUtils.copyProperties(sampleHuman, sampHuman);
     } else {
       sampleHuman.setId(null);
     }
   } catch (Exception e) {
     // bugzilla 2154
     LogEvent.logError("SampleHumanDAOImpl", "getData()", e.toString());
     throw new LIMSRuntimeException("Error in SampleHuman getData()", e);
   }
 }
 public void getData(SiteInformation siteInformation) throws LIMSRuntimeException {
   try {
     SiteInformation tmpSiteInformation =
         (SiteInformation)
             HibernateUtil.getSession().get(SiteInformation.class, siteInformation.getId());
     HibernateUtil.getSession().flush();
     HibernateUtil.getSession().clear();
     if (tmpSiteInformation != null) {
       PropertyUtils.copyProperties(siteInformation, tmpSiteInformation);
     } else {
       siteInformation.setId(null);
     }
   } catch (Exception e) {
     LogEvent.logError("SiteInformationsDAOImpl", "getData()", e.toString());
     throw new LIMSRuntimeException("Error in SiteInformation getData()", e);
   }
 }
 public void getData(ReferenceTables referenceTables) throws LIMSRuntimeException {
   try {
     ReferenceTables reftbl =
         (ReferenceTables)
             HibernateUtil.getSession().get(ReferenceTables.class, referenceTables.getId());
     HibernateUtil.getSession().flush();
     HibernateUtil.getSession().clear();
     if (reftbl != null) {
       PropertyUtils.copyProperties(referenceTables, reftbl);
     } else {
       referenceTables.setId(null);
     }
   } catch (Exception e) {
     // bugzilla 2154
     LogEvent.logError("ReferenceTablesDAOImpl", "getData()", e.toString());
     throw new LIMSRuntimeException("Error in Referencetables getData()", e);
   }
 }
  public List getAllReferenceTables() throws LIMSRuntimeException {
    List list = new Vector();
    try {
      String sql = "from ReferenceTables";
      org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql);
      // query.setMaxResults(10);
      // query.setFirstResult(3);
      list = query.list();
      HibernateUtil.getSession().flush();
      HibernateUtil.getSession().clear();
    } catch (Exception e) {
      // bugzilla 2154
      LogEvent.logError("ReferenceTablesDAOImpl", "getAllReferenceTables()", e.toString());
      throw new LIMSRuntimeException("Error in Referencetables getAllReferenceTables()", e);
    }

    return list;
  }
  public Patient getPatientForSample(Sample sample) throws LIMSRuntimeException {
    Patient patient = null;
    try {
      String sql =
          "select patient from Patient as patient, SampleHuman as sampleHuman where sampleHuman.patientId = patient.id and sampleHuman.sampleId = :sId";
      Query query = HibernateUtil.getSession().createQuery(sql);
      query.setInteger("sId", Integer.parseInt(sample.getId()));
      patient = (Patient) query.uniqueResult();
      HibernateUtil.getSession().flush();
      HibernateUtil.getSession().clear();

    } catch (HibernateException he) {
      LogEvent.logError("SampleHumanDAOImpl", "getPatientForSample()", he.toString());
      throw new LIMSRuntimeException("Error in SampleHuman getPatientForSample()", he);
    }

    return patient;
  }
  public void getDataBySample(SampleHuman sampleHuman) throws LIMSRuntimeException {

    try {
      String sql = "from SampleHuman sh where samp_id = :param";
      Query query = HibernateUtil.getSession().createQuery(sql);
      query.setInteger("param", Integer.parseInt(sampleHuman.getSampleId()));
      List list = query.list();
      HibernateUtil.getSession().flush();
      HibernateUtil.getSession().clear();
      SampleHuman sh = null;
      if (list.size() > 0) {
        sh = (SampleHuman) list.get(0);
        PropertyUtils.copyProperties(sampleHuman, sh);
      }
    } catch (Exception e) {
      LogEvent.logError("SampleHumanDAOImpl", "getDataBySample()", e.toString());
      throw new LIMSRuntimeException("Error in SampleHuman getDataBySample()", e);
    }
  }
  public boolean insertData(SiteInformation siteInformation) throws LIMSRuntimeException {

    try {
      String id = (String) HibernateUtil.getSession().save(siteInformation);
      siteInformation.setId(id);

      AuditTrailDAO auditDAO = new AuditTrailDAOImpl();
      auditDAO.saveNewHistory(siteInformation, siteInformation.getSysUserId(), "SITE_INFORMATION");

      HibernateUtil.getSession().flush();
      HibernateUtil.getSession().clear();

    } catch (Exception e) {
      LogEvent.logError("SiteInformationDAOImpl", "insertData()", e.toString());
      throw new LIMSRuntimeException("Error in SiteInformation insertData()", e);
    }

    return true;
  }
  public boolean insertData(ReferenceTables referenceTables) throws LIMSRuntimeException {

    // String isHl7Encoded;
    // String keepHistory;
    boolean isNew = true;

    /*isHl7Encoded = referencetables.getIsHl7Encoded();
    if (StringUtil.isNullorNill(isHl7Encoded) || "0".equals(isHl7Encoded)) {
    	referencetables.setIsHl7Encoded ("N");
    }

    keepHistory = referencetables.getKeepHistory();
    if (StringUtil.isNullorNill(keepHistory) || "0".equals(keepHistory)) {
    	referencetables.setKeepHistory ("N");
    }*/

    try {
      // bugzilla 1482 throw Exception if record already exists
      if (duplicateReferenceTablesExists(referenceTables, isNew)) {
        throw new LIMSDuplicateRecordException(
            "Duplicate record exists for " + referenceTables.getTableName());
      }

      // System.out.println("This is ID from insert referencetables " + referencetables.getId());
      String id = (String) HibernateUtil.getSession().save(referenceTables);
      referenceTables.setId(id);

      // bugzilla 1824 inserts will be logged in history table
      AuditTrailDAO auditDAO = new AuditTrailDAOImpl();
      String sysUserId = referenceTables.getSysUserId();
      String tableName = "REFERENCE_TABLES";
      auditDAO.saveNewHistory(referenceTables, sysUserId, tableName);

      HibernateUtil.getSession().flush();
      HibernateUtil.getSession().clear();
    } catch (Exception e) {
      // bugzilla 2154
      LogEvent.logError("ReferenceTablesDAOImpl", "insertData()", e.toString());
      throw new LIMSRuntimeException("Error in Referencetables insertData()", e);
    }

    return true;
  }
Example #21
0
  @SuppressWarnings("unchecked")
  public List<Sample> getCollectedSamplesForPatient(String patientID) throws LIMSRuntimeException {

    List<Sample> samples;

    try {
      String sql =
          "select sample from Sample as sample, SampleHuman as sampleHuman where sampleHuman.sampleId = sample.id and sampleHuman.patientId = :patientId and sample.accessionNumber is not null order by sample.id";
      Query query = HibernateUtil.getSession().createQuery(sql);
      query.setInteger("patientId", Integer.parseInt(patientID));
      samples = query.list();
      HibernateUtil.getSession().flush();
      HibernateUtil.getSession().clear();
    } catch (HibernateException he) {
      LogEvent.logError("SampleHumanDAOImpl", "getSamplesForPatient()", he.toString());
      throw new LIMSRuntimeException("Error in SampleHuman getSamplesForPatient()", he);
    }

    return samples;
  }
Example #22
0
  public boolean insertData(SampleHuman sampleHuman) throws LIMSRuntimeException {

    try {
      String id = (String) HibernateUtil.getSession().save(sampleHuman);
      sampleHuman.setId(id);

      // bugzilla 1824 inserts will be logged in history table
      AuditTrailDAO auditDAO = new AuditTrailDAOImpl();
      String sysUserId = sampleHuman.getSysUserId();
      String tableName = "SAMPLE_HUMAN";
      auditDAO.saveNewHistory(sampleHuman, sysUserId, tableName);

      HibernateUtil.getSession().flush();
      HibernateUtil.getSession().clear();

    } catch (Exception e) {
      // bugzilla 2154
      LogEvent.logError("SampleHumanDAOImpl", "insertData()", e.toString());
      throw new LIMSRuntimeException("Error in SampleHuman insertData()", e);
    }

    return true;
  }
  public List getPageOfReferenceTables(int startingRecNo) throws LIMSRuntimeException {
    List list = new Vector();
    try {
      // calculate maxRow to be one more than the page size
      int endingRecNo =
          startingRecNo + (SystemConfiguration.getInstance().getDefaultPageSize() + 1);

      String sql = "from ReferenceTables r order by r.tableName";
      org.hibernate.Query query = HibernateUtil.getSession().createQuery(sql);
      query.setFirstResult(startingRecNo - 1);
      query.setMaxResults(endingRecNo - 1);
      // query.setCacheMode(org.hibernate.CacheMode.REFRESH);

      list = query.list();
      HibernateUtil.getSession().flush();
      HibernateUtil.getSession().clear();
    } catch (Exception e) {
      // bugzilla 2154
      LogEvent.logError("ReferenceTablesDAOImpl", "getPageOfReferenceTables()", e.toString());
      throw new LIMSRuntimeException("Error in Referencetables getPageOfReferenceTables()", e);
    }

    return list;
  }
  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 Analyte.
    // If there is a parameter present, we should bring up an existing
    // Analyte to edit.
    String forward = FWD_SUCCESS;
    request.setAttribute(ALLOW_EDITS_KEY, "true");
    request.setAttribute(PREVIOUS_DISABLED, "false");
    request.setAttribute(NEXT_DISABLED, "false");

    String id = request.getParameter(ID);

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

    BaseActionForm dynaForm = (BaseActionForm) form;

    String start = (String) request.getParameter("startingRecNo");
    String direction = (String) request.getParameter("direction");

    // System.out.println("This is ID from request " + id);
    Panel panel = new Panel();

    panel.setId(id);
    try {

      PanelDAO panelDAO = new PanelDAOImpl();
      // retrieve analyte by id since the name may have changed
      panelDAO.getData(panel);

      if (FWD_NEXT.equals(direction)) {
        // bugzilla 1427 pass in name not id
        List panels = panelDAO.getNextPanelRecord(panel.getPanelName());
        if (panels != null && panels.size() > 0) {
          panel = (Panel) panels.get(0);
          panelDAO.getData(panel);
          if (panels.size() < 2) {
            // disable next button
            request.setAttribute(NEXT_DISABLED, "true");
          }
          id = panel.getId();
        } else {
          // just disable next button
          request.setAttribute(NEXT_DISABLED, "true");
        }
      }

      if (FWD_PREVIOUS.equals(direction)) {
        // bugzilla 1427 pass in name not id
        List panels = panelDAO.getPreviousPanelRecord(panel.getPanelName());
        if (panels != null && panels.size() > 0) {
          panel = (Panel) panels.get(0);
          panelDAO.getData(panel);
          if (panels.size() < 2) {
            // disable previous button
            request.setAttribute(PREVIOUS_DISABLED, "true");
          }
          id = panel.getId();
        } else {
          // just disable next button
          request.setAttribute(PREVIOUS_DISABLED, "true");
        }
      }

    } catch (LIMSRuntimeException lre) {
      // bugzilla 2154
      LogEvent.logError("PanelNextPreviousAction", "performAction()", lre.toString());
      request.setAttribute(ALLOW_EDITS_KEY, "false");
      // disable previous and next
      request.setAttribute(PREVIOUS_DISABLED, "true");
      request.setAttribute(NEXT_DISABLED, "true");
      forward = FWD_FAIL;
    }
    if (forward.equals(FWD_FAIL)) return mapping.findForward(forward);

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

    return getForward(mapping.findForward(forward), id, start);
  }
  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);
  }
  // modified for efficiency bugzilla 1367
  public String validate(String targetId) throws LIMSRuntimeException {
    StringBuffer s = new StringBuffer();

    // bgm added StringUtil to check against a space being entered.
    if (!StringUtil.isNullorNill(targetId)) {
      ProjectDAO projectDAO = new ProjectDAOImpl();
      Project project = new Project();
      try {
        int i = Integer.parseInt(targetId);
        // bugzilla 2438
        project.setLocalAbbreviation(targetId.trim());

      } catch (NumberFormatException nfe) {
        // bugzilla 2154
        LogEvent.logError("ProjectIdOrNameValidationProvider", "validate()", nfe.toString());
        // if the id was not a number
        project = null;
      }

      if (project != null) {
        // bugzilla 2438
        project = projectDAO.getProjectByLocalAbbreviation(project, true);
      }
      // bugzilla 2112
      try {
        if (null != project) {
          // bugzilla 1978
          if (project.getIsActive().equals(YES)) {
            // This is particular to projId validation for HSE1 and HSE2:
            // the message appended to VALID is the projectName that
            // can then be displayed when User enters valid Project Id
            // (see humanSampleOne.jsp, humanSampleTwo.jsp)

            // bgm - bugzilla 1535 commented out s.append(project.getProjectName()); to check first
            if (null != project.getProjectName()) {
              s.append(VALID);
              s.append(project.getProjectName());
            } else s.append(INVALID);
          } else {
            s.append(INVALID);
          }
        } else {
          project = new Project();
          project.setId("");
          project.setProjectName(targetId.trim());
          project = projectDAO.getProjectByName(project, true, true);
          if (project != null) {
            s.append(VALID);
            // bugzilla 2438
            s.append(project.getLocalAbbreviation());
          } else {
            s.append(INVALID);
          }
        }
      } catch (Exception e) {
        // bugzilla 2154
        LogEvent.logError("ProjectIdOrNameValidationProvider", "validate()", e.toString());
        s.append(INVALID);
      }
    } else {
      // bugzilla 1697
      s.append(VALID);
    }

    /*
     * System.out.println("I am in projIdValidator returning " +
     * s.toString() + " targetId " + targetId);
     */
    return s.toString();
  }
  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 Scriptlet.
    // If there is a parameter present, we should bring up an existing
    // Scriptlet to edit.
    String forward = FWD_SUCCESS;
    request.setAttribute(ALLOW_EDITS_KEY, "true");
    request.setAttribute(PREVIOUS_DISABLED, "false");
    request.setAttribute(NEXT_DISABLED, "false");

    String id = request.getParameter(ID);

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

    BaseActionForm dynaForm = (BaseActionForm) form;

    // server-side validation (validation.xml)
    ActionMessages errors = dynaForm.validate(mapping, request);
    if (errors != null && errors.size() > 0) {
      saveErrors(request, errors);
      // since we forward to jsp - not Action we don't need to repopulate
      // the lists here
      return mapping.findForward(FWD_FAIL);
    }

    String start = (String) request.getParameter("startingRecNo");
    String direction = (String) request.getParameter("direction");

    Scriptlet scriptlet = new Scriptlet();
    // get sysUserId from login module
    UserSessionData usd = (UserSessionData) request.getSession().getAttribute(USER_SESSION_DATA);
    String sysUserId = String.valueOf(usd.getSystemUserId());
    scriptlet.setSysUserId(sysUserId);

    // populate valueholder from form
    PropertyUtils.copyProperties(scriptlet, dynaForm);

    try {

      ScriptletDAO scriptletDAO = new ScriptletDAOImpl();

      if (!isNew) {
        // UPDATE
        scriptletDAO.updateData(scriptlet);

      } else {
        // INSERT
        scriptletDAO.insertData(scriptlet);
      }
    } catch (LIMSRuntimeException lre) {
      // bugzilla 2154
      LogEvent.logError("ScriptletUpdateAction", "performAction()", lre.toString());
      request.setAttribute(IActionConstants.REQUEST_FAILED, true);
      errors = new ActionMessages();
      java.util.Locale locale =
          (java.util.Locale) request.getSession().getAttribute("org.apache.struts.action.LOCALE");
      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);
      } else {
        // bugzilla 1482
        if (lre.getException() instanceof LIMSDuplicateRecordException) {
          String messageKey = "scriptlet.scriptletName";
          String msg =
              ResourceLocator.getInstance().getMessageResources().getMessage(locale, messageKey);
          error = new ActionError("errors.DuplicateRecord", msg, null);

        } else {
          error = new ActionError("errors.UpdateException", null, null);
        }
      }
      errors.add(ActionMessages.GLOBAL_MESSAGE, error);
      saveErrors(request, errors);
      request.setAttribute(Globals.ERROR_KEY, errors);
      // bugzilla 1485: allow change and try updating again (enable save button)
      // request.setAttribute(IActionConstants.ALLOW_EDITS_KEY, "false");
      // disable previous and next
      request.setAttribute(PREVIOUS_DISABLED, "true");
      request.setAttribute(NEXT_DISABLED, "true");
      forward = FWD_FAIL;
    }
    if (forward.equals(FWD_FAIL)) return mapping.findForward(forward);

    // initialize the form
    dynaForm.initialize(mapping);
    // repopulate the form from valueholder
    PropertyUtils.copyProperties(dynaForm, scriptlet);

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

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

    // bugzilla 1400
    if (isNew) forward = FWD_SUCCESS_INSERT;
    // bugzilla 1467 added direction for redirect to NextPreviousAction
    return getForward(mapping.findForward(forward), scriptlet.getId(), start, direction);
  }
  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;
    // server-side validation (validation.xml)
    ActionMessages errors = dynaForm.validate(mapping, request);

    // bugzilla 2614 allow for NB domain samples
    String selectedTestId = "";

    String referenceTableId = SystemConfiguration.getInstance().getResultReferenceTableId();
    String refId = (String) dynaForm.get("noteRefId");

    String noteIds = (String) dynaForm.get("noteIds");
    String noteSubjects = (String) dynaForm.get("noteSubjects");
    String noteTexts = (String) dynaForm.get("noteTexts");
    String noteTypes = (String) dynaForm.get("noteTypes");
    String noteLastupdateds = (String) dynaForm.get("noteLastupdateds");

    List noteIdList = new ArrayList();
    List noteSubjectList = new ArrayList();
    List noteTextList = new ArrayList();
    List noteTypeList = new ArrayList();
    List noteLastupdatedList = new ArrayList();

    String textSeparator = SystemConfiguration.getInstance().getDefaultTextSeparator();

    NoteDAO noteDAO = new NoteDAOImpl();
    SystemUserDAO systemUserDAO = new SystemUserDAOImpl();
    // bugzilla 2571 go through ReferenceTablesDAO to get reference tables info
    ReferenceTablesDAO referenceTablesDAO = new ReferenceTablesDAOImpl();

    // get sysUserId from login module
    UserSessionData usd = (UserSessionData) request.getSession().getAttribute(USER_SESSION_DATA);
    String sysUserId = String.valueOf(usd.getSystemUserId());
    org.hibernate.Transaction tx = HibernateUtil.getSession().beginTransaction();

    try {

      textSeparator = StringUtil.convertStringToRegEx(textSeparator);

      SystemUser systemUser = new SystemUser();
      systemUser.setId(sysUserId);
      systemUserDAO.getData(systemUser);

      // get all the data required to forward to correct page

      // get analysis id from result
      ResultDAO resultDAO = new ResultDAOImpl();
      Result result = new Result();
      result.setId(refId);
      resultDAO.getData(result);

      String analysisId = result.getAnalysis().getId();

      AnalysisDAO analysisDAO = new AnalysisDAOImpl();
      Analysis analysis = new Analysis();
      analysis.setId(analysisId);
      analysisDAO.getData(analysis);

      // get test id from analysis
      selectedTestId = analysis.getTest().getId();

      // get domain from sample
      SampleItemDAO sampleItemDAO = new SampleItemDAOImpl();
      SampleItem sampleItem = new SampleItem();
      sampleItem.setId(analysis.getSampleItem().getId());
      sampleItemDAO.getData(sampleItem);

      SampleDAO sampleDAO = new SampleDAOImpl();
      Sample sample = new Sample();
      // bugzilla 1773 need to store sample not sampleId for use in sorting
      sample.setId(sampleItem.getSample().getId());
      sampleDAO.getData(sample);

      // bugzilla 2614 allow for NB domain samples
      // now that we have the domain (for forwarding to correct fail page)
      // validate note popup form data!
      try {
        // bugzilla 2254 moved loadListFromStringOfElements to StringUtil
        noteIdList = StringUtil.loadListFromStringOfElements(noteIds, textSeparator, false);
        noteLastupdatedList =
            StringUtil.loadListFromStringOfElements(noteLastupdateds, textSeparator, false);
        // these three need to be validated for empty strings
        noteSubjectList =
            StringUtil.loadListFromStringOfElements(noteSubjects, textSeparator, true);
        noteTextList = StringUtil.loadListFromStringOfElements(noteTexts, textSeparator, true);
        noteTypeList = StringUtil.loadListFromStringOfElements(noteTypes, textSeparator, true);

      } catch (Exception e) {
        // bugzilla 2154
        LogEvent.logError("ResultsEntryNotesUpdateAction", "performAction()", e.toString());
        String messageKey = "note.note";
        ActionError error = new ActionError("errors.invalid", getMessageForKey(messageKey), null);
        errors.add(ActionMessages.GLOBAL_MESSAGE, error);
        saveErrors(request, errors);
        forward = FWD_FAIL;

        return mapping.findForward(forward);
      }

      for (int i = 0; i < noteIdList.size(); i++) {
        Note note = new Note();

        String noteId = (String) noteIdList.get(i);
        note.setReferenceId(refId);
        // bugzilla 1922
        // bugzilla 2571 go through ReferenceTablesDAO to get reference tables info
        ReferenceTables referenceTables = new ReferenceTables();
        referenceTables.setId(referenceTableId);
        // bugzilla 2571
        referenceTablesDAO.getData(referenceTables);
        note.setReferenceTables(referenceTables);
        note.setSystemUser(systemUser);
        note.setSystemUserId(sysUserId);
        // 1926 for audit trail
        note.setSysUserId(sysUserId);

        if (noteId != null && !noteId.equals("0")) {
          note.setId((String) noteIdList.get(i));
          note.setSubject((String) noteSubjectList.get(i));
          note.setText((String) noteTextList.get(i));
          note.setNoteType((String) noteTypeList.get(i));

          Timestamp noteTimestamp = null;
          if (!StringUtil.isNullorNill((String) noteLastupdatedList.get(i))) {

            noteTimestamp = DateUtil.formatStringToTimestamp((String) noteLastupdatedList.get(i));
          }

          note.setLastupdated(noteTimestamp);

          // UPDATE
          noteDAO.updateData(note);
          // }

        } else {
          // this is a new note
          note.setSubject((String) noteSubjectList.get(i));
          note.setText((String) noteTextList.get(i));
          note.setNoteType((String) noteTypeList.get(i));
          // INSERT
          noteDAO.insertData(note);
        }
      }

      tx.commit();

      return getForward(mapping.findForward(forward), selectedTestId, analysisId);

    } catch (LIMSRuntimeException lre) {
      // bugzilla 2154
      LogEvent.logError("ResultsEntryNotesUpdateAction", "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 {
        if (lre.getException() instanceof LIMSDuplicateRecordException) {
          java.util.Locale locale =
              (java.util.Locale)
                  request.getSession().getAttribute("org.apache.struts.action.LOCALE");
          String messageKey = "note.note";
          String msg =
              ResourceLocator.getInstance().getMessageResources().getMessage(locale, messageKey);
          error = new ActionError("errors.DuplicateRecord", msg, null);

        } else {
          error = new ActionError("errors.UpdateException", null, null);
        }
      }
      errors.add(ActionMessages.GLOBAL_MESSAGE, error);
      saveErrors(request, errors);
      request.setAttribute(Globals.ERROR_KEY, errors);

      // disable previous and next
      request.setAttribute(PREVIOUS_DISABLED, "true");
      request.setAttribute(NEXT_DISABLED, "true");

      // default forward fail
      forward = FWD_FAIL;

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

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

    // we need this for subsequent actions to
    // get data related to note parent for forwarding to next page
    request.setAttribute("refId", refId);
    request.setAttribute(SELECTED_TEST_ID, selectedTestId);

    return mapping.findForward(forward);
  }
  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);
  }