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); }
@Override protected ActionForward performAction( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { String forward = FWD_SUCCESS; List<IResultUpdate> updaters = ValidationUpdateRegister.getRegisteredUpdaters(); boolean areListeners = updaters != null && !updaters.isEmpty(); request.getSession().setAttribute(SAVE_DISABLED, "true"); BaseActionForm dynaForm = (BaseActionForm) form; ResultValidationPaging paging = new ResultValidationPaging(); paging.updatePagedResults(request, dynaForm); List<AnalysisItem> resultItemList = paging.getResults(request); String testSectionName = (String) dynaForm.get("testSection"); String testName = (String) dynaForm.get("testName"); setRequestType(testSectionName); ActionMessages errors = validateModifiedItems(resultItemList); if (errors.size() > 0) { saveErrors(request, errors); request.setAttribute(Globals.ERROR_KEY, errors); return mapping.findForward(FWD_VALIDATION_ERROR); } createSystemUser(); setSampleFinishedStatuses(); noteUpdateList = new ArrayList<Note>(); resultUpdateList = new ArrayList<Result>(); analysisUpdateList = new ArrayList<Analysis>(); modifiedResultSet = new ArrayList<ResultSet>(); newResultSet = new ArrayList<ResultSet>(); deletableList = new ArrayList<Result>(); if (testSectionName.equals("serology")) { createUpdateElisaList(resultItemList); } else { createUpdateList(resultItemList, areListeners); } Transaction tx = HibernateUtil.getSession().beginTransaction(); try { ResultSaveService.removeDeletedResultsInTransaction(deletableList, currentUserId); // update analysis for (Analysis analysis : analysisUpdateList) { analysisDAO.updateData(analysis); } for (Result result : resultUpdateList) { if (result.getId() != null) { resultDAO.updateData(result); } else { resultDAO.insertData(result); } } checkIfSamplesFinished(resultItemList); // update finished samples for (Sample sample : sampleUpdateList) { sampleDAO.updateData(sample); } // create or update notes for (Note note : noteUpdateList) { if (note != null) { if (note.getId() == null) { noteDAO.insertData(note); } else { noteDAO.updateData(note); } } } for (IResultUpdate updater : updaters) { updater.transactionalUpdate(this); } tx.commit(); } catch (LIMSRuntimeException lre) { tx.rollback(); } for (IResultUpdate updater : updaters) { updater.postTransactionalCommitUpdate(this); } if (isBlankOrNull(testSectionName)) { return mapping.findForward(forward); } else { Map<String, String> params = new HashMap<String, String>(); params.put("type", testSectionName); params.put("test", testName); params.put("forward", forward); return getForwardWithParameters(mapping.findForward(forward), params); } }