package org.teamstbf.yats.model;

import java.util.Set;

import org.teamstbf.yats.commons.core.UnmodifiableObservableList;
import org.teamstbf.yats.model.item.Event;
import org.teamstbf.yats.model.item.ReadOnlyEvent;
import org.teamstbf.yats.model.item.UniqueEventList;
import org.teamstbf.yats.model.item.UniqueEventList.DuplicateEventException;

/**
 * The API of the Model component.
 */
public interface Model {
	/** Adds the given Event */
	void addEvent(Event event) throws UniqueEventList.DuplicateEventException;

	/** Deletes the given Event. */
	void deleteEvent(ReadOnlyEvent target) throws UniqueEventList.EventNotFoundException;

	/**
	 * Returns the filtered event list as an
	 * {@code UnmodifiableObservableList<ReadOnlyEvent>}
	 */
	UnmodifiableObservableList<ReadOnlyEvent> getFilteredTaskList();

	/** Returns the TaskManager */
	ReadOnlyTaskManager getTaskManager();

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

	/**
	 * Updates the event located at {@code filteredEventListIndex} with
	 * {@code editedEvent}.
	 *
	 * @throws DuplicateEventException
	 *             if updating the event's details causes the event to be
	 *             equivalent to another existing event in the list.
	 * @throws IndexOutOfBoundsException
	 *             if {@code filteredEventListIndex} < 0 or >= the size of the
	 *             filtered list.
	 */
	void updateEvent(int filteredEventListIndex, ReadOnlyEvent editedEvent)
			throws UniqueEventList.DuplicateEventException;

	/**
	 * Updates the filter of the filtered event list to filter by the given
	 * keywords
	 */
	void updateFilteredEventList(Set<String> keywords);

	/** Updates the filter of the filtered event list to show all events */
	void updateFilteredListToShowAll();

	// @@author A0139448U
	/*
	 * force saves the current state of the taskmanager for use in changing save
	 * location to create a file in new location
	 */
	void saveTaskManager();

	// @@author A0138952W
	/**
	 * Updates the filter of the filtered event list to show specified location
	 */
	void updateFilteredListToShowLocation(Set<String> keywords);

	/** Updates the filter of the filtered event list to show specified date */
	void updateFilteredListToShowEndTime(Set<String> keywords);

	/**
	 * Updates the filter of the filtered event list to show specified start
	 * time
	 */
	void updateFilteredListToShowStartTime(Set<String> keywords);

	/**
	 * Updates the filter of the filtered event list to show specified deadline
	 */
	void updateFilteredListToShowDeadline(Set<String> keywords)

	/** Updates the filter of the filtered event list to show done tasks */
	void updateFilteredListToShowDone(Set<String> keywords);

	/** Updates the filter of the filtered event list to show specified tags */
	void updateFilteredListToShowTags(Set<String> keywords);

	/**
	 * Updates the filter of the filtered event list to search for all tasks
	 * including description with the specified keywords
	 */
	void updateFilteredListToFindAll(Set<String> keywords);

	// @@author A0102778B
	/**
	 * Method to get the previous state (undo command) of the task manager
	 */
	void getPreviousState();

	/**
	 * Method to get the next state (redo command) of the task manager
	 */
	void getNextState();

	/**
	 * Method to check if the undo stack is empty - nothing to undo
	 */
	boolean checkEmptyUndoStack();

	/**
	 * Method to check if the redo stack is empty - nothing to redo
	 */
	boolean checkEmptyRedoStack();

}

@@ -2623,16 +2623,17 @@
 eywords)
+;
 %0A%0A%09/** U

Fix syntax error