Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Event Management #61

Merged
merged 32 commits into from
Sep 25, 2018
Merged
Show file tree
Hide file tree
Changes from 15 commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
acf9d7d
Add Event class and associated parameter classes
Kratious Sep 24, 2018
11d65cb
Add tests for Event Name and Date classes
Kratious Sep 24, 2018
15a9a93
Add Event operations to AddressBook
Kratious Sep 24, 2018
b807085
Add Event operations to ModelManager.java and Model.java
Kratious Sep 24, 2018
4ad9b13
Add file path for eventlist.xml in UserPrefs.java
Kratious Sep 24, 2018
fa81184
Update Event class and associated Id class
Kratious Sep 24, 2018
f0953e4
Add getEventListFilePath() method to Storage.java and AddressBookStor…
Kratious Sep 24, 2018
a714c6a
Add XmlAdaptedEvent.java
Kratious Sep 24, 2018
f6ef1a3
Merge branch 'master' of https://github.com/CS2103-AY1819S1-W16-2/mai…
Kratious Sep 24, 2018
e30bdd6
Updated Description.java to take in any values instead of just alphan…
Kratious Sep 24, 2018
619e949
Add sample events for SampleDataUtil.java and getSampleAddressBook() …
Kratious Sep 24, 2018
15579d8
Rectify delimiter error from '-' to ':' in Time.java
Kratious Sep 24, 2018
e5b053a
Revert eventListFilePath in AddressBookStorage.java and Storage.java
Kratious Sep 24, 2018
b2ed54b
Add list of Event objects to XmlSerializableAddressBook.java
Kratious Sep 24, 2018
b9582d2
Revert UserPrefs.java to remove eventListFilePath
Kratious Sep 24, 2018
c9fb348
Update AddressBookTest.java and AddCommandTest.java to reflect change…
Kratious Sep 24, 2018
321ba9f
Add Event tests NameTest.java and TimeTest.java
Kratious Sep 24, 2018
82e5591
Rectify mistakes in Event.java equals method, Date.java and Time.java…
Kratious Sep 24, 2018
8067064
Add tests and test utilities for Event.java, Description.java and Loc…
Kratious Sep 24, 2018
c6680c7
Tweak comments indentation in Date.java and Time.java
Kratious Sep 24, 2018
77b58cb
Rectify import order and missing java doc in EventTest.java, EventBui…
Kratious Sep 24, 2018
900339b
Add tests for UniqueEventList.java
Kratious Sep 24, 2018
816d46f
Add tests for XMLAdaptedEvent.java
Kratious Sep 24, 2018
04cfda9
Update tests for ModelManager.java to include Events
Kratious Sep 24, 2018
0d4608d
Modify YOUTH TypicalEvent tags
Kratious Sep 24, 2018
c6a282c
Remove Id.java and Id paramater in Event.java
Kratious Sep 24, 2018
49ab185
Add Event tests for XmlSerializableAddressBookTest.java and associati…
Kratious Sep 24, 2018
2b09b83
Modify AddressBook hashCode() method
Kratious Sep 24, 2018
ac0116c
Modify XML test files for XmlSeralizableAddressBook.java
Kratious Sep 24, 2018
fea1bd8
Modify YOUTH event location
Kratious Sep 24, 2018
d9b5ce2
Change appTitle in Config.java to SocialCare
Kratious Sep 25, 2018
4104d14
Update ConfigTest appTitle
Kratious Sep 25, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 59 additions & 3 deletions src/main/java/seedu/address/model/AddressBook.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import java.util.List;

import javafx.collections.ObservableList;
import seedu.address.model.event.Event;
import seedu.address.model.event.UniqueEventList;
import seedu.address.model.person.Person;
import seedu.address.model.person.UniquePersonList;

