EditPatientAction.java 4.96 KiB
package edu.ncsu.csc.itrust.action;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import edu.ncsu.csc.itrust.action.base.PatientBaseAction;
import edu.ncsu.csc.itrust.beans.Email;
import edu.ncsu.csc.itrust.beans.PatientBean;
import edu.ncsu.csc.itrust.beans.PatientHistoryBean;
import edu.ncsu.csc.itrust.dao.DAOFactory;
import edu.ncsu.csc.itrust.dao.mysql.AuthDAO;
import edu.ncsu.csc.itrust.dao.mysql.PatientDAO;
import edu.ncsu.csc.itrust.dao.mysql.PersonnelDAO;
import edu.ncsu.csc.itrust.exception.DBException;
import edu.ncsu.csc.itrust.exception.FormValidationException;
import edu.ncsu.csc.itrust.exception.ITrustException;
import edu.ncsu.csc.itrust.validate.PatientValidator;
import edu.ncsu.csc.itrust.EmailUtil;
/**
* Edits a patient Used by editPatient.jsp
*
*
*/
public class EditPatientAction extends PatientBaseAction {
private PatientValidator validator = new PatientValidator();
private PatientDAO patientDAO;
private PersonnelDAO personnelDAO;
private AuthDAO authDAO;
private long loggedInMID;
private EmailUtil emailutil;
/**
* The super class validates the patient id
*
* @param factory The DAOFactory used to create the DAOs for this action.
* @param loggedInMID The MID of the user who is authorizing this action.
* @param pidString The MID of the patient being edited.
* @throws ITrustException
*/
public EditPatientAction(DAOFactory factory, long loggedInMID, String pidString) throws ITrustException {
super(factory, pidString);
this.patientDAO = factory.getPatientDAO();
this.personnelDAO = factory.getPersonnelDAO();
this.authDAO = factory.getAuthDAO();
this.loggedInMID = loggedInMID;
emailutil = new EmailUtil(factory);
}
/**
* Takes the information out of the PatientBean param and updates the patient's information
*
* @param p
* the new patient information
* @throws ITrustException
* @throws FormValidationException
*/
public void updateInformation(PatientBean p) throws ITrustException, FormValidationException {
p.setMID(pid); // for security reasons
validator.validate(p);
patientDAO.editPatient(p, loggedInMID);
emailutil.sendEmail(makeEmail());
}
/**
* Returns a PatientBean for the patient
*
* @return the PatientBean
* @throws DBException
*/
public PatientBean getPatient() throws DBException {
return patientDAO.getPatient(this.getPid());
}
/**
* Creates and e-mail to inform the patient that their information has been updated.
*
* @return the email with the notice
* @throws DBException
*/
private Email makeEmail() throws DBException{
Email email = new Email();
List<PatientBean> reps = patientDAO.getRepresenting(pid);
PatientBean pb = patientDAO.getPatient(pid);
List<String> toAddrs = new ArrayList<String>();
toAddrs.add(pb.getEmail());
for (PatientBean r: reps) {
toAddrs.add(r.getEmail());
}
email.setFrom("no-reply@itrust.com");
email.setToList(toAddrs); // patient and personal representative
email.setSubject(String.format("Patient Information Updated"));
email.setBody("Dear " + pb.getFullName() + ",\n\tYour patient record information has been updated. " +
"Please login to iTrust to see who has viewed your records.");
return email;
}
/**
* The DateOfDeactivationStr of the PatientBean when not null indicates that the user has been deactivated.
* @throws DBException
*/
public void deactivate() throws DBException{
PatientBean p=patientDAO.getPatient(this.getPid());
p.setMID(pid);
p.setDateOfDeactivationStr(new SimpleDateFormat("MM/dd/yyyy").format(Calendar.getInstance().getTime()));
patientDAO.editPatient(p, loggedInMID);
patientDAO.removeAllRepresented(pid);
patientDAO.removeAllRepresentee(pid);
}
/**
* The DateOfDeactivationStr of the PatientBean is null when the patient is activated
* @throws DBException
*/
public void activate() throws DBException{
PatientBean p=patientDAO.getPatient(this.getPid());
p.setMID(pid);
p.setDateOfDeactivationStr(null);
patientDAO.editPatient(p, loggedInMID);
}
public boolean hasHistory() throws DBException {
return patientDAO.hasHistory(this.getPid());
}
public List<PatientHistoryBean> getHistory() throws DBException {
return patientDAO.getPatientHistory(this.getPid());
}
public String getEmployeeName(long mid) throws DBException, ITrustException {
return personnelDAO.getName(mid);
}
public boolean isDependent() {
boolean isDependent = false;
try {
return authDAO.isDependent(pid);
} catch (DBException e) {
//If a DBException occurs print a stack trace and return false
e.printStackTrace();
}
return isDependent;
}
public boolean setDependent(boolean dependency) {
try {
authDAO.setDependent(pid, dependency);
if (dependency)
patientDAO.removeAllRepresented(pid);
} catch (DBException e) {
//If a DBException occurs print a stack trace and return false
e.printStackTrace();
return false;
}
return true;
}
}