Skip to content
Snippets Groups Projects
PrescriptionReportAction.java 6.01 KiB
Newer Older
  • Learn to ignore specific revisions
  • HMoss's avatar
    HMoss committed
    package edu.ncsu.csc.itrust.action;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import edu.ncsu.csc.itrust.ParameterUtil;
    import edu.ncsu.csc.itrust.action.base.PatientBaseAction;
    import edu.ncsu.csc.itrust.beans.OfficeVisitBean;
    import edu.ncsu.csc.itrust.beans.PatientBean;
    import edu.ncsu.csc.itrust.beans.PrescriptionReportBean;
    import edu.ncsu.csc.itrust.dao.DAOFactory;
    import edu.ncsu.csc.itrust.dao.mysql.OfficeVisitDAO;
    import edu.ncsu.csc.itrust.dao.mysql.PatientDAO;
    import edu.ncsu.csc.itrust.dao.mysql.PrescriptionReportDAO;
    import edu.ncsu.csc.itrust.exception.DBException;
    import edu.ncsu.csc.itrust.exception.FormValidationException;
    import edu.ncsu.csc.itrust.exception.NoHealthRecordsException;
    import edu.ncsu.csc.itrust.exception.ITrustException;
    
    /**
     * Handles Prescription Reports for the given pid Used by hcp-uap/getPrescriptionReport.jsp,
     * hcp-uap/viewPrescriptionRecord.jsp, patient/getMyPrescriptionReport.jsp, &
     * patient/viewMyPrescriptionRecord.jsp
     * 
     * 
     */
    public class PrescriptionReportAction extends PatientBaseAction {
    	private boolean isRepresenting = false;
    	private OfficeVisitDAO ovDAO;
    	private PrescriptionReportDAO prDAO;
    	private PatientDAO patientDAO;
    	private long loggedInMID;
    
    	/**
    	 * Super class validates pidString
    	 * 
    	 * @param factory The DAOFactory used to create the DAOs used in this action.
    	 * @param loggedInMID The MID of the user who is making a prescription report.
    	 * @param pidString The MID of the patient in question.
    	 * @throws ITrustException
    	 * @throws DBException
    	 * @throws NoHealthRecordsException
    	 */
    	public PrescriptionReportAction(DAOFactory factory, long loggedInMID, String pidString)
    			throws ITrustException, DBException, NoHealthRecordsException {
    		super(factory, pidString);
    		this.ovDAO = factory.getOfficeVisitDAO();
    		this.patientDAO = factory.getPatientDAO();
    		this.prDAO = factory.getPrescriptionReportDAO();
    		this.loggedInMID = loggedInMID;
    	}
    
    	/**
    	 * Takes the patient's representee as a param and returns it as a long if the patient represents the input
    	 * param
    	 * 
    	 * @param input
    	 *            the patient's representee mid
    	 * @return representee's mid as a long
    	 * @throws ITrustException
    	 */
    	public long representPatient(String input) throws ITrustException {
    		try {
    			long reppeeMID = Long.valueOf(input);
    			if (patientDAO.represents(loggedInMID, reppeeMID)) {
    				loggedInMID = reppeeMID;
    				pid = reppeeMID;
    				isRepresenting = true;
    				return reppeeMID;
    			} else
    				throw new ITrustException("You do not represent patient " + reppeeMID);
    		} catch (NumberFormatException e) {
    			throw new ITrustException("MID is not a number");
    		}
    	}
    
    	/**
    	 * Returns a list of all office visits for the pid
    	 * 
    	 * @return list of OfficeVisitBeans for the pid
    	 * @throws DBException
    	 */
    	public List<OfficeVisitBean> getAllOfficeVisits() throws DBException {
    		return ovDAO.getAllOfficeVisits(pid);
    	}
    
    	/**
    	 * Used by the JSP, passes a Map from the html form and a list of OfficeVisitBeans Returns a list of
    	 * PrescriptionReportBeans
    	 * 
    	 * @param params A java.util.HashMap containing the parameter map.
    	 * @param officeVisits A java.util.List of OfficeVisitBeans for the visits.
    	 * @return list of PrescriptionReportBeans
    	 * @throws DBException
    	 */
    	public List<PrescriptionReportBean> getPrescriptionReports(Map<String, String> params, List<OfficeVisitBean> officeVisits)
    			throws DBException {
    		HashMap<String, String> myParams = ParameterUtil.convertMap(params);
    		List<Long> ovIDs = new ArrayList<Long>();
    		for (int i = 0; i < officeVisits.size(); i++) {
    			try {
    				if (params.get("ovOff" + i) != null) {
    					int offset = Integer.valueOf(myParams.get("ovOff" + i));
    					ovIDs.add(officeVisits.get(offset).getVisitID());
    				}
    			} catch (NumberFormatException e) {
    				// just skip it
    			}
    		}
    		if (ovIDs.size() == 0)
    			return new ArrayList<PrescriptionReportBean>();
    
    		return prDAO.byOfficeVisitAndPatient(ovIDs, pid);
    	}
    
    	/**
    	 * Returns a PatientBean for the pid
    	 * 
    	 * @return PatientBean
    	 * @throws DBException
    	 */
    	public PatientBean getPatient() throws DBException {
    		return patientDAO.getPatient(pid);
    	}
    
    	/**
    	 * Used by the JSP, which passes the param map from the html form and a list of OfficeVisitBeans Returns a
    	 * string that will be used to create a new url. The JSP will pull params from this url to create the
    	 * prescription report.
    	 * 
    	 * @param paramMap A java.util.HashMap of the parameters.
    	 * @param officeVisits A java.util.List of OfficeVisitBeans.
    	 * @return the string that will be used in the new url
    	 * @throws FormValidationException
    	 * @throws DBException
    	 */
    	@SuppressWarnings("rawtypes")
    	public String getQueryString(Map paramMap, List<OfficeVisitBean> officeVisits)
    			throws FormValidationException, DBException {
    		HashMap<String, String> myParams = ParameterUtil.convertMap(paramMap);
    		List<Integer> ovOffsets = checkOfficeVisits(myParams, officeVisits);
    		String queryString = buildQueryString(ovOffsets);
    		if (isRepresenting)
    			queryString += "&rep=" + pid;
    		return queryString;
    	}
    
    	/**
    	 * Checks office visits
    	 * 
    	 * @param myParams list of parameters
    	 * @param officeVisits list of office visits
    	 * @return Returns a java.util.ArrayList of Integers for the given office visits.
    	 */
    	private ArrayList<Integer> checkOfficeVisits(HashMap<String, String> myParams,
    			List<OfficeVisitBean> officeVisits) {
    		ArrayList<Integer> list = new ArrayList<Integer>();
    		for (int i = 0; i < officeVisits.size(); i++) {
    			if ("on".equals(myParams.get("ov" + i)))
    				list.add(i);
    		}
    		return list;
    	}
    
    	/**
    	 * Builds a query string for office visits
    	 * 
    	 * @param ovOffsets offsets for the office visits
    	 * @return A SQL query in a Java String.
    	 */
    	private String buildQueryString(List<Integer> ovOffsets) {
    		int n = ovOffsets.size();
    		if (n == 0)
    			return "";
    		String str = "&n=" + n;
    		StringBuffer buf = new StringBuffer();
    		for (int i = 0; i < ovOffsets.size(); i++) {
    			buf.append("&ovOff" + i + "=" + ovOffsets.get(i));
    		}
    		str += buf.toString();
    		return str;
    	}
    }