/** * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations under * the License. * * The Original Code is OpenELIS code. * * Copyright (C) The Minnesota Department of Health. All Rights Reserved. */ package us.mn.state.health.lims.result.action; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.beanutils.PropertyUtils; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import us.mn.state.health.lims.analysis.dao.AnalysisDAO; import us.mn.state.health.lims.analysis.daoimpl.AnalysisDAOImpl; import us.mn.state.health.lims.analysis.valueholder.Analysis; import us.mn.state.health.lims.common.util.SystemConfiguration; import us.mn.state.health.lims.result.form.ResultsEntryReflexTestPopupActionForm; import us.mn.state.health.lims.test.valueholder.Test; import us.mn.state.health.lims.testanalyte.dao.TestAnalyteDAO; import us.mn.state.health.lims.testanalyte.daoimpl.TestAnalyteDAOImpl; import us.mn.state.health.lims.testanalyte.valueholder.TestAnalyte; import us.mn.state.health.lims.testreflex.dao.TestReflexDAO; import us.mn.state.health.lims.testreflex.daoimpl.TestReflexDAOImpl; import us.mn.state.health.lims.testreflex.valueholder.TestReflex; import us.mn.state.health.lims.testresult.dao.TestResultDAO; import us.mn.state.health.lims.testresult.daoimpl.TestResultDAOImpl; import us.mn.state.health.lims.testresult.valueholder.TestResult; /** * @author diane benz * * To change this generated comment edit the template variable "typecomment": * Window>Preferences>Java>Templates. To enable and disable the creation of type * comments go to Window>Preferences>Java>Code Generation. * bugzilla 1802: redesign results entry - now all tests are displayed and edited in one page * testAnalyteTestResults is now an array in Test_TestAnalyte rather than a form * variable * bugzilla 1883: * removed logic surrounding listOfExistingTestIds as we no longer disable options * on the reflex test popup * see modifications to resultsEntry.jsp: * only trigger popup if same reflex rule has not triggered an added reflex test before that was saved * (i.e. where parent analysis/parent result + analyte/added test are same) * all reflex tests on popup will be preselected and enabled * only allow a test result to trigger a popup if it has just been changed (isDirty) */ public class ResultsEntryReflexTestPopupAction extends ResultsEntryBaseAction { private boolean isNew = false; 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 Result. // If there is a parameter present, we should bring up an existing // Result to edit. String id = request.getParameter(ID); String analysisId = (String) request.getParameter("analysisId"); String listOfSelectedIds = (String) request .getParameter("listOfSelectedIds"); //bugzilla 1684 String listOfSelectedIdAnalytes = (String)request.getParameter("listOfSelectedIdAnalytes"); //bugzilla 1882 String listOfSelectedIdAnalyses = (String)request.getParameter("listOfSelectedIdAnalyses"); String idSeparator = SystemConfiguration.getInstance() .getDefaultIdSeparator(); StringTokenizer st = new StringTokenizer(listOfSelectedIds, idSeparator); List selectedTestResultIds = new ArrayList(); while (st.hasMoreElements()) { String trId = (String) st.nextElement(); selectedTestResultIds.add(trId); } //bugzilla 1684 StringTokenizer st3 = new StringTokenizer(listOfSelectedIdAnalytes, idSeparator); List selectedTestAnalyteIds = new ArrayList(); while (st3.hasMoreElements()) { String taId = (String) st3.nextElement(); selectedTestAnalyteIds.add(taId); } //bugzilla 1882 StringTokenizer st4 = new StringTokenizer(listOfSelectedIdAnalyses, idSeparator); List selectedAnalysisIds = new ArrayList(); while (st4.hasMoreElements()) { String aId = (String) st4.nextElement(); selectedAnalysisIds.add(aId); } String forward = FWD_SUCCESS; request.setAttribute(ALLOW_EDITS_KEY, "true"); request.setAttribute(PREVIOUS_DISABLED, "true"); request.setAttribute(NEXT_DISABLED, "true"); ResultsEntryReflexTestPopupActionForm dynaForm = (ResultsEntryReflexTestPopupActionForm) form; List listOfReflexTests = new ArrayList(); List listOfReflexTestIds = new ArrayList(); List listOfReflexTestsDisabledFlags = new ArrayList(); List listOfParentResults = new ArrayList(); // preload checkbox selection List preSelectedAddedTests = new ArrayList(); List listOfParentAnalytes = new ArrayList(); //bugzilla 1882 List listOfParentAnalyses = new ArrayList(); TestReflexDAO testReflexDAO = new TestReflexDAOImpl(); TestResultDAO testResultDAO = new TestResultDAOImpl(); TestAnalyteDAO testAnalyteDAO = new TestAnalyteDAOImpl(); AnalysisDAO analysisDAO = new AnalysisDAOImpl(); for (int i = 0; i < selectedTestResultIds.size(); i++) { TestResult testResult = new TestResult(); String testResultId = (String) selectedTestResultIds.get(i); testResult.setId(testResultId); testResultDAO.getData(testResult); //bugzilla 1684 TestAnalyte testAnalyte = new TestAnalyte(); String testAnalyteId = (String)selectedTestAnalyteIds.get(i); testAnalyte.setId(testAnalyteId); testAnalyteDAO.getData(testAnalyte); //bugzilla 1882 Analysis parentAnalysis = new Analysis(); String aId = (String)selectedAnalysisIds.get(i); parentAnalysis.setId(aId); analysisDAO.getData(parentAnalysis); //bugzilla 1684: added testAnalyte to criteria List reflexes = testReflexDAO .getTestReflexesByTestResultAndTestAnalyte(testResult, testAnalyte); if (reflexes != null) { for (int j = 0; j < reflexes.size(); j++) { TestReflex testReflex = (TestReflex) reflexes.get(j); String testReflexId = testReflex.getId(); testReflex.setId(testReflexId); testReflexDAO.getData(testReflex); if (testReflex != null && testReflex.getAddedTest() != null) { Test addedTest = (Test) testReflex.getAddedTest(); if (addedTest.getId() != null) { listOfReflexTestsDisabledFlags.add(NO); preSelectedAddedTests.add(addedTest.getId()); } //bugzilla 1684 - check to see if a different result //already generated this reflex test //only add it if not //bugzilla 1802 - display all reflex tests even if //already generated by diff. result //if (!listOfReflexTestIds.contains(addedTest.getId())) { listOfReflexTests.add(addedTest); listOfReflexTestIds.add(addedTest.getId()); //} listOfParentResults.add(testResult); listOfParentAnalytes.add(testAnalyte); //bugzilla 1882 listOfParentAnalyses.add(parentAnalysis); } } } } // initialize the form dynaForm.initialize(mapping); PropertyUtils.setProperty(dynaForm, "listOfReflexTests", listOfReflexTests); PropertyUtils.setProperty(dynaForm, "listOfReflexTestsDisabledFlags", listOfReflexTestsDisabledFlags); PropertyUtils.setProperty(dynaForm, "listOfParentResults", listOfParentResults); PropertyUtils.setProperty(dynaForm, "listOfParentAnalytes", listOfParentAnalytes); //bugzilla 1882 PropertyUtils.setProperty(dynaForm, "listOfParentAnalyses", listOfParentAnalyses); int numberOfPreselectedItems = preSelectedAddedTests.size(); String[] selectedAddedTests = new String[numberOfPreselectedItems]; for (int i = 0; i < preSelectedAddedTests.size(); i++) { String testId = (String)preSelectedAddedTests.get(i); selectedAddedTests[i] = testId; } PropertyUtils.setProperty(dynaForm, "selectedAddedTests", selectedAddedTests); return mapping.findForward(forward); } protected String getPageTitleKey() { if (isNew) { return "resultsentry.reflexTestPopup.title"; } else { return "resultsentry.reflexTestPopup.title"; } } protected String getPageSubtitleKey() { if (isNew) { return "resultsentry.reflexTestPopup.subtitle"; } else { return "resultsentry.reflexTestPopup.subtitle"; } } }