/**
* 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.sampletracking.action;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
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.analysisqaevent.dao.AnalysisQaEventDAO;
import us.mn.state.health.lims.analysisqaevent.daoimpl.AnalysisQaEventDAOImpl;
import us.mn.state.health.lims.analysisqaevent.valueholder.AnalysisQaEvent;
import us.mn.state.health.lims.common.action.BaseAction;
import us.mn.state.health.lims.common.action.BaseActionForm;
import us.mn.state.health.lims.common.util.StringUtil;
import us.mn.state.health.lims.common.util.SystemConfiguration;
import us.mn.state.health.lims.dictionary.dao.DictionaryDAO;
import us.mn.state.health.lims.dictionary.daoimpl.DictionaryDAOImpl;
import us.mn.state.health.lims.dictionary.valueholder.Dictionary;
import us.mn.state.health.lims.note.dao.NoteDAO;
import us.mn.state.health.lims.note.daoimpl.NoteDAOImpl;
import us.mn.state.health.lims.note.valueholder.Note;
import us.mn.state.health.lims.patient.dao.PatientDAO;
import us.mn.state.health.lims.patient.daoimpl.PatientDAOImpl;
import us.mn.state.health.lims.patient.valueholder.Patient;
import us.mn.state.health.lims.person.valueholder.Person;
import us.mn.state.health.lims.qaevent.valueholder.QaEventRoutingSwitchSessionHandler;
import us.mn.state.health.lims.referencetables.valueholder.ReferenceTables;
import us.mn.state.health.lims.result.dao.ResultDAO;
import us.mn.state.health.lims.result.daoimpl.ResultDAOImpl;
import us.mn.state.health.lims.result.valueholder.Result;
import us.mn.state.health.lims.result.valueholder.Test_TestAnalyte;
import us.mn.state.health.lims.sample.dao.SampleDAO;
import us.mn.state.health.lims.sample.daoimpl.SampleDAOImpl;
import us.mn.state.health.lims.sample.valueholder.Sample;
import us.mn.state.health.lims.samplehuman.dao.SampleHumanDAO;
import us.mn.state.health.lims.samplehuman.daoimpl.SampleHumanDAOImpl;
import us.mn.state.health.lims.samplehuman.valueholder.SampleHuman;
import us.mn.state.health.lims.sampleitem.dao.SampleItemDAO;
import us.mn.state.health.lims.sampleitem.daoimpl.SampleItemDAOImpl;
import us.mn.state.health.lims.sampleitem.valueholder.SampleItem;
import us.mn.state.health.lims.sampleorganization.dao.SampleOrganizationDAO;
import us.mn.state.health.lims.sampleorganization.daoimpl.SampleOrganizationDAOImpl;
import us.mn.state.health.lims.sampleorganization.valueholder.SampleOrganization;
import us.mn.state.health.lims.sampleproject.valueholder.SampleProject;
import us.mn.state.health.lims.sampletracking.dao.SampleTrackingDAO;
import us.mn.state.health.lims.sampletracking.daoimpl.SampleTrackingDAOImpl;
import us.mn.state.health.lims.sampletracking.valueholder.SampleTracking;
import us.mn.state.health.lims.sampletracking.valueholder.SampleTrackingCriteria;
import us.mn.state.health.lims.sourceofsample.valueholder.SourceOfSample;
import us.mn.state.health.lims.statusofsample.dao.StatusOfSampleDAO;
import us.mn.state.health.lims.statusofsample.daoimpl.StatusOfSampleDAOImpl;
import us.mn.state.health.lims.statusofsample.valueholder.StatusOfSample;
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.typeofsample.valueholder.TypeOfSample;
/**
* @author aiswarya raman
* //AIS - bugzilla 1851/1850/1853
* 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 1920 - standards
* bugzilla 2028 (sub bugzilla 2037)
*/
public class SearchAction extends BaseAction {
protected ActionForward performAction(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
request.setAttribute(ALLOW_EDITS_KEY, "true");
request.setAttribute(PREVIOUS_DISABLED, "true");
request.setAttribute(NEXT_DISABLED, "true");
BaseActionForm dynaForm = (BaseActionForm)form;
//bugzilla 2028 sub bugzilla 2038 if coming back from Qa Events accessionNumber will be request parameter
String accessionNumber = (String)request.getParameter(ACCESSION_NUMBER);
if (StringUtil.isNullorNill(accessionNumber)) {
accessionNumber = (String) dynaForm.get("accessionNumber");
}
Sample sample = new Sample();
Patient patient = new Patient();
Person person = new Person();
SampleHuman sampleHuman = new SampleHuman();
SampleItem sampleItem = new SampleItem();
List analyses = new ArrayList();
StatusOfSample statusOfSample = new StatusOfSample();
SampleDAO sampleDAO = new SampleDAOImpl();
PatientDAO patientDAO = new PatientDAOImpl();
SampleItemDAO sampleItemDAO = new SampleItemDAOImpl();
SampleHumanDAO sampleHumanDAO = new SampleHumanDAOImpl();
AnalysisDAO analysisDAO = new AnalysisDAOImpl();
SampleTrackingDAO sampleTrackingDAO = new SampleTrackingDAOImpl();
StatusOfSampleDAO statusOfSampleDAO = new StatusOfSampleDAOImpl();
SampleOrganization sampleOrganization = new SampleOrganization();
SampleOrganizationDAO sampleOrganizationDAO = new SampleOrganizationDAOImpl();
AnalysisQaEventDAO analysisQaEventDAO = new AnalysisQaEventDAOImpl();
List sampleProjects = new ArrayList();
SampleTrackingCriteria sampleTrackingCriteria = new SampleTrackingCriteria();
sampleTrackingCriteria.setAccessionNumberPartial(accessionNumber);
sampleTrackingCriteria.setClientRef((String) dynaForm.get("clientReference"));
sampleTrackingCriteria.setLastName((String) dynaForm.get("lastname"));
sampleTrackingCriteria.setFirstName((String) dynaForm.get("firstname"));
sampleTrackingCriteria.setSubmitter((String) dynaForm.get("selectedOrgId"));
sampleTrackingCriteria.setReceivedDate((String) dynaForm.get("selectedReceivedDate"));
sampleTrackingCriteria.setSampleType((String) dynaForm.get("selectedSampleType"));
sampleTrackingCriteria.setSampleSource((String) dynaForm.get("selectedSampleSource"));
sampleTrackingCriteria.setExternalId((String) dynaForm.get("externalId"));
sampleTrackingCriteria.setCollectionDate((String) dynaForm.get("selectedCollectionDate"));
sampleTrackingCriteria.setProjectId((String) dynaForm.get("selectedProjId"));
sampleTrackingCriteria.setSortBy((String) dynaForm.get("selectedSortBy"));
//bugzilla 2455
sampleTrackingCriteria.setSpecimenOrIsolate((String) dynaForm.getString("selectedSpecimenOrIsolate"));
//bugzilla 2028
HttpSession session = (HttpSession)request.getSession();
boolean comingFromQaEventsEntry = false;
if (QaEventRoutingSwitchSessionHandler.isSwitchOn(QA_EVENTS_ENTRY_ROUTING_FROM_SAMPLE_TRACKING, session)) {
QaEventRoutingSwitchSessionHandler.switchOff(QA_EVENTS_ENTRY_ROUTING_FROM_SAMPLE_TRACKING, session);
comingFromQaEventsEntry = true;
}
if (StringUtil.isNullorNill((String)dynaForm.get("accessionNumber"))){
List listOfSamples =
sampleTrackingDAO.getAccessionByPatientAndOtherCriteria(sampleTrackingCriteria);
if (listOfSamples != null && listOfSamples.size() > 0) {
sample.setAccessionNumber(((SampleTracking)listOfSamples.get(0)).getAccNum());
}
} else if ( ((String)dynaForm.get("accessionNumber")).length() == 10 ){
sample.setAccessionNumber((String)dynaForm.get("accessionNumber"));
}else{
String accNum = request.getParameter(ACCESSION_NUMBER);
sample.setAccessionNumber(accNum);
}
List testTestAnalytes = new ArrayList();
sampleDAO.getSampleByAccessionNumber(sample);
accessionNumber = sample.getAccessionNumber();
if (null != sample.getStatus()){
String status = sample.getStatus();
statusOfSample.setCode(status);
//AIS - bugzilla 1546 and 1649
statusOfSample.setStatusType(SystemConfiguration.getInstance().getSampleStatusType());
statusOfSample = statusOfSampleDAO.getDataByStatusTypeAndStatusCode(statusOfSample);
//bugzilla 2073 display name - not description
if (null != statusOfSample && !StringUtil.isNullorNill(statusOfSample.getId())){
String sampleStatusName = statusOfSample.getStatusOfSampleName();
dynaForm.set("status", sampleStatusName);
}else{
dynaForm.set("status", status);
}
}else {
dynaForm.set("status", "");
}
String clientReference = sample.getClientReference();
String selectedReceivedDate = sample.getReceivedDateForDisplay();
String collectionDateForDisplay = sample.getCollectionDateForDisplay();
//bugzilla 2455
String specimenOrIsolate = sample.getReferredCultureFlag();
dynaForm.set("selectedSpecimenOrIsolate", specimenOrIsolate);
dynaForm.set("accessionNumber", accessionNumber);
dynaForm.set("clientReference", clientReference);
dynaForm.set("selectedReceivedDate", selectedReceivedDate);
dynaForm.set("selectedCollectionDate", collectionDateForDisplay);
if (!StringUtil.isNullorNill(sample.getId())) {
sampleHuman.setSampleId(sample.getId());
sampleHumanDAO.getDataBySample(sampleHuman);
//bugzilla 1773 need to store sample not sampleId for use in sorting
sampleItem.setSample(sample);
sampleItemDAO.getDataBySample(sampleItem);
patient.setId(sampleHuman.getPatientId());
if (null != patient.getId()){
patientDAO.getData(patient);
person = patient.getPerson();
String externalId = patient.getExternalId();
String firstname = person.getFirstName();
String lastname = person.getLastName();
dynaForm.set("externalId", externalId);
dynaForm.set("firstname", firstname);
dynaForm.set("lastname", lastname);
}else {
dynaForm.set("externalId", "");
dynaForm.set("firstname", "");
dynaForm.set("lastname", "");
}
if (sampleItem.getId() != null ){
TypeOfSample typeOfSample = sampleItem.getTypeOfSample();
SourceOfSample sourceOfSample = sampleItem.getSourceOfSample();
if (typeOfSample != null) {
String selectedSampleType = typeOfSample.getId();
PropertyUtils.setProperty(form, "selectedSampleType", selectedSampleType);
}
if (sourceOfSample != null) {
String selectedSampleSource = sourceOfSample.getId();
PropertyUtils.setProperty(form, "selectedSampleSource", selectedSampleSource);
}
sampleProjects = sample.getSampleProjects();
if (sampleProjects != null && sampleProjects.size() > 0) {
SampleProject sampleProject = (SampleProject) sampleProjects
.get(0);
//bugzilla 2438
String projectid = sampleProject.getProject().getLocalAbbreviation();
PropertyUtils.setProperty(form, "selectedProjIdOne", projectid);
if (sampleProjects.size() > 1) {
SampleProject sampleProject2 = (SampleProject) sampleProjects
.get(1);
//bugzilla 2438
String projectid2 = sampleProject2.getProject().getLocalAbbreviation();
PropertyUtils.setProperty(form, "selectedProjIdTwo", projectid2);
}
}
//Ais - Bugzilla#1711
//bugzilla 2227 (revisions)
//bugzilla 2300
analyses = analysisDAO.getMaxRevisionAnalysesBySampleIncludeCanceled(sampleItem);
}
sampleOrganization.setSample(sample);
sampleOrganizationDAO.getDataBySample(sampleOrganization);
if (null != sampleOrganization.getOrganization()){
String selectedOrgId = sampleOrganization.getOrganization().getId();
PropertyUtils.setProperty(form, "selectedOrgId", selectedOrgId);
}
}
if (analyses != null) {
//TestDAO testDAO = new TestDAOImpl();
TestAnalyteDAO testAnalyteDAO = new TestAnalyteDAOImpl();
ResultDAO resultDAO = new ResultDAOImpl();
DictionaryDAO dictDAO = new DictionaryDAOImpl();
NoteDAO noteDAO = new NoteDAOImpl();
// there is one Analysis per Test
String aStatus [] = new String [analyses.size()];
//bugzilla 1856
analyses = sortTests(analyses);
for (int i = 0; i < analyses.size(); i++) {
Analysis analysis = (Analysis) analyses.get(i);
//System.out.println("This is ANALYSIS ID " + analysis.getId());
Test t = (Test) analysis.getTest();
//System.out.println("This is TEST ID " + t.getId());
//testDAO.getData(t);
if (null != analysis.getStatus()){
String analysisStatus = analysis.getStatus();
statusOfSample.setCode(analysisStatus);
//AIS - bugzilla 1546 and 1649
statusOfSample.setStatusType(SystemConfiguration.getInstance().getAnalysisStatusType());
statusOfSample = statusOfSampleDAO.getDataByStatusTypeAndStatusCode(statusOfSample);
//bugzilla 2073 display name - not description
if (null != statusOfSample){
String analysisStatusName = statusOfSample.getStatusOfSampleName();
aStatus[i]= analysisStatusName;
}else{
aStatus[i]= analysisStatus;
}
}else {
aStatus[i]= "";
}
Test_TestAnalyte test = new Test_TestAnalyte();
test.setTest(t);
//bugzilla 2028 populated test with analysisQaEvents
List analysisQaEvents = new ArrayList();
AnalysisQaEvent analysisQaEvent = new AnalysisQaEvent();
analysisQaEvent.setAnalysis(analysis);
analysisQaEvents = analysisQaEventDAO.getAnalysisQaEventsByAnalysis(analysisQaEvent);
test.setAnalysisQaEvents(analysisQaEvents);
//AIS - bugzilla 1826 - Removed unwanted tooltip code
test.setAnalysis(analysis);
List tAs = testAnalyteDAO
.getAllTestAnalytesPerTest(t);
Result[] results = new Result[tAs.size()];
List[] notes = new ArrayList[tAs.size()];
// corresponding
// list
// of
// results
//String[] testResultIds = new String[tAs.size()];
for (int j = 0; j < tAs.size(); j++) {
TestAnalyte ta = (TestAnalyte) tAs.get(j);
// System.out.println("This is TEST_ANALYTE ID " + ta.getId());
Result result = new Result();
resultDAO.getResultByAnalysisAndAnalyte(result,
analysis, ta);
// System.out.println("Adding result " + result.getId());
if (result != null) {
// System.out.println("This is RESULT ID " + result.getId());
if (result.getId() != null) {
// fill in dictionary values
if (result.getResultType().equals(
SystemConfiguration
.getInstance()
.getDictionaryType())) {
// get from dictionary
Dictionary dictionary = new Dictionary();
dictionary.setId(result.getValue());
dictDAO.getData(dictionary);
//bugzilla 1847: use dictEntryDisplayValue
result.setValue(dictionary
.getDictEntryDisplayValue());
}
results[j] = result;
//now get the Notes for this result if exist
Note note = new Note();
List notesByResult = new ArrayList();
note.setReferenceId(result.getId());
//bugzilla 1922
//bugzilla 2571 go through ReferenceTablesDAO to get reference tables info
ReferenceTables referenceTables = new ReferenceTables();
referenceTables.setId(SystemConfiguration.getInstance().getResultReferenceTableId());
note.setReferenceTables(referenceTables);
notesByResult = noteDAO.getAllNotesByRefIdRefTable(note);
if (notesByResult != null && notesByResult.size() > 0) {
notes[j] = notesByResult;
} else {
notes[j] = new ArrayList();
}
} else {
results[j] = new Result();
notes[j] = new ArrayList();
}
} else {
results[j] = new Result();
notes[j] = new ArrayList();
}
}
test.setTestAnalytes(tAs);
test.setResults(results);
test.setNotes(notes);
// Now load test data
testTestAnalytes.add(test);
dynaForm.set("aStatus", aStatus);
}
}
dynaForm.set("testTestAnalytes", testTestAnalytes);
dynaForm.set("testAnalyteTestResults", new ArrayList());
//System.out.println("testTestAnalytes-- :"+ testTestAnalytes);
return mapping.findForward("success");
}
protected String getPageTitleKey() {
return "sampletracking.title";
}
protected String getPageSubtitleKey() {
return "sampletracking.title";
}
}