/**
* 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.sample.action;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.struts.Globals;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.action.ActionRedirect;
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.citystatezip.dao.CityStateZipDAO;
import us.mn.state.health.lims.citystatezip.daoimpl.CityStateZipDAOImpl;
import us.mn.state.health.lims.citystatezip.valueholder.CityStateZip;
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.exception.LIMSRuntimeException;
import us.mn.state.health.lims.common.log.LogEvent;
import us.mn.state.health.lims.common.provider.validation.CityStateZipComboValidationProvider;
import us.mn.state.health.lims.common.provider.validation.CityValidationProvider;
import us.mn.state.health.lims.common.provider.validation.OrganizationLocalAbbreviationValidationProvider;
import us.mn.state.health.lims.common.provider.validation.ProjectIdOrNameValidationProvider;
import us.mn.state.health.lims.common.provider.validation.StateValidationProvider;
import us.mn.state.health.lims.common.provider.validation.ZipValidationProvider;
import us.mn.state.health.lims.common.services.StatusService;
import us.mn.state.health.lims.common.services.StatusService.SampleStatus;
import us.mn.state.health.lims.common.util.StringUtil;
import us.mn.state.health.lims.common.util.SystemConfiguration;
import us.mn.state.health.lims.common.util.validator.ActionError;
import us.mn.state.health.lims.hibernate.HibernateUtil;
import us.mn.state.health.lims.login.valueholder.UserSessionData;
import us.mn.state.health.lims.organization.dao.OrganizationDAO;
import us.mn.state.health.lims.organization.daoimpl.OrganizationDAOImpl;
import us.mn.state.health.lims.organization.valueholder.Organization;
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.dao.PersonDAO;
import us.mn.state.health.lims.person.daoimpl.PersonDAOImpl;
import us.mn.state.health.lims.person.valueholder.Person;
import us.mn.state.health.lims.project.dao.ProjectDAO;
import us.mn.state.health.lims.project.daoimpl.ProjectDAOImpl;
import us.mn.state.health.lims.project.valueholder.Project;
import us.mn.state.health.lims.provider.dao.ProviderDAO;
import us.mn.state.health.lims.provider.daoimpl.ProviderDAOImpl;
import us.mn.state.health.lims.provider.valueholder.Provider;
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.sampledomain.dao.SampleDomainDAO;
import us.mn.state.health.lims.sampledomain.daoimpl.SampleDomainDAOImpl;
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.dao.SampleProjectDAO;
import us.mn.state.health.lims.sampleproject.daoimpl.SampleProjectDAOImpl;
import us.mn.state.health.lims.sampleproject.valueholder.SampleProject;
import us.mn.state.health.lims.sourceofsample.dao.SourceOfSampleDAO;
import us.mn.state.health.lims.sourceofsample.daoimpl.SourceOfSampleDAOImpl;
import us.mn.state.health.lims.systemuser.dao.SystemUserDAO;
import us.mn.state.health.lims.systemuser.daoimpl.SystemUserDAOImpl;
import us.mn.state.health.lims.systemuser.valueholder.SystemUser;
import us.mn.state.health.lims.test.dao.TestDAO;
import us.mn.state.health.lims.test.daoimpl.TestDAOImpl;
import us.mn.state.health.lims.test.valueholder.Test;
import us.mn.state.health.lims.typeofsample.dao.TypeOfSampleDAO;
import us.mn.state.health.lims.typeofsample.daoimpl.TypeOfSampleDAOImpl;
import us.mn.state.health.lims.typeofsample.valueholder.TypeOfSample;
/**
* @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.
*/
public class HumanSampleOneUpdateAction extends BaseAction {
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 Sample.
// If there is a parameter present, we should bring up an existing
// Sample to edit.
String forward = FWD_SUCCESS;
request.setAttribute(ALLOW_EDITS_KEY, "true");
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);
// validate on server-side patient city/zip combination
/*
* String city = (String) dynaForm.get("city"); String zipCode =
* (String) dynaForm.get("zipCode"); if (!StringUtil.isNullorNill(city) &&
* !StringUtil.isNullorNill(zipCode)) { try { errors =
* validateZipCity(errors, zipCode, city); } catch (Exception e) {
* ActionError error = new ActionError( "errors.ValidationException",
* null, null); errors.add(ActionMessages.GLOBAL_MESSAGE, error); } }
*/
try {
errors = validateAll(request, errors, dynaForm);
} catch (Exception e) {
//bugzilla 2154
LogEvent.logError("HumanSampleOneUpdateAction","performAction()",e.toString());
ActionError error = new ActionError("errors.ValidationException",
null, null);
errors.add(ActionMessages.GLOBAL_MESSAGE, error);
}
// end of zip/city combination check
if (errors != null && errors.size() > 0) {
// System.out.println("saveing errors " + errors.size());
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");
Patient patient = new Patient();
Person person = new Person();
Provider provider = new Provider();
Person providerPerson = new Person();
Sample sample = new Sample();
SampleHuman sampleHuman = new SampleHuman();
SampleOrganization sampleOrganization = new SampleOrganization();
List sampleProjects = new ArrayList();
SampleItem sampleItem = new SampleItem();
sampleItem.setStatusId(StatusService.getInstance().getStatusID(SampleStatus.Entered));
// bugzilla 1926 get sysUserId from login module
UserSessionData usd = (UserSessionData)request.getSession().getAttribute(USER_SESSION_DATA);
String sysUserId = String.valueOf(usd.getSystemUserId());
// String typeOfSampleId = (String) dynaForm.get("typeOfSampleId");
String typeOfSample = (String) dynaForm.get("typeOfSampleDesc");
// String sourceOfSampleId = (String) dynaForm.get("sourceOfSampleId");
//bugzilla 2470, unused
// String sourceOfSample = (String) dynaForm.get("sourceOfSampleDesc");
List sysUsers = new ArrayList();
List sampleDomains = new ArrayList();
List typeOfSamples = new ArrayList();
List sourceOfSamples = new ArrayList();
if (dynaForm.get("sysUsers") != null) {
sysUsers = (List) dynaForm.get("sysUsers");
} else {
SystemUserDAO sysUserDAO = new SystemUserDAOImpl();
sysUsers = sysUserDAO.getAllSystemUsers();
}
if (dynaForm.get("sampleDomains") != null) {
sampleDomains = (List) dynaForm.get("sampleDomains");
} else {
SampleDomainDAO sampleDomainDAO = new SampleDomainDAOImpl();
sampleDomains = sampleDomainDAO.getAllSampleDomains();
}
if (dynaForm.get("typeOfSamples") != null) {
typeOfSamples = (List) dynaForm.get("typeOfSamples");
} else {
TypeOfSampleDAO typeOfSampleDAO = new TypeOfSampleDAOImpl();
typeOfSamples = typeOfSampleDAO.getAllTypeOfSamples();
}
if (dynaForm.get("sourceOfSamples") != null) {
sourceOfSamples = (List) dynaForm.get("sourceOfSamples");
} else {
SourceOfSampleDAO sourceOfSampleDAO = new SourceOfSampleDAOImpl();
sourceOfSamples = sourceOfSampleDAO.getAllSourceOfSamples();
}
String stringOfTestIds = (String) dynaForm.get("selectedTestIds");
String projectIdOrName = (String) dynaForm.get("projectIdOrName");
String project2IdOrName = (String) dynaForm.get("project2IdOrName");
String projectNameOrId = (String) dynaForm.get("projectNameOrId");
String project2NameOrId = (String) dynaForm.get("project2NameOrId");
// get the numeric projectId either from projectIdOrName or from
// projectNameOrId
String projectId = null;
String project2Id = null;
//bugzilla 2318
if (!StringUtil.isNullorNill(projectIdOrName) && !StringUtil.isNullorNill(projectNameOrId)) {
try {
Integer i = Integer.valueOf(projectIdOrName);
projectId = projectIdOrName;
//bugzilla 2154
LogEvent.logDebug("HumanSampleOneUpdateAction","performAction()","Parsed integer value of projectIdOrName: " + projectIdOrName + " projectNameOrId: " + projectNameOrId);
} catch (NumberFormatException nfe) {
projectId = projectNameOrId;
//bugzilla 2154
LogEvent.logError("HumanSampleOneUpdateAction","performAction()","Error parsing integer value of projectIdOrName: " + projectIdOrName + " " + nfe.toString());
}
}
//bugzilla 2318
if (!StringUtil.isNullorNill(project2IdOrName) && !StringUtil.isNullorNill(project2NameOrId)) {
try {
Integer i = Integer.valueOf(project2IdOrName);
project2Id = project2IdOrName;
//bugzilla 2154
LogEvent.logDebug("HumanSampleOneUpdateAction","performAction()","Parsed integer value of project2IdOrName: " + project2IdOrName + " project2NameOrId: " + project2NameOrId);
} catch (NumberFormatException nfe) {
project2Id = project2NameOrId;
//bugzilla 2154
LogEvent.logError("HumanSampleOneUpdateAction","performAction()","Error parsing integer value of project2IdOrName: " + project2IdOrName + " " + nfe.toString());
}
}
String[] listOfTestIds = stringOfTestIds.split(SystemConfiguration
.getInstance().getDefaultIdSeparator(), -1);
List analyses = new ArrayList();
for (int i = 0; i < listOfTestIds.length; i++) {
if (!StringUtil.isNullorNill(listOfTestIds[i])) {
Analysis analysis = new Analysis();
Test test = new Test();
String testId = (String) listOfTestIds[i];
test.setId(testId);
TestDAO testDAO = new TestDAOImpl();
testDAO.getData(test);
analysis.setTest(test);
// TODO: need to populate this with actual data!!!
analysis.setAnalysisType("TEST");
analyses.add(analysis);
}
}
SystemUser sysUser = null;
for (int i = 0; i < sysUsers.size(); i++) {
SystemUser su = (SystemUser) sysUsers.get(i);
if (su.getId().equals(sysUserId)) {
sysUser = su;
break;
}
}
TypeOfSample typeOfSamp = null;
// get the right typeOfSamp to update sampleitem with
for (int i = 0; i < typeOfSamples.size(); i++) {
TypeOfSample s = (TypeOfSample) typeOfSamples.get(i);
// if (s.getId().equals(typeOfSampleId)) {
if (s.getDescription().equalsIgnoreCase(typeOfSample)) {
typeOfSamp = s;
break;
}
}
// fixed in bugzilla 2470, unused
//SourceOfSample sourceOfSamp = null;
/*
// get the right sourceOfSamp to update sampleitem with
for (int i = 0; i < sourceOfSamples.size(); i++) {
SourceOfSample s = (SourceOfSample) sourceOfSamples.get(i);
// if (s.getId().equals(sourceOfSampleId)) {
if (s.getDescription().equalsIgnoreCase(sourceOfSample)) {
sourceOfSamp = s;
break;
}
}
*/
// populate valueholder from form
PropertyUtils.copyProperties(sample, dynaForm);
PropertyUtils.copyProperties(person, dynaForm);
PropertyUtils.copyProperties(patient, dynaForm);
PropertyUtils.copyProperties(provider, dynaForm);
PropertyUtils.copyProperties(sampleHuman, dynaForm);
PropertyUtils.copyProperties(sampleOrganization, dynaForm);
PropertyUtils.copyProperties(sampleItem, dynaForm);
Organization o = new Organization();
//bugzilla 2069
o.setOrganizationLocalAbbreviation((String) dynaForm.get("organizationLocalAbbreviation"));
OrganizationDAO organizationDAO = new OrganizationDAOImpl();
o = organizationDAO.getOrganizationByLocalAbbreviation(o, true);
sampleOrganization.setOrganization(o);
// if there was a first sampleProject id entered
if (!StringUtil.isNullorNill(projectId)) {
SampleProject sampleProject = new SampleProject();
Project p = new Project();
//bugzilla 2438
p.setLocalAbbreviation(projectId);
ProjectDAO projectDAO = new ProjectDAOImpl();
p = projectDAO.getProjectByLocalAbbreviation(p, true);
sampleProject.setProject(p);
sampleProject.setIsPermanent(NO);
sampleProjects.add(sampleProject);
}
// in case there was a second sampleProject id entered
if (!StringUtil.isNullorNill(project2Id)) {
SampleProject sampleProject2 = new SampleProject();
Project p2 = new Project();
//bugzilla 2438
p2.setLocalAbbreviation(project2Id);
ProjectDAO projectDAO = new ProjectDAOImpl();
p2 = projectDAO.getProjectByLocalAbbreviation(p2, true);
sampleProject2.setProject(p2);
sampleProject2.setIsPermanent(NO);
sampleProjects.add(sampleProject2);
}
// set the provider person manually as we have two Person valueholders
// to populate and copyProperties() can only handle one per form
providerPerson.setFirstName((String) dynaForm.get("providerFirstName"));
providerPerson.setLastName((String) dynaForm.get("providerLastName"));
// format workPhone for storage
String workPhone = (String) dynaForm.get("providerWorkPhone");
String ext = (String) dynaForm.get("providerWorkPhoneExtension");
String formattedPhone = StringUtil.formatPhone(workPhone, ext);
// phone is stored as 999/999-9999.9999
// area code/phone - number.extension
providerPerson.setWorkPhone(formattedPhone);
//bugzilla 1701 blank out provider.externalId - this is copied from patient
//externalId which is not related...and we currently don't enter an externalId for
//provider on this screen
provider.setExternalId(BLANK);
// set collection time
String time = (String) dynaForm.get("collectionTimeForDisplay");
if (StringUtil.isNullorNill(time)) {
time = "00:00";
}
sample.setCollectionTimeForDisplay(time);
// AIS - bugzilla 1408 - Start
String accessionNumberOne = (String) dynaForm.get("accessionNumber");
sample.setAccessionNumber(accessionNumberOne);
SampleDAO sampleDAO = new SampleDAOImpl();
sampleDAO.getSampleByAccessionNumber(sample);
String stickerReceivedFlag = (String) dynaForm
.get("stickerReceivedFlag");
String referredCultureFlag = (String) dynaForm
.get("referredCultureFlag");
sample.setStickerReceivedFlag(stickerReceivedFlag);
sample.setReferredCultureFlag(referredCultureFlag);
String date = (String) dynaForm.get("collectionDateForDisplay");
// bgm - bugzilla 1586 check for null collection date
//db bugzilla 1765 - noticed that error occurs - need to check
// also that date is not nill as well as not null
if (!StringUtil.isNullorNill(date)) {
sample.setCollectionDateForDisplay(date);
// AIS - bugzilla 1408 - End
Timestamp d = sample.getCollectionDate();
//bugzilla 1857 deprecated date stuff
Calendar cal = Calendar.getInstance();
cal.setTime(d);
if (null != d)
if (time.indexOf(":") > 0) {
cal.set(Calendar.HOUR_OF_DAY, Integer.valueOf(time.substring(0, 2)).intValue());
//d.setHours(Integer.valueOf(time.substring(0, 2)).intValue());
cal.set(Calendar.MINUTE, Integer.valueOf(time.substring(3, 5)).intValue());
//d.setMinutes(Integer.valueOf(time.substring(3, 5)).intValue());
d = new Timestamp(cal.getTimeInMillis());
sample.setCollectionDate(d);
}
}
// sampleItem
sampleItem.setSortOrder("1");
// set the typeOfSample
sampleItem.setTypeOfSample(typeOfSamp);
// sampleItem.setTypeOfSample(typeOfSample);
// set the sourceOfSample
// fixed in bugzilla 2470 unused
//sampleItem.setSourceOfSample(sourceOfSamp);
// sampleItem.setSourceOfSample(sourceOfSample);
// set the system user
sample.setSystemUser(sysUser);
//bugzilla 2112
sample.setSysUserId(sysUserId);
//bugzilla 1926
sampleItem.setSysUserId(sysUserId);
sampleOrganization.setSysUserId(sysUserId);
sampleHuman.setSysUserId(sysUserId);
patient.setSysUserId(sysUserId);
person.setSysUserId(sysUserId);
provider.setSysUserId(sysUserId);
providerPerson.setSysUserId(sysUserId);
//bugzilla 2169 - undo bugzilla 1408 logic to copy externalId into sample client_reference if clientRef# is blank
if (!StringUtil.isNullorNill((String) dynaForm.get("clientReference"))) {
sample.setClientReference((String) dynaForm.get("clientReference"));
}
//bugzilla 1761 (get status code and domain from SystemConfiguration)
sample.setStatus(SystemConfiguration.getInstance().getSampleStatusEntry1Complete());
sample.setDomain(SystemConfiguration.getInstance().getHumanDomain());
sample.setSampleProjects(sampleProjects);
org.hibernate.Transaction tx = HibernateUtil.getSession()
.beginTransaction();
try {
// HumanSampleOneDAO humanSampleOneDAO = new
// HumanSampleOneDAOImpl();
PersonDAO personDAO = new PersonDAOImpl();
PatientDAO patientDAO = new PatientDAOImpl();
ProviderDAO providerDAO = new ProviderDAOImpl();
// AIS - bugzilla 1408 ( already declared..)
// SampleDAO sampleDAO = new SampleDAOImpl();
SampleItemDAO sampleItemDAO = new SampleItemDAOImpl();
SampleProjectDAO sampleProjectDAO = new SampleProjectDAOImpl();
SampleHumanDAO sampleHumanDAO = new SampleHumanDAOImpl();
SampleOrganizationDAO sampleOrganizationDAO = new SampleOrganizationDAOImpl();
AnalysisDAO analysisDAO = new AnalysisDAOImpl();
// why does it only work if sample is the first insert (not when
// person is first insert?)
// AIS - bugzilla 1408
// sampleDAO.insertData(sample);
//bugzilla 2154
LogEvent.logDebug("HumanSampleOneUpdateAction","performAction()","About to sampleDAO.updateData() status code: " + sample.getStatus());
sampleDAO.updateData(sample);
personDAO.insertData(person);
patient.setPerson(person);
patientDAO.insertData(patient);
personDAO.insertData(providerPerson);
provider.setPerson(providerPerson);
providerDAO.insertData(provider);
for (int i = 0; i < sampleProjects.size(); i++) {
SampleProject sampleProject = (SampleProject) sampleProjects
.get(i);
sampleProject.setSample(sample);
// sampleProject.setProject(prClone);
//bugzilla 2112
sampleProject.setSysUserId(sysUserId);
sampleProjectDAO.insertData(sampleProject);
}
sampleHuman.setSampleId(sample.getId());
sampleHuman.setPatientId(patient.getId());
sampleHuman.setProviderId(provider.getId());
sampleHumanDAO.insertData(sampleHuman);
sampleOrganization.setSample(sample);
sampleOrganization.setSample(sample);
sampleOrganizationDAO.insertData(sampleOrganization);
//bugzilla 1773 need to store sample not sampleId for use in sorting
sampleItem.setSample(sample);
// AIS - bugzilla 1408
// sampleItemDAO.insertData(sampleItem);
//bugzilla 2113
SampleItem si = new SampleItem();
si.setSample(sample);
sampleItemDAO.getDataBySample(si);
sampleItem.setId(si.getId());
//bugzilla 2470
sampleItem.setSourceOfSampleId(si.getSourceOfSampleId());
sampleItem.setSourceOther(si.getSourceOther());
sampleItem.setLastupdated(si.getLastupdated());
sampleItemDAO.updateData(sampleItem);
// Analysis table
if (analyses != null) {
for (int i = 0; i < analyses.size(); i++) {
Analysis analysis = (Analysis) analyses.get(i);
analysis.setSampleItem(sampleItem);
//bugzilla 2064
analysis.setRevision(SystemConfiguration.getInstance().getAnalysisDefaultRevision());
//bugzilla 2013 added duplicateCheck parameter
analysisDAO.insertData(analysis, false);
}
}
// insert humanSampleOne
// humanSampleOneDAO.insertData(patient, person, provider,
// providerPerson, sample, sampleHuman, sampleOrganization,
// sampleItem, analyses);
tx.commit();
} catch (LIMSRuntimeException lre) {
//bugzilla 2154
LogEvent.logError("HumanSampleOneUpdateAction","performAction()",lre.toString());
tx.rollback();
errors = new ActionMessages();
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 {
//lre.printStackTrace();
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);
// initialize the form
dynaForm.initialize(mapping);
// repopulate the form from valueholder
PropertyUtils.copyProperties(dynaForm, sample);
// PropertyUtils.setProperty(dynaForm, "parentSamples", samps);
PropertyUtils.setProperty(dynaForm, "sysUsers", sysUsers);
PropertyUtils.setProperty(dynaForm, "sampleDomains", sampleDomains);
if ("true".equalsIgnoreCase(request.getParameter("close"))) {
forward = FWD_CLOSE;
}
if (sample.getId() != null && !sample.getId().equals("0")) {
request.setAttribute(ID, sample.getId());
}
if (forward.equals(FWD_SUCCESS)) {
request.setAttribute("menuDefinition", "default");
}
// TODO: temporary code to forward with accessionNumber (remove the
// overriding getForward in this class
String accessionNumber = sample.getAccessionNumber();
// return getForward(mapping.findForward(forward), id, start);
return getForward(mapping.findForward(forward), id, start,
accessionNumber);
}
protected String getPageTitleKey() {
if (isNew) {
return "human.sample.one.add.title";
} else {
return "human.sample.one.edit.title";
}
}
protected String getPageSubtitleKey() {
if (isNew) {
return "human.sample.one.add.title";
} else {
return "human.sample.one.edit.title";
}
}
protected ActionMessages validateZipCity(ActionMessages errors,
String zipCode, String city) throws Exception {
// bugzilla 1545
CityStateZipDAO cityStateZipDAO = new CityStateZipDAOImpl();
CityStateZip cityStateZip = new CityStateZip();
// use 5-digit zipcode for validation
String zc5Dig = null;
zc5Dig = zipCode.substring(0, 5);
cityStateZip.setZipCode(zc5Dig);
cityStateZip.setCity(city);
cityStateZip = cityStateZipDAO
.getCityStateZipByCityAndZipCode(cityStateZip);
if (cityStateZip == null) {
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionError(
"humansampleone.validation.zipCity", null, null));
}
return errors;
}
//bugzilla 1765 changes for city/state/zip validation
protected ActionMessages validateAll(HttpServletRequest request,
ActionMessages errors, BaseActionForm dynaForm) throws Exception {
String result;
String messageKey;
//bugzilla 2054 (missing validation)
errors = validateAccessionNumber(request, errors, dynaForm);
ProjectIdOrNameValidationProvider projIdValidator = new ProjectIdOrNameValidationProvider();
String projNum = (String) dynaForm.get("projectIdOrName");
if (!StringUtil.isNullorNill(projNum)) {
// project ID validation against database (reusing ajax
// validation logic)
result = projIdValidator.validate((String) dynaForm
.get("projectIdOrName"));
messageKey = "humansampleone.projectNumber";
if (result.startsWith("valid")) {
result = projIdValidator.validate((String) dynaForm
.get("projectNameOrId"));
if (result.equals("invalid")) {
ActionError error = new ActionError("errors.invalid",
getMessageForKey(messageKey), null);
errors.add(ActionMessages.GLOBAL_MESSAGE, error);
}
} else {
ActionError error = new ActionError("errors.invalid",
getMessageForKey(messageKey), null);
errors.add(ActionMessages.GLOBAL_MESSAGE, error);
}
}
String proj2Num = (String) dynaForm.get("project2IdOrName");
if (!StringUtil.isNullorNill(proj2Num)) {
result = projIdValidator.validate((String) dynaForm
.get("project2IdOrName"));
messageKey = "humansampleone.project2Number";
if (result.startsWith("valid")) {
result = projIdValidator.validate((String) dynaForm
.get("project2NameOrId"));
if (result.equals("invalid")) {
ActionError error = new ActionError("errors.invalid",
getMessageForKey(messageKey), null);
errors.add(ActionMessages.GLOBAL_MESSAGE, error);
}
} else {
ActionError error = new ActionError("errors.invalid",
getMessageForKey(messageKey), null);
errors.add(ActionMessages.GLOBAL_MESSAGE, error);
}
}
// organization ID (submitter) validation against database (reusing ajax
// validation logic)
//bugzilla 2069
//bugzilla 2531
OrganizationLocalAbbreviationValidationProvider orgLocalAbbreviationValidator = new OrganizationLocalAbbreviationValidationProvider();
result = orgLocalAbbreviationValidator.validate((String) dynaForm
.get("organizationLocalAbbreviation"),null);
messageKey = "humansampleone.provider.organization.localAbbreviation";
if (result.equals("invalid")) {
ActionError error = new ActionError("errors.invalid",
getMessageForKey(messageKey), null);
errors.add(ActionMessages.GLOBAL_MESSAGE, error);
}
boolean cityValid = true;
boolean zipValid = true;
boolean stateValid = true;
// state validation against database (reusing ajax validation logic
StateValidationProvider stateValidator = new StateValidationProvider();
result = stateValidator.validate((String) dynaForm.get("state"));
messageKey = "person.state";
if (result.equals("invalid")) {
stateValid = false;
ActionError error = new ActionError("errors.invalid",
getMessageForKey(messageKey), null);
errors.add(ActionMessages.GLOBAL_MESSAGE, error);
}
String messageKey1 = "person.city";
String messageKey2 = "person.zipCode";
String messageKey3 = "person.state";
// city validation against database (reusing ajax validation logic
CityValidationProvider cityValidator = new CityValidationProvider();
result = cityValidator.validate((String) dynaForm.get("city"));
if (result.equals("invalid")) {
cityValid = false;
ActionError error = new ActionError("errors.invalid",
getMessageForKey(messageKey1), null);
errors.add(ActionMessages.GLOBAL_MESSAGE, error);
}
// zip validation against database (reusing ajax validation logic
ZipValidationProvider zipValidator = new ZipValidationProvider();
result = zipValidator.validate((String) dynaForm.get("zipCode"));
if (result.equals("invalid")) {
zipValid = false;
ActionError error = new ActionError("errors.invalid",
getMessageForKey(messageKey2), null);
errors.add(ActionMessages.GLOBAL_MESSAGE, error);
}
if (cityValid && stateValid && zipValid) {
CityStateZipComboValidationProvider cityStateZipComboValidator = new CityStateZipComboValidationProvider();
result = cityStateZipComboValidator.validate((String) dynaForm
.get("city"), (String) dynaForm.get("state"),
(String) dynaForm.get("zipCode"));
// combination is invalid if result is invalid
if ("invalid".equals(result)) {
ActionError error = new ActionError("errors.combo.3.invalid",
getMessageForKey(messageKey1),
getMessageForKey(messageKey2),
getMessageForKey(messageKey3), null);
errors.add(ActionMessages.GLOBAL_MESSAGE, error);
}
}
return errors;
}
protected ActionForward getForward(ActionForward forward, String id,
String startingRecNo, String accessionNumber) {
ActionRedirect redirect = new ActionRedirect(forward);
// System.out.println("This is forward " + forward.getRedirect() + " "
// + forward.getPath());
if (id != null)
redirect.addParameter(ID, id);
if (startingRecNo != null)
redirect.addParameter("startingRecNo", startingRecNo);
if (accessionNumber != null)
redirect.addParameter("accessionNumber", accessionNumber);
// System.out.println("This is redirect " + redirect.getPath());
return redirect;
}
}