/**
* 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) CIRG, University of Washington, Seattle WA. All Rights Reserved.
*
*/
package us.mn.state.health.lims.result.action;
import org.apache.commons.validator.GenericValidator;
import org.apache.struts.Globals;
import org.apache.struts.action.*;
import org.hibernate.StaleObjectStateException;
import org.hibernate.Transaction;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
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.action.BaseAction;
import us.mn.state.health.lims.common.action.BaseActionForm;
import us.mn.state.health.lims.common.action.IActionConstants;
import us.mn.state.health.lims.common.exception.LIMSRuntimeException;
import us.mn.state.health.lims.common.formfields.FormFields;
import us.mn.state.health.lims.common.formfields.FormFields.Field;
import us.mn.state.health.lims.common.services.*;
import us.mn.state.health.lims.common.services.DisplayListService.ListType;
import us.mn.state.health.lims.common.services.NoteService.NoteType;
import us.mn.state.health.lims.common.services.StatusService.AnalysisStatus;
import us.mn.state.health.lims.common.services.StatusService.OrderStatus;
import us.mn.state.health.lims.common.services.beanAdapters.ResultSaveBeanAdapter;
import us.mn.state.health.lims.common.services.registration.ResultUpdateRegister;
import us.mn.state.health.lims.common.services.registration.interfaces.IResultUpdate;
import us.mn.state.health.lims.common.services.serviceBeans.ResultSaveBean;
import us.mn.state.health.lims.common.util.ConfigurationProperties;
import us.mn.state.health.lims.common.util.ConfigurationProperties.Property;
import us.mn.state.health.lims.common.util.DateUtil;
import us.mn.state.health.lims.common.util.IdValuePair;
import us.mn.state.health.lims.common.util.StringUtil;
import us.mn.state.health.lims.common.util.validator.ActionError;
import us.mn.state.health.lims.hibernate.HibernateUtil;
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.valueholder.Patient;
import us.mn.state.health.lims.referral.dao.ReferralDAO;
import us.mn.state.health.lims.referral.dao.ReferralResultDAO;
import us.mn.state.health.lims.referral.dao.ReferralTypeDAO;
import us.mn.state.health.lims.referral.daoimpl.ReferralDAOImpl;
import us.mn.state.health.lims.referral.daoimpl.ReferralResultDAOImpl;
import us.mn.state.health.lims.referral.daoimpl.ReferralTypeDAOImpl;
import us.mn.state.health.lims.referral.valueholder.Referral;
import us.mn.state.health.lims.referral.valueholder.ReferralResult;
import us.mn.state.health.lims.referral.valueholder.ReferralType;
import us.mn.state.health.lims.result.action.util.*;
import us.mn.state.health.lims.result.dao.ResultDAO;
import us.mn.state.health.lims.result.dao.ResultInventoryDAO;
import us.mn.state.health.lims.result.dao.ResultSignatureDAO;
import us.mn.state.health.lims.result.daoimpl.ResultDAOImpl;
import us.mn.state.health.lims.result.daoimpl.ResultInventoryDAOImpl;
import us.mn.state.health.lims.result.daoimpl.ResultSignatureDAOImpl;
import us.mn.state.health.lims.result.valueholder.Result;
import us.mn.state.health.lims.result.valueholder.ResultInventory;
import us.mn.state.health.lims.result.valueholder.ResultSignature;
import us.mn.state.health.lims.resultlimits.dao.ResultLimitDAO;
import us.mn.state.health.lims.resultlimits.daoimpl.ResultLimitDAOImpl;
import us.mn.state.health.lims.resultlimits.valueholder.ResultLimit;
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.test.beanItems.TestResultItem;
import us.mn.state.health.lims.testreflex.action.util.TestReflexBean;
import us.mn.state.health.lims.testreflex.action.util.TestReflexUtil;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.Timestamp;
import java.util.*;
public class ResultsLogbookUpdateAction extends BaseAction {
private AnalysisDAO analysisDAO = new AnalysisDAOImpl();
private ResultDAO resultDAO = new ResultDAOImpl();
private ResultSignatureDAO resultSigDAO = new ResultSignatureDAOImpl();
private ResultInventoryDAO resultInventoryDAO = new ResultInventoryDAOImpl();
private NoteDAO noteDAO = new NoteDAOImpl();
private SampleDAO sampleDAO = new SampleDAOImpl();
private ReferralDAO referralDAO = new ReferralDAOImpl();
private ReferralResultDAO referralResultDAO = new ReferralResultDAOImpl();
private ResultLimitDAO resultLimitDAO = new ResultLimitDAOImpl();
private static final String RESULT_SUBJECT = "Result Note";
private static String REFERRAL_CONFORMATION_ID;
private boolean useTechnicianName = ConfigurationProperties.getInstance().isPropertyValueEqual(Property.resultTechnicianName, "true");
private boolean alwaysValidate = ConfigurationProperties.getInstance().isPropertyValueEqual(Property.ALWAYS_VALIDATE_RESULTS, "true");
private boolean supportReferrals = FormFields.getInstance().useField( Field.ResultsReferral );
private String statusRuleSet = ConfigurationProperties.getInstance().getPropertyValueUpperCase( Property.StatusRules );
static{
ReferralTypeDAO referralTypeDAO = new ReferralTypeDAOImpl();
ReferralType referralType = referralTypeDAO.getReferralTypeByName("Confirmation");
if(referralType != null){
REFERRAL_CONFORMATION_ID = referralType.getId();
}
}
protected ActionForward performAction(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
throws Exception{
String forward = FWD_SUCCESS;
List<IResultUpdate> updaters = ResultUpdateRegister.getRegisteredUpdaters();
BaseActionForm dynaForm = (BaseActionForm)form;
ResultsPaging paging = new ResultsPaging();
paging.updatePagedResults(request, dynaForm);
List<TestResultItem> tests = paging.getResults(request);
ResultsUpdateDataSet actionDataSet = new ResultsUpdateDataSet( currentUserId );
actionDataSet.filterModifiedItems( tests );
ActionMessages errors = actionDataSet.validateModifiedItems();
if(errors.size() > 0){
saveErrors(request, errors);
request.setAttribute(Globals.ERROR_KEY, errors);
return mapping.findForward(FWD_VALIDATION_ERROR);
}
createResultsFromItems(actionDataSet);
createAnalysisOnlyUpdates(actionDataSet);
Transaction tx = HibernateUtil.getSession().beginTransaction();
try{
for(Note note: actionDataSet.getNoteList()){
noteDAO.insertData( note );
}
for(ResultSet resultSet : actionDataSet.getNewResults()){
resultDAO.insertData(resultSet.result);
if(resultSet.signature != null){
resultSet.signature.setResultId(resultSet.result.getId());
resultSigDAO.insertData(resultSet.signature);
}
if(resultSet.testKit != null && resultSet.testKit.getInventoryLocationId() != null){
resultSet.testKit.setResultId(resultSet.result.getId());
resultInventoryDAO.insertData(resultSet.testKit);
}
}
for( Referral referral : actionDataSet.getSavableReferrals()){
if( referral != null){
saveReferralsWithRequiredObjects( referral );
}
}
for(ResultSet resultSet : actionDataSet.getModifiedResults()){
resultDAO.updateData(resultSet.result);
if(resultSet.signature != null){
resultSet.signature.setResultId(resultSet.result.getId());
if(resultSet.alwaysInsertSignature){
resultSigDAO.insertData(resultSet.signature);
}else{
resultSigDAO.updateData(resultSet.signature);
}
}
if(resultSet.testKit != null && resultSet.testKit.getInventoryLocationId() != null){
resultSet.testKit.setResultId(resultSet.result.getId());
if(resultSet.testKit.getId() == null){
resultInventoryDAO.insertData(resultSet.testKit);
}else{
resultInventoryDAO.updateData(resultSet.testKit);
}
}
}
for(Analysis analysis : actionDataSet.getModifiedAnalysis()){
analysisDAO.updateData(analysis);
}
ResultSaveService.removeDeletedResultsInTransaction( actionDataSet.getDeletableResults(),currentUserId);
setTestReflexes( actionDataSet );
setSampleStatus( actionDataSet );
for(IResultUpdate updater : updaters){
updater.transactionalUpdate(actionDataSet);
}
tx.commit();
}catch(LIMSRuntimeException lre){
tx.rollback();
ActionError error;
if(lre.getException() instanceof StaleObjectStateException){
error = new ActionError("errors.OptimisticLockException", null, null);
}else{
lre.printStackTrace();
error = new ActionError("errors.UpdateException", null, null);
}
errors.add(ActionMessages.GLOBAL_MESSAGE, error);
saveErrors(request, errors);
request.setAttribute(Globals.ERROR_KEY, errors);
return mapping.findForward(FWD_FAIL);
}
for(IResultUpdate updater : updaters){
updater.postTransactionalCommitUpdate(actionDataSet);
}
setSuccessFlag(request, forward);
if(GenericValidator.isBlankOrNull(dynaForm.getString("logbookType"))){
return mapping.findForward(forward);
}else{
Map<String, String> params = new HashMap<String, String>();
params.put("type", dynaForm.getString("logbookType"));
params.put("forward", forward);
return getForwardWithParameters(mapping.findForward(forward), params);
}
}
private void saveReferralsWithRequiredObjects( Referral referral ){
if( referral.getId() != null){
referralDAO.updateData( referral );
}else{
referralDAO.insertData( referral );
ReferralResult referralResult = new ReferralResult();
referralResult.setReferralId( referral.getId() );
referralResult.setSysUserId( currentUserId );
referralResultDAO.insertData( referralResult );
}
}
protected void setTestReflexes(ResultsUpdateDataSet actionDataSet){
TestReflexUtil testReflexUtil = new TestReflexUtil();
testReflexUtil.setCurrentUserId( currentUserId );
testReflexUtil.addNewTestsToDBForReflexTests( convertToTestReflexBeanList( actionDataSet.getNewResults()) );
testReflexUtil.updateModifiedReflexes( convertToTestReflexBeanList( actionDataSet.getModifiedResults()) );
}
private List<TestReflexBean> convertToTestReflexBeanList(List<ResultSet> resultSetList){
List<TestReflexBean> reflexBeanList = new ArrayList<TestReflexBean>();
for(ResultSet resultSet : resultSetList){
TestReflexBean reflex = new TestReflexBean();
reflex.setPatient(resultSet.patient);
if( resultSet.triggersToSelectedReflexesMap.size() > 0 && resultSet.multipleResultsForAnalysis){
for( String trigger : resultSet.triggersToSelectedReflexesMap.keySet()){
if( trigger.equals( resultSet.result.getValue() )){
HashMap<String, List<String>> reducedMap = new HashMap<String, List<String>>( 1 );
reducedMap.put( trigger, resultSet.triggersToSelectedReflexesMap.get( trigger ) );
reflex.setTriggersToSelectedReflexesMap( reducedMap );
}
}
if( reflex.getTriggersToSelectedReflexesMap() == null){
reflex.setTriggersToSelectedReflexesMap( new HashMap<String, List<String>>( ) );
}
}else{
reflex.setTriggersToSelectedReflexesMap( resultSet.triggersToSelectedReflexesMap );
}
reflex.setResult(resultSet.result);
reflex.setSample(resultSet.sample);
reflexBeanList.add(reflex);
}
return reflexBeanList;
}
private void setSampleStatus(ResultsUpdateDataSet actionDataSet){
Set<Sample> sampleSet = new HashSet<Sample>();
for(ResultSet resultSet : actionDataSet.getNewResults()){
sampleSet.add(resultSet.sample);
}
String sampleTestingStartedId = StatusService.getInstance().getStatusID(OrderStatus.Started);
String sampleNonConformingId = StatusService.getInstance().getStatusID(OrderStatus.NonConforming_depricated);
for(Sample sample : sampleSet){
if(!(sample.getStatusId().equals(sampleNonConformingId) || sample.getStatusId().equals(sampleTestingStartedId))){
Sample newSample = new Sample();
newSample.setId(sample.getId());
sampleDAO.getData(newSample);
newSample.setStatusId(sampleTestingStartedId);
newSample.setSysUserId(currentUserId);
sampleDAO.updateData(newSample);
}
}
}
private void createAnalysisOnlyUpdates( ResultsUpdateDataSet actionDataSet ){
for(TestResultItem testResultItem : actionDataSet.getAnalysisOnlyChangeResults()){
AnalysisService analysisService = new AnalysisService( testResultItem.getAnalysisId() );
analysisService.getAnalysis().setSysUserId( currentUserId );
analysisService.getAnalysis().setCompletedDate( DateUtil.convertStringDateToSqlDate( testResultItem.getTestDate() ) );
analysisService.getAnalysis().setAnalysisType( testResultItem.getAnalysisMethod() );
actionDataSet.getModifiedAnalysis().add( analysisService.getAnalysis() );
}
}
private void createResultsFromItems( ResultsUpdateDataSet actionDataSet ){
for(TestResultItem testResultItem : actionDataSet.getModifiedItems()){
AnalysisService analysisService = new AnalysisService( testResultItem.getAnalysisId() );
analysisService.getAnalysis().setStatusId( getStatusForTestResult( testResultItem ) );
analysisService.getAnalysis().setSysUserId( currentUserId );
handleReferrals(testResultItem, analysisService.getAnalysis(), actionDataSet);
actionDataSet.getModifiedAnalysis().add( analysisService.getAnalysis() );
NoteService noteService = new NoteService( analysisService.getAnalysis() );
actionDataSet.addToNoteList( noteService.createSavableNote( NoteType.INTERNAL, testResultItem.getNote(), RESULT_SUBJECT, currentUserId ) );
if (testResultItem.isShadowRejected()) {
String rejectedReasonId = testResultItem.getRejectReasonId();
for (IdValuePair rejectReason : DisplayListService.getList(ListType.REJECTION_REASONS)) {
if (rejectedReasonId.equals(rejectReason.getId())) {
actionDataSet.addToNoteList( noteService.createSavableNote( NoteType.REJECTION_REASON, rejectReason.getValue(), RESULT_SUBJECT, currentUserId) );
break;
}
}
}
ResultSaveBean bean = ResultSaveBeanAdapter.fromTestResultItem(testResultItem);
ResultSaveService resultSaveService = new ResultSaveService(analysisService.getAnalysis(),currentUserId);
//deletable Results will be written to, not read
List<Result> results = resultSaveService.createResultsFromTestResultItem( bean, actionDataSet.getDeletableResults());
analysisService.getAnalysis().setCorrectedSincePatientReport( resultSaveService.isUpdatedResult() &&
analysisService.patientReportHasBeenDone() );
if( analysisService.hasBeenCorrectedSinceLastPatientReport()){
actionDataSet.addToNoteList( noteService.createSavableNote( NoteType.EXTERNAL, StringUtil.getMessageForKey( "note.corrected.result" ), RESULT_SUBJECT, currentUserId ) );
}
//If there is more than one result then each user selected reflex gets mapped to that result
for(Result result : results){
addResult(result, testResultItem, analysisService.getAnalysis(), results.size() > 1, actionDataSet);
if(analysisShouldBeUpdated(testResultItem, result)){
updateAnalysis( testResultItem, testResultItem.getTestDate(), analysisService.getAnalysis() );
}
}
}
}
private void handleReferrals( TestResultItem testResultItem, Analysis analysis, ResultsUpdateDataSet actionDataSet ){
if(supportReferrals){
Referral referral = null;
// referredOut means the referral checkbox was checked, repeating
// analysis means that we have multi-select results, so only do one.
if(testResultItem.isShadowReferredOut() && !actionDataSet.getReferredAnalysisIds().contains( analysis.getId() )){
actionDataSet.getReferredAnalysisIds().add( analysis.getId() );
// If it is a new result or there is no referral ID that means
// that a new referral has to be created if it was checked and
// it was canceled then we are un-canceling a canceled referral
if(testResultItem.getResultId() == null || GenericValidator.isBlankOrNull(testResultItem.getReferralId())){
referral = new Referral();
referral.setReferralTypeId(REFERRAL_CONFORMATION_ID);
referral.setSysUserId(currentUserId);
referral.setRequestDate( new Timestamp( new Date().getTime() ) );
referral.setRequesterName( testResultItem.getTechnician() );
referral.setAnalysis( analysis );
referral.setReferralReasonId(testResultItem.getReferralReasonId());
}else if(testResultItem.isReferralCanceled()){
referral = referralDAO.getReferralById(testResultItem.getReferralId());
referral.setCanceled(false);
referral.setSysUserId(currentUserId);
referral.setRequesterName(testResultItem.getTechnician());
referral.setReferralReasonId(testResultItem.getReferralReasonId());
}
actionDataSet.getSavableReferrals().add( referral );
}
}
}
protected boolean analysisShouldBeUpdated(TestResultItem testResultItem, Result result){
return result != null && !GenericValidator.isBlankOrNull(result.getValue())
|| (supportReferrals && ResultUtil.isReferred(testResultItem))
|| ResultUtil.isForcedToAcceptance(testResultItem) || testResultItem.isShadowRejected();
}
private void addResult(Result result, TestResultItem testResultItem, Analysis analysis, boolean multipleResultsForAnalysis, ResultsUpdateDataSet actionDataSet){
boolean newResult = result.getId() == null;
boolean newAnalysisInLoop = analysis != actionDataSet.getPreviousAnalysis();
ResultSignature technicianResultSignature = null;
if(useTechnicianName && newAnalysisInLoop){
technicianResultSignature = createTechnicianSignatureFromResultItem(testResultItem);
}
ResultInventory testKit = createTestKitLinkIfNeeded(testResultItem, ResultsLoadUtility.TESTKIT);
analysis.setReferredOut(testResultItem.isReferredOut());
analysis.setEnteredDate(DateUtil.getNowAsTimestamp());
if(newResult){
analysis.setEnteredDate(DateUtil.getNowAsTimestamp());
analysis.setRevision("1");
}else if(newAnalysisInLoop){
analysis.setRevision(String.valueOf(Integer.parseInt(analysis.getRevision()) + 1));
}
SampleService sampleService = new SampleService( testResultItem.getAccessionNumber() );
Patient patient = sampleService.getPatient();
Map<String,List<String>> triggersToReflexesMap = new HashMap<String, List<String>>( );
getSelectedReflexes( testResultItem.getReflexJSONResult(), triggersToReflexesMap );
if(newResult){
actionDataSet.getNewResults().add( new ResultSet( result, technicianResultSignature, testKit, patient, sampleService.getSample(), triggersToReflexesMap,
multipleResultsForAnalysis ) );
}else{
actionDataSet.getModifiedResults().add( new ResultSet( result, technicianResultSignature, testKit, patient, sampleService.getSample(), triggersToReflexesMap,
multipleResultsForAnalysis ) );
}
actionDataSet.setPreviousAnalysis(analysis);
}
private void getSelectedReflexes( String reflexJSONResult, Map<String, List<String>> triggersToReflexesMap ){
if( !GenericValidator.isBlankOrNull( reflexJSONResult )){
JSONParser parser=new JSONParser();
try{
JSONObject jsonResult = ( JSONObject ) parser.parse( reflexJSONResult.replaceAll( "'", "\"" ) );
for(Object compoundReflexes : jsonResult.values()){
if( compoundReflexes != null){
String triggerIds = ( String ) ( ( JSONObject ) compoundReflexes ).get( "triggerIds" );
List<String> selectedReflexIds = new ArrayList<String>();
JSONArray selectedReflexes = ( JSONArray ) ( ( JSONObject ) compoundReflexes ).get( "selected" );
for( Object selectedReflex : selectedReflexes ){
selectedReflexIds.add( ( ( String ) selectedReflex ) );
}
triggersToReflexesMap.put( triggerIds.trim(), selectedReflexIds );
}
}
}catch( ParseException e ){
e.printStackTrace();
}
}
}
private String getStatusForTestResult(TestResultItem testResult){
if (testResult.isShadowRejected()) {
return StatusService.getInstance().getStatusID(AnalysisStatus.TechnicalRejected);
}else if(alwaysValidate || !testResult.isValid() || ResultUtil.isForcedToAcceptance(testResult)){
return StatusService.getInstance().getStatusID(AnalysisStatus.TechnicalAcceptance);
}else if(noResults(testResult.getShadowResultValue(), testResult.getMultiSelectResultValues(), testResult.getResultType())){
return StatusService.getInstance().getStatusID(AnalysisStatus.NotStarted);
}else{
ResultLimit resultLimit = resultLimitDAO.getResultLimitById(testResult.getResultLimitId());
if(resultLimit != null && resultLimit.isAlwaysValidate()){
return StatusService.getInstance().getStatusID(AnalysisStatus.TechnicalAcceptance);
}
return StatusService.getInstance().getStatusID(AnalysisStatus.Finalized);
}
}
private boolean noResults(String value, String multiSelectValue, String type){
return (GenericValidator.isBlankOrNull(value) && GenericValidator.isBlankOrNull(multiSelectValue)) ||
( TypeOfTestResultService.ResultType.DICTIONARY.matches(type) && "0".equals(value));
}
private ResultInventory createTestKitLinkIfNeeded(TestResultItem testResult, String testKitName){
ResultInventory testKit = null;
if((TestResultItem.ResultDisplayType.SYPHILIS == testResult.getRawResultDisplayType() || TestResultItem.ResultDisplayType.HIV == testResult
.getRawResultDisplayType()) && ResultsLoadUtility.TESTKIT.equals(testKitName)){
testKit = createTestKit( testResult, testKitName, testResult.getTestKitId() );
}
return testKit;
}
private ResultInventory createTestKit( TestResultItem testResult, String testKitName, String testKitId ) throws LIMSRuntimeException{
ResultInventory testKit;
testKit = new ResultInventory();
if(!GenericValidator.isBlankOrNull(testKitId)){
testKit.setId(testKitId);
resultInventoryDAO.getData(testKit);
}
testKit.setInventoryLocationId(testResult.getTestKitInventoryId());
testKit.setDescription(testKitName);
testKit.setSysUserId(currentUserId);
return testKit;
}
private void updateAnalysis( TestResultItem testResultItem, String testDate, Analysis analysis ){
analysis.setAnalysisType(testResultItem.getAnalysisMethod());
analysis.setStartedDateForDisplay(testDate);
// This needs to be refactored -- part of the logic is in
// getStatusForTestResult. RetroCI over rides to whatever was set before
if(statusRuleSet.equals(IActionConstants.STATUS_RULES_RETROCI)){
if( !StatusService.getInstance().getStatusID(AnalysisStatus.Canceled).equals(analysis.getStatusId() )){
analysis.setCompletedDate(DateUtil.convertStringDateToSqlDate(testDate));
analysis.setStatusId(StatusService.getInstance().getStatusID(AnalysisStatus.TechnicalAcceptance));
}
}else if(StatusService.getInstance().matches(analysis.getStatusId(), AnalysisStatus.Finalized) ||
StatusService.getInstance().matches( analysis.getStatusId(), AnalysisStatus.TechnicalAcceptance ) ||
(analysis.isReferredOut() && !GenericValidator.isBlankOrNull(testResultItem.getShadowResultValue()))){
analysis.setCompletedDate(DateUtil.convertStringDateToSqlDate(testDate));
}
}
private ResultSignature createTechnicianSignatureFromResultItem(TestResultItem testResult){
ResultSignature sig = null;
// The technician signature may be blank if the user changed a
// conclusion and then changed it back. It will be dirty
// but will not need a signature
if(!GenericValidator.isBlankOrNull(testResult.getTechnician())){
sig = new ResultSignature();
if(!GenericValidator.isBlankOrNull(testResult.getTechnicianSignatureId())){
sig.setId(testResult.getTechnicianSignatureId());
resultSigDAO.getData(sig);
}
sig.setIsSupervisor(false);
sig.setNonUserName(testResult.getTechnician());
sig.setSysUserId(currentUserId);
}
return sig;
}
protected ActionForward getForward(ActionForward forward, String accessionNumber){
ActionRedirect redirect = new ActionRedirect(forward);
if(!StringUtil.isNullorNill(accessionNumber))
redirect.addParameter(ACCESSION_NUMBER, accessionNumber);
return redirect;
}
protected ActionForward getForward(ActionForward forward, String accessionNumber, String analysisId){
ActionRedirect redirect = new ActionRedirect(forward);
if(!StringUtil.isNullorNill(accessionNumber))
redirect.addParameter(ACCESSION_NUMBER, accessionNumber);
if(!StringUtil.isNullorNill(analysisId))
redirect.addParameter(ANALYSIS_ID, analysisId);
return redirect;
}
@Override
protected String getPageSubtitleKey(){
return "banner.menu.results";
}
@Override
protected String getPageTitleKey(){
return "banner.menu.results";
}
}