Expand All @@ -15,6 +17,7 @@
public class AddressBook implements ReadOnlyAddressBook {

private final UniquePersonList persons;
private final UniqueEventList events;

/*
* The 'unusual' code block below is an non-static initialization block, sometimes used to avoid duplication
Expand All @@ -25,6 +28,7 @@ public class AddressBook implements ReadOnlyAddressBook {
*/
{
persons = new UniquePersonList();
events = new UniqueEventList();
}

public AddressBook() {}
Expand All @@ -47,13 +51,22 @@ public void setPersons(List<Person> persons) {
this.persons.setPersons(persons);
}

/**
* Replaces the contents of the event list with {@code events}.
* {@code events} must not contain duplicate events.
*/
public void setEvents(List<Event> events) {
this.events.setEvents(events);
}

/**
* Resets the existing data of this {@code AddressBook} with {@code newData}.
*/
public void resetData(ReadOnlyAddressBook newData) {
requireNonNull(newData);

setPersons(newData.getPersonList());
setEvents(newData.getEventList());
}

//// person-level operations
Expand All @@ -66,6 +79,14 @@ public boolean hasPerson(Person person) {
return persons.contains(person);
}

/**
* Returns true if an event with the same identity as {@code event} exists in the address book.
*/
public boolean hasEvent(Event event) {
requireNonNull(event);
return events.contains(event);
}

/**
* Adds a person to the address book.
* The person must not already exist in the address book.
Expand All @@ -74,6 +95,14 @@ public void addPerson(Person p) {
persons.add(p);
}

/**
* Adds an event to the address book.
* The event must not already exist in the address book.
*/
public void addEvent(Event e) {
events.add(e);
}

/**
* Replaces the given person {@code target} in the list with {@code editedPerson}.
* {@code target} must exist in the address book.
Expand All @@ -85,6 +114,17 @@ public void updatePerson(Person target, Person editedPerson) {
persons.setPerson(target, editedPerson);
}

/**
* Replaces the given event {@code target} in the list with {@code editedEvent}.
* {@code target} must exist in the address book.
* The event identity of {@code editedEvent} must not be the same as another existing event in the address book.
*/
public void updateEvent(Event target, Event editedEvent) {
requireNonNull(editedEvent);

events.setEvent(target, editedEvent);
}

/**
* Removes {@code key} from this {@code AddressBook}.
* {@code key} must exist in the address book.
Expand All @@ -93,11 +133,20 @@ public void removePerson(Person key) {
persons.remove(key);
}

/**
* Removes {@code key} from this {@code AddressBook}.
* {@code key} must exist in the address book.
*/
public void removeEvent(Event key) {
events.remove(key);
}

//// util methods

@Override
public String toString() {
return persons.asUnmodifiableObservableList().size() + " persons";
return persons.asUnmodifiableObservableList().size() + " persons. "
+ events.asUnmodifiableObservableList().size() + " events.";
// TODO: refine later
}

Expand All @@ -106,15 +155,22 @@ public ObservableList<Person> getPersonList() {
return persons.asUnmodifiableObservableList();
}

@Override
public ObservableList<Event> getEventList() {
return events.asUnmodifiableObservableList();
}

@Override
public boolean equals(Object other) {
return other == this // short circuit if same object
|| (other instanceof AddressBook // instanceof handles nulls
&& persons.equals(((AddressBook) other).persons));
&& persons.equals(((AddressBook) other).persons)
&& events.equals(((AddressBook) other).events));
}

@Override
public int hashCode() {
return persons.hashCode();
return persons.hashCode() + events.hashCode();
// TODO: Improve way to hashCode AddressBook with multiple lists
}
}
37 changes: 37 additions & 0 deletions src/main/java/seedu/address/model/Model.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.util.function.Predicate;

import javafx.collections.ObservableList;
import seedu.address.model.event.Event;
import seedu.address.model.person.Person;

/**
Expand All @@ -12,6 +13,9 @@ public interface Model {
/** {@code Predicate} that always evaluate to true */
Predicate<Person> PREDICATE_SHOW_ALL_PERSONS = unused -> true;

/** {@code Predicate} that always evaluate to true */
Predicate<Event> PREDICATE_SHOW_ALL_EVENTS = unused -> true;

/** Clears existing backing model and replaces with the provided new data. */
void resetData(ReadOnlyAddressBook newData);

Expand Down Expand Up @@ -42,6 +46,30 @@ public interface Model {
*/
void updatePerson(Person target, Person editedPerson);

/**
* Returns true if an event with the same identity as {@code event} exists in the address book.
*/
boolean hasEvent(Event event);

/**
* Deletes the given event.
* The event must exist in the address book.
*/
void deleteEvent(Event target);

/**
* Adds the given event.
* {@code event} must not already exist in the address book.
*/
void addEvent(Event event);

/**
* Replaces the given event {@code target} with {@code editedEvent}.
* {@code target} must exist in the address book.
* The event identity of {@code editedEvent} must not be the same as another existing event in the address book.
*/
void updateEvent(Event target, Event editedEvent);

/** Returns an unmodifiable view of the filtered person list */
ObservableList<Person> getFilteredPersonList();

Expand All @@ -51,6 +79,15 @@ public interface Model {
*/
void updateFilteredPersonList(Predicate<Person> predicate);

/** Returns an unmodifiable view of the filtered event list */
ObservableList<Event> getFilteredEventList();

/**
* Updates the filter of the filtered event list to filter by the given {@code predicate}.
* @throws NullPointerException if {@code predicate} is null.
*/
void updateFilteredEventList(Predicate<Event> predicate);

/**
* Returns true if the model has previous address book states to restore.
*/
Expand Down
50 changes: 48 additions & 2 deletions src/main/java/seedu/address/model/ModelManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import seedu.address.commons.core.ComponentManager;
import seedu.address.commons.core.LogsCenter;
import seedu.address.commons.events.model.AddressBookChangedEvent;
import seedu.address.model.event.Event;
import seedu.address.model.person.Person;

/**
Expand All @@ -22,6 +23,7 @@ public class ModelManager extends ComponentManager implements Model {

private final VersionedAddressBook versionedAddressBook;
private final FilteredList<Person> filteredPersons;
private final FilteredList<Event> filteredEvents;

/**
* Initializes a ModelManager with the given addressBook and userPrefs.
Expand All @@ -34,6 +36,7 @@ public ModelManager(ReadOnlyAddressBook addressBook, UserPrefs userPrefs) {

versionedAddressBook = new VersionedAddressBook(addressBook);
filteredPersons = new FilteredList<>(versionedAddressBook.getPersonList());
filteredEvents = new FilteredList<>(versionedAddressBook.getEventList());
}

public ModelManager() {
Expand Down Expand Up @@ -83,7 +86,34 @@ public void updatePerson(Person target, Person editedPerson) {
indicateAddressBookChanged();
}

//=========== Filtered Person List Accessors =============================================================
@Override
public boolean hasEvent(Event event) {
requireNonNull(event);
return versionedAddressBook.hasEvent(event);
}

@Override
public void deleteEvent(Event target) {
versionedAddressBook.removeEvent(target);
indicateAddressBookChanged();
}

@Override
public void addEvent(Event event) {
versionedAddressBook.addEvent(event);
updateFilteredEventList(PREDICATE_SHOW_ALL_EVENTS);
indicateAddressBookChanged();
}

@Override
public void updateEvent(Event target, Event editedEvent) {
requireAllNonNull(target, editedEvent);

versionedAddressBook.updateEvent(target, editedEvent);
indicateAddressBookChanged();
}

//=========== Filtered Person and Event List Accessors =============================================================

/**
* Returns an unmodifiable view of the list of {@code Person} backed by the internal list of
Expand All @@ -100,6 +130,21 @@ public void updateFilteredPersonList(Predicate<Person> predicate) {
filteredPersons.setPredicate(predicate);
}

/**
* Returns an unmodifiable view of the list of {@code Event} backed by the internal list of
* {@code versionedAddressBook}
*/
@Override
public ObservableList<Event> getFilteredEventList() {
return FXCollections.unmodifiableObservableList(filteredEvents);
}

@Override
public void updateFilteredEventList(Predicate<Event> predicate) {
requireNonNull(predicate);
filteredEvents.setPredicate(predicate);
}

//=========== Undo/Redo =================================================================================

@Override
Expand Down Expand Up @@ -144,7 +189,8 @@ public boolean equals(Object obj) {
// state check
ModelManager other = (ModelManager) obj;
return versionedAddressBook.equals(other.versionedAddressBook)
&& filteredPersons.equals(other.filteredPersons);
&& filteredPersons.equals(other.filteredPersons)
&& filteredEvents.equals(other.filteredEvents);
}

}
7 changes: 7 additions & 0 deletions src/main/java/seedu/address/model/ReadOnlyAddressBook.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package seedu.address.model;

import javafx.collections.ObservableList;
import seedu.address.model.event.Event;
import seedu.address.model.person.Person;

/**
Expand All @@ -14,4 +15,10 @@ public interface ReadOnlyAddressBook {
*/
ObservableList<Person> getPersonList();

/**
* Returns an unmodifiable view of the events list.
* This list will not contain any duplicate persons.
*/
ObservableList<Event> getEventList();

}
Loading