package calendar; import java.util.ArrayList; import java.util.Calendar; import javax.naming.directory.InvalidAttributesException; /** * @author Adam Barrell * @date 22/02/2012 * * @brief * This class stores a collection of Events. Operations such as * getting and setting multiple events can be performed by this class. */ public class EventsCollection extends Collection<Event> { /** * Default constructor creates a new ArrayList to hold only events. */ public EventsCollection() { m_data = new ArrayList<Event>(); } /** * This method returns a collection of events which meet the * criteria of a specific calendar day. * @param date A valid calendar date * @return Returns an ArrayList holding objects of type event. */ public ArrayList<Event> GetEventsByDay(Calendar date) { ArrayList<Event> events = new ArrayList<Event>(); for(int i = 0; i < m_data.size(); i++) { Event e = m_data.get(i); Calendar edate = e.GetStart_date(); if(edate.get(Calendar.DAY_OF_MONTH) == date.get(Calendar.DAY_OF_MONTH) && edate.get(Calendar.MONTH) == date.get(Calendar.MONTH) && edate.get(Calendar.YEAR) == date.get(Calendar.YEAR) ) events.add(e); //check if it repeats else if(date.compareTo(edate) >= 0) { if(e.GetRepetition() == Event.REPEATING_DAILY) {//daily events.add(e); } else if(e.GetRepetition() == Event.REPEATING_WORKING_DAYS && date.get(Calendar.DAY_OF_WEEK) >= Calendar.MONDAY && date.get(Calendar.DAY_OF_WEEK) <= Calendar.FRIDAY) { //working days events.add(e); } else if(e.GetRepetition() == Event.REPEATING_WEEKENDS && (date.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || date.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)) { //weekends events.add(e); } else if(e.GetRepetition() == Event.REPEATING_WEEKLY && date.get(Calendar.DAY_OF_WEEK) == edate.get(Calendar.DAY_OF_WEEK)) {//weekly events.add(e); } else if(e.GetRepetition() == Event.REPEATING_TWO_WEEKS && date.get(Calendar.DAY_OF_WEEK) == edate.get(Calendar.DAY_OF_WEEK) && date.get(Calendar.WEEK_OF_YEAR)%2 == edate.get(Calendar.WEEK_OF_YEAR)%2) {//two weeks events.add(e); } else if(e.GetRepetition() == Event.REPEATING_FOUR_WEEKS && date.get(Calendar.DAY_OF_WEEK) == edate.get(Calendar.DAY_OF_WEEK) && date.get(Calendar.WEEK_OF_YEAR)%4 == edate.get(Calendar.WEEK_OF_YEAR)%4) {//four weeks events.add(e); } else if(e.GetRepetition() == Event.REPEATING_MONTHLY && date.get(Calendar.DAY_OF_MONTH) == edate.get(Calendar.DAY_OF_MONTH)) {//monthly events.add(e); } else if(e.GetRepetition() == Event.REPEATING_YEARLY && date.get(Calendar.DAY_OF_MONTH) == edate.get(Calendar.DAY_OF_MONTH) && date.get(Calendar.MONTH) == edate.get(Calendar.MONTH)) {//yearly events.add(e); } } } return events; } /** * This method returns the index at which an event is held in an ArrayList * using the ID of the event. * @param id The ID of a particular event. * @return Returns an integer representing the index position the event is * stored * at in the ArrayList. * @throws InvalidAttributesException Throws exception if the EventID does * not exist. */ public int GetEventIndexById(int id) throws InvalidAttributesException { for(int i = 0; i < m_data.size(); i++) { if(m_data.get(i).GetId() == id) { return i; } } throw new InvalidAttributesException( "The requested EventID does not exists"); } /** * This method returns an event which matches an event * object's ID held in the EventCollection array * @param id The ID of the event to be returned * @return The event object which matches specified ID * @throws InvalidAttributesException If no ID is matched to any event */ public Event GetEventById(int id) throws InvalidAttributesException { for(int i = 0; i < m_data.size(); i++) { if(m_data.get(i).GetId() == id) { return m_data.get(i); } } throw new InvalidAttributesException("Event not found"); } public static void main(String args[]) { EventsCollection collection = new EventsCollection(); EventsCollection emptyCollection = new EventsCollection(); Calendar calStart = Calendar.getInstance(); Calendar calEnd = Calendar.getInstance(); Calendar calNoEvents = Calendar.getInstance(); calStart.set(2012, 12, 10, 12, 00); calEnd.set(2012, 12, 11, 12, 00); calNoEvents.set(2012, 12, 12, 12, 00); /* Test GetEventsByDay(date) */ try { collection.Add(new Event(1, "My Birthday", calStart, calEnd, "The day of my birthday", 0)); } catch (Exception e) { System.out.println(e.getMessage()); } // Test day populated with one event ArrayList<Event> eventArray = collection.GetEventsByDay(calStart); if (eventArray.size()==1) { System.out.println("Pass: Event successfully returned " + "for set date"); } else { System.out.println("Fail: Event could not be returned " + "for set date"); } // Test day with no events ArrayList<Event> noEventArray = emptyCollection.GetEventsByDay (calNoEvents); if (noEventArray.size()==0) { System.out.println("Pass: No events found for set day"); } else { System.out.println("Fail: Some events were found when no " + "events were set"); } /* Test GetEventIndexByID(id) */ // Test with valid ID of existing event try { collection.GetEventIndexById(1); System.out.println("Pass: Event returned with matching ID '1'"); } catch (InvalidAttributesException e) { System.out.println("Failed: The event ID '1' does exist but " + "has not been returned"); } // Test with an invalid ID of an event which does not exist try { collection.GetEventIndexById(2); System.out.println("Fail: No event has the ID '2' but an event " + "has been returned"); } catch (InvalidAttributesException e) { System.out.println("Pass: "+e.getMessage()); } /* Test GetEventByID(id) */ // Test with a valid ID of existing event try { collection.GetEventById(1); System.out.println("Pass: Event with valid ID found"); } catch (InvalidAttributesException e) { System.out.println("Fail: "+e.getMessage()); } // Test with an invalid ID of an event which does not exist try { collection.GetEventById(2); System.out.println("Fail: No event has the ID '2' but an event " + "has been returned"); } catch (InvalidAttributesException e) { System.out.println("Pass: "+e.getMessage()); } } }