Skip to content
Snippets Groups Projects
GenerateCalendarAction.java 5.79 KiB
Newer Older
  • Learn to ignore specific revisions
  • HMoss's avatar
    HMoss committed
    package edu.ncsu.csc.itrust.action;
    
    import edu.ncsu.csc.itrust.dao.DAOFactory;
    import edu.ncsu.csc.itrust.dao.mysql.ApptTypeDAO;
    import edu.ncsu.csc.itrust.exception.DBException;
    import edu.ncsu.csc.itrust.exception.ITrustException;
    import edu.ncsu.csc.itrust.action.ViewMyApptsAction;
    import edu.ncsu.csc.itrust.action.ViewMyRecordsAction;
    import edu.ncsu.csc.itrust.beans.ApptBean;
    import edu.ncsu.csc.itrust.beans.OfficeVisitBean;
    import edu.ncsu.csc.itrust.beans.LabProcedureBean;
    import java.util.List;
    import java.sql.SQLException;
    import java.sql.Timestamp;
    import java.util.ArrayList;
    import java.util.Hashtable;
    import java.util.Calendar;
    
    /**
     * Action class for calendar.jsp
     *
     */
    public class GenerateCalendarAction {
    	private ViewMyApptsAction a_action;
    	private ViewMyRecordsAction r_action;
    	private List<ApptBean> send;
    	private ApptTypeDAO apptTypeDAO;
    	
    	/**
    	 * Set up defaults
    	 * 
    	 * @param factory The DAOFactory used to create the DAOs used in this action.
    	 * @param loggedInMID The MID of the user who is viewing the calendar
    	 */
    	public GenerateCalendarAction(DAOFactory factory, long loggedInMID) {
    		a_action = new ViewMyApptsAction(factory, loggedInMID);
    		r_action = new ViewMyRecordsAction(factory, loggedInMID);
    		send = new ArrayList<ApptBean>();
    		apptTypeDAO = factory.getApptTypeDAO();
    	}
    	
    	/**
    	 * Return the send request for an AppointmentBean
    	 * @return the send request for an AppointmentBean
    	 */
    	public List<ApptBean> getSend() {
    		return send;
    	}
    	
    	/**
    	 * Check appointments appearing on the calendar for conflicts 
    	 * with other appointments on the calendar. 
    	 * 
    	 * The array from this method is used to determine what appointments
    	 * will appear in bold on the calendar.
    	 * 
    	 * @return An array of items that are in conflict with other items.
    	 * @throws SQLException
    	 * @throws DBException 
    	 */
    	public boolean[] getConflicts() throws SQLException, DBException {
    		boolean conflicts[] = new boolean[send.size()];
    		for(int i=0; i<send.size(); i++) {
    			ApptBean ab = send.get(i);
    			long t = ab.getDate().getTime();
    			long m = apptTypeDAO.getApptType(ab.getApptType()).getDuration() * 60L * 1000L;
    			Timestamp time = new Timestamp(t+m);
    			for(int j=i+1; j<send.size(); j++) {
    				if(send.get(j).getDate().before(time)) {
    					conflicts[i] = true;
    					conflicts[j] = true;
    				}
    			}
    		}
    		return conflicts;
    	}
    	
    	/**
    	 * Creates a hash table with all of the Appointments to be 
    	 * displayed on the calendar for the month and year being viewed.
    	 * 
    	 * @param thisMonth The month of the calendar to be rendered
    	 * @param thisYear The year of the calendar to be rendered
    	 * @return A Hashtable containing the AppointmentBeans to be rendered
    	 * @throws SQLException
    	 * @throws DBException 
    	 */
    	public Hashtable<Integer, ArrayList<ApptBean>> getApptsTable(int thisMonth, int thisYear) throws SQLException, DBException {
    		List<ApptBean> appts = a_action.getAllMyAppointments();
    		Hashtable<Integer, ArrayList<ApptBean>> atable = new Hashtable<Integer, ArrayList<ApptBean>>();
    		Calendar a = Calendar.getInstance();
    		for(ApptBean b : appts) {
    			a.setTimeInMillis(b.getDate().getTime());
    			if(a.get(Calendar.MONTH) == thisMonth && a.get(Calendar.YEAR) == thisYear) {
    				if(!atable.containsKey(a.get(Calendar.DAY_OF_MONTH)))
    					atable.put(a.get(Calendar.DAY_OF_MONTH), new ArrayList<ApptBean>());
    				ArrayList<ApptBean> l = atable.get(a.get(Calendar.DAY_OF_MONTH));
    				l.add(b);
    				send.add(b);
    				atable.put(a.get(Calendar.DAY_OF_MONTH), l);
    			}
    		}
    		return atable;
    	}
    	
    	/**
    	 * Creates a hash table with all of the Office Visits to be 
    	 * displayed on the calendar for the month and year being viewed.
    	 * 
    	 * @param thisMonth The month of the calendar to be rendered
    	 * @param thisYear The year of the calendar to be rendered
    	 * @return A Hashtable containing the OfficeVisitBeans to be rendered
    	 * @throws SQLException
    	 */
    	public Hashtable<Integer, ArrayList<OfficeVisitBean>> getOfficeVisitsTable(int thisMonth, int thisYear) throws ITrustException {
    		List<OfficeVisitBean> officeVisits = r_action.getAllOfficeVisits();
    		Hashtable<Integer, ArrayList<OfficeVisitBean>> rtable = new Hashtable<Integer, ArrayList<OfficeVisitBean>>();
    		Calendar a = Calendar.getInstance();
    		for(OfficeVisitBean b : officeVisits) {
    			a.setTimeInMillis(b.getVisitDate().getTime());
    			if(a.get(Calendar.MONTH) == thisMonth && a.get(Calendar.YEAR) == thisYear) {
    				if(!rtable.containsKey(a.get(Calendar.DAY_OF_MONTH)))
    					rtable.put(a.get(Calendar.DAY_OF_MONTH), new ArrayList<OfficeVisitBean>());
    				ArrayList<OfficeVisitBean> l = rtable.get(a.get(Calendar.DAY_OF_MONTH));
    				l.add(b);
    				rtable.put(a.get(Calendar.DAY_OF_MONTH), l);
    			}
    		}
    		return rtable;
    	}
    	
    	/**
    	 * Creates a hash table with all of the lab procedures to be 
    	 * displayed on the calendar for the month and year being viewed.
    	 * 
    	 * @param thisMonth The month of the calendar to be rendered
    	 * @param thisYear The year of the calendar to be rendered
    	 * @return A Hashtable containing the LabProcedureBeans to be rendered
    	 * @throws SQLException
    	 */
    	public Hashtable<Integer, ArrayList<LabProcedureBean>> getLabProceduresTable(int thisMonth, int thisYear) throws ITrustException {
    		List<LabProcedureBean> procs = r_action.getLabs();
    		Hashtable<Integer, ArrayList<LabProcedureBean>> ptable = new Hashtable<Integer, ArrayList<LabProcedureBean>>();
    		Calendar a = Calendar.getInstance();
    		for(LabProcedureBean b : procs) {
    			a.setTimeInMillis(b.getTimestamp().getTime());
    			if(a.get(Calendar.MONTH) == thisMonth && a.get(Calendar.YEAR) == thisYear) {
    				if(!ptable.containsKey(a.get(Calendar.DAY_OF_MONTH)))
    					ptable.put(a.get(Calendar.DAY_OF_MONTH), new ArrayList<LabProcedureBean>());
    				ArrayList<LabProcedureBean> l = ptable.get(a.get(Calendar.DAY_OF_MONTH));
    				l.add(b);
    				ptable.put(a.get(Calendar.DAY_OF_MONTH), l);
    			}
    		}
    		return ptable;
    	}
    }