Skip to content

Commit

Permalink
Merge bf3cde2 into e20d14f
Browse files Browse the repository at this point in the history
  • Loading branch information
ZuoZhuolin committed Oct 30, 2016
2 parents e20d14f + bf3cde2 commit 7a9e04b
Show file tree
Hide file tree
Showing 26 changed files with 276 additions and 106 deletions.
10 changes: 5 additions & 5 deletions src/main/java/seedu/taskell/logic/commands/AddCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ public class AddCommand extends Command {
public static final String COMMAND_WORD = "add";

public static final String MESSAGE_USAGE = COMMAND_WORD + ": Adds a task to the task manager. "
+ "Parameters: DESCRIPTION by/on[DATE] from[START_TIME] to[END_TIME] [p/PRIORITY] [#TAG]...\n"
+ "Parameters: DESCRIPTION by/on[DATE] from[START_TIME] to[END_TIME] [p/PRIORITY] [r/daily] [#TAG]...\n"
+ "Example: " + COMMAND_WORD
+ " go for meeting on 1-1-2100 from 12.30AM to 12.45AM p/3 #work";
+ " go for meeting on 1-1-2100 from 12.30AM to 12.45AM p/3 r/daily #work";

public static final String MESSAGE_SUCCESS = "New task added: %1$s";
public static final String MESSAGE_DUPLICATE_TASK = "This task already exists in the task manager";
Expand All @@ -33,7 +33,7 @@ public class AddCommand extends Command {
* @throws IllegalValueException if any of the raw values are invalid
*/

public AddCommand(String description, String taskType, String startDate, String endDate, String startTime, String endTime, String taskPriority, Set<String> tags)
public AddCommand(String description, String taskType, String startDate, String endDate, String startTime, String endTime, String taskPriority, String recurringType, Set<String> tags)
throws IllegalValueException {
final Set<Tag> tagSet = new HashSet<>();
for (String tagName : tags) {
Expand All @@ -42,10 +42,10 @@ public AddCommand(String description, String taskType, String startDate, String

switch (taskType) {
case Task.FLOATING_TASK:
this.toAdd = new FloatingTask(description, taskPriority, TaskStatus.INCOMPLETE, new UniqueTagList(tagSet));
this.toAdd = new FloatingTask(description, taskPriority, recurringType, TaskStatus.INCOMPLETE, new UniqueTagList(tagSet));
break;
case Task.EVENT_TASK:
this.toAdd = new EventTask(description, startDate, endDate, startTime, endTime, taskPriority, TaskStatus.INCOMPLETE, new UniqueTagList(tagSet));
this.toAdd = new EventTask(description, startDate, endDate, startTime, endTime, taskPriority, recurringType, TaskStatus.INCOMPLETE, new UniqueTagList(tagSet));
break;
default:
toAdd = null;
Expand Down
29 changes: 26 additions & 3 deletions src/main/java/seedu/taskell/logic/commands/DoneCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@

import seedu.taskell.commons.core.Messages;
import seedu.taskell.commons.core.UnmodifiableObservableList;
import seedu.taskell.commons.exceptions.IllegalValueException;
import seedu.taskell.model.task.ReadOnlyTask;
import seedu.taskell.model.task.RecurringType;
import seedu.taskell.model.task.Task;
import seedu.taskell.model.task.TaskDate;
import seedu.taskell.model.task.TaskStatus;
import seedu.taskell.model.task.UniqueTaskList;
import seedu.taskell.model.task.UniqueTaskList.TaskNotFoundException;
Expand Down Expand Up @@ -40,17 +43,37 @@ public CommandResult execute() {
TaskStatus finsihedStatus = new TaskStatus(TaskStatus.FINISHED);

ReadOnlyTask taskToDone = lastShownList.get(targetIndex - 1);
Task newTask = null;

Task newTask = new Task(taskToDone.getDescription(), taskToDone.getTaskType(), taskToDone.getStartDate(), taskToDone.getEndDate(),
taskToDone.getStartTime(), taskToDone.getEndTime(), taskToDone.getTaskPriority(), finsihedStatus, taskToDone.getTags());
try {

if (taskToDone.getRecurringType().recurringType.equals(RecurringType.DAILY_RECURRING)) {
newTask = new Task(taskToDone.getDescription(), taskToDone.getTaskType(), taskToDone.getStartDate().getNextDay(), taskToDone.getEndDate().getNextDay(),
taskToDone.getStartTime(), taskToDone.getEndTime(), taskToDone.getTaskPriority(), taskToDone.getRecurringType(), taskToDone.getTaskStatus(), taskToDone.getTags());

} else if (taskToDone.getRecurringType().recurringType.equals(RecurringType.WEEKLY_RECURRING)) {
newTask = new Task(taskToDone.getDescription(), taskToDone.getTaskType(), taskToDone.getStartDate().getNextWeek(), taskToDone.getEndDate().getNextWeek(),
taskToDone.getStartTime(), taskToDone.getEndTime(), taskToDone.getTaskPriority(), taskToDone.getRecurringType(), taskToDone.getTaskStatus(), taskToDone.getTags());

} else if (taskToDone.getRecurringType().recurringType.equals(RecurringType.MONTHLY_RECURRING)) {
newTask = new Task(taskToDone.getDescription(), taskToDone.getTaskType(), taskToDone.getStartDate().getNextMonth(), taskToDone.getEndDate().getNextMonth(),
taskToDone.getStartTime(), taskToDone.getEndTime(), taskToDone.getTaskPriority(), taskToDone.getRecurringType(), taskToDone.getTaskStatus(), taskToDone.getTags());

} else if (taskToDone.getRecurringType().recurringType.equals(RecurringType.DEFAULT_RECURRING)) {
newTask = new Task(taskToDone.getDescription(), taskToDone.getTaskType(), taskToDone.getStartDate(), taskToDone.getEndDate(),
taskToDone.getStartTime(), taskToDone.getEndTime(), taskToDone.getTaskPriority(), taskToDone.getRecurringType(), finsihedStatus, taskToDone.getTags());
}
} catch (IllegalValueException ive) {
return new CommandResult(TaskDate.MESSAGE_TASK_DATE_CONSTRAINTS);
}

try {
model.editTask(taskToDone, newTask);
} catch (TaskNotFoundException pnfe) {
assert false : "The target task cannot be missing";
} catch (UniqueTaskList.DuplicateTaskException e) {
return new CommandResult(AddCommand.MESSAGE_DUPLICATE_TASK);
}
}

return new CommandResult(String.format(MESSAGE_DONE_TASK_SUCCESS, taskToDone));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public CommandResult execute() {
ReadOnlyTask taskToEdit = lastShownList.get(targetIndex - 1);

Task newTask = new Task(description,taskToEdit.getTaskType(),taskToEdit.getStartDate(), taskToEdit.getEndDate(), taskToEdit.getStartTime(),taskToEdit.getEndTime(),
taskToEdit.getTaskPriority(),taskToEdit.getTaskStatus(), taskToEdit.getTags()
taskToEdit.getTaskPriority(), taskToEdit.getRecurringType(), taskToEdit.getTaskStatus(), taskToEdit.getTags()
);
try {
model.editTask(taskToEdit,newTask);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public CommandResult execute() {
}
Task newTask = new Task(taskToEdit.getDescription(), taskToEdit.getTaskType(), taskToEdit.getStartDate(),

endDate, taskToEdit.getStartTime(), taskToEdit.getEndTime(), taskToEdit.getTaskPriority(), taskToEdit.getTaskStatus(),
endDate, taskToEdit.getStartTime(), taskToEdit.getEndTime(), taskToEdit.getTaskPriority(), taskToEdit.getRecurringType(), taskToEdit.getTaskStatus(),

taskToEdit.getTags());
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public CommandResult execute() {
return new CommandResult("Unable to edit time of floating task");
}
Task newTask = new Task(taskToEdit.getDescription(),taskToEdit.getTaskType(),taskToEdit.getStartDate(), taskToEdit.getEndDate(), taskToEdit.getStartTime(),endTime,
taskToEdit.getTaskPriority(),taskToEdit.getTaskStatus(), taskToEdit.getTags()
taskToEdit.getTaskPriority(),taskToEdit.getRecurringType(), taskToEdit.getTaskStatus(), taskToEdit.getTags()
);
try {
model.editTask(taskToEdit,newTask);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public CommandResult execute() {

ReadOnlyTask taskToEdit = lastShownList.get(targetIndex - 1);
Task newTask = new Task(taskToEdit.getDescription(),taskToEdit.getTaskType(),taskToEdit.getStartDate(), taskToEdit.getEndDate(), taskToEdit.getStartTime(),taskToEdit.getEndTime(),
taskPriority,taskToEdit.getTaskStatus(), taskToEdit.getTags()
taskPriority,taskToEdit.getRecurringType(), taskToEdit.getTaskStatus(), taskToEdit.getTags()
);
try {
model.editTask(taskToEdit,newTask);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public CommandResult execute() {
return new CommandResult("Unable to edit date of floating task");
}
Task newTask = new Task(taskToEdit.getDescription(), taskToEdit.getTaskType(), startDate, taskToEdit.getEndDate(),
taskToEdit.getStartTime(), taskToEdit.getEndTime(), taskToEdit.getTaskPriority(), taskToEdit.getTaskStatus(), taskToEdit.getTags());
taskToEdit.getStartTime(), taskToEdit.getEndTime(), taskToEdit.getTaskPriority(), taskToEdit.getRecurringType(), taskToEdit.getTaskStatus(), taskToEdit.getTags());
try {
model.editTask(taskToEdit, newTask);
HistoryManager.getInstance().addTask(newTask);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public CommandResult execute() {
return new CommandResult("Unable to edit time of floating task");
}
Task newTask = new Task(taskToEdit.getDescription(),taskToEdit.getTaskType(),taskToEdit.getStartDate(), taskToEdit.getEndDate(), startTime,taskToEdit.getEndTime(),
taskToEdit.getTaskPriority(),taskToEdit.getTaskStatus(), taskToEdit.getTags()
taskToEdit.getTaskPriority(),taskToEdit.getRecurringType(), taskToEdit.getTaskStatus(), taskToEdit.getTags()
);
try {
model.editTask(taskToEdit,newTask);
Expand Down
42 changes: 32 additions & 10 deletions src/main/java/seedu/taskell/logic/parser/Parser.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
import seedu.taskell.model.History;
import seedu.taskell.model.HistoryManager;
import seedu.taskell.model.tag.Tag;
import seedu.taskell.model.task.FloatingTask;
import seedu.taskell.model.task.RecurringType;
import seedu.taskell.model.task.Task;
import seedu.taskell.model.task.TaskDate;
import seedu.taskell.model.task.TaskPriority;
Expand Down Expand Up @@ -455,22 +457,23 @@ private Command prepareAdd(String args) {
String endTime = TaskTime.DEFAULT_END_TIME;
String token = "";
String taskPriority = TaskPriority.DEFAULT_PRIORITY;
String recurringType = RecurringType.DEFAULT_RECURRING;
String tagString = "";

int priorityCount = 0;

int recurrenceCount = 0;
boolean hasStartDate = false;
boolean hasEndDate = false;
boolean hasStartTime = false;
boolean hasEndTime = false;

boolean hasRecurring = false;
while (!initialQueue.isEmpty()) {
token = initialQueue.poll().trim();
String tempToken = "";

if (!token.equals(BY) && !token.equals(ON) && !token.equals(AT) && !token.equals(FROM) && !token.equals(TO)
&& !TaskDate.isValidDate(token) && !TaskTime.isValidTime(token) && !token.startsWith(Tag.PREFIX)
&& !token.startsWith(TaskPriority.PREFIX)) {
&& !token.startsWith(TaskPriority.PREFIX) && !token.startsWith(RecurringType.PREFIX)) {
tempToken = flushQueue(byQueue, onQueue, atQueue, fromQueue, toQueue);
if (!tempToken.isEmpty()) {
descriptionQueue.offer(tempToken);
Expand Down Expand Up @@ -532,6 +535,21 @@ private Command prepareAdd(String args) {
priorityCount++;
}
continue;
} else if(token.startsWith(RecurringType.PREFIX)){
tempToken = flushQueue(byQueue, onQueue, atQueue, fromQueue, toQueue);
if (!tempToken.isEmpty()) {
descriptionQueue.offer(tempToken);
}
if (recurrenceCount > 0) {
return new IncorrectCommand(
String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE));
} else {

recurringType = token.substring(token.indexOf(RecurringType.PREFIX) + 2);
hasRecurring = true;
recurrenceCount++;
}

} else if (TaskDate.isValidDate(token)) {
if (byQueue.isEmpty() && onQueue.isEmpty() && atQueue.isEmpty() && fromQueue.isEmpty()
&& toQueue.isEmpty()) {
Expand Down Expand Up @@ -644,19 +662,23 @@ private Command prepareAdd(String args) {
if (hasStartDate || hasEndDate || hasStartTime || hasEndTime) {
try {
return new AddCommand(description, Task.EVENT_TASK, startDate, endDate, startTime, endTime,
taskPriority, getTagsFromArgs(tagString));
taskPriority, recurringType, getTagsFromArgs(tagString));
} catch (IllegalValueException ive) {
return new IncorrectCommand(ive.getMessage());
}
} else {
try {
return new AddCommand(description, Task.FLOATING_TASK, startDate, endDate, startTime, endTime,
taskPriority, getTagsFromArgs(tagString));
} catch (IllegalValueException ive) {
return new IncorrectCommand(ive.getMessage());

if(hasRecurring){
return new IncorrectCommand(FloatingTask.RECURRING_TYPE_NOT_ALLOWED);
}else{
try {
return new AddCommand(description, Task.FLOATING_TASK, startDate, endDate, startTime, endTime,
taskPriority, recurringType, getTagsFromArgs(tagString));
} catch (IllegalValueException ive) {
return new IncorrectCommand(ive.getMessage());
}
}
}

}

private String flushQueue(Queue<String> byQueue, Queue<String> onQueue, Queue<String> atQueue,
Expand Down
8 changes: 5 additions & 3 deletions src/main/java/seedu/taskell/model/task/EventTask.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,23 @@ public class EventTask extends Task {
public static final String MESSAGE_EVENT_CONSTRAINTS = "Start date and time must be before end date and time"
+ "\nAll date and time should not before current time";

public EventTask(String description, String startDate, String endDate, String startTime, String endTime, String taskPriority, String taskStatus, UniqueTagList tags) throws IllegalValueException {
public EventTask(String description, String startDate, String endDate, String startTime, String endTime, String taskPriority, String recurringType, String taskStatus, UniqueTagList tags) throws IllegalValueException {
this(new Description(description),
EVENT_TASK,
new TaskDate(startDate),
new TaskDate(endDate),
new TaskTime(startTime),
new TaskTime(endTime),
new TaskPriority(taskPriority),
new TaskStatus(taskStatus),
new RecurringType(recurringType),
new TaskStatus(taskStatus),
tags);
}
/**
* Every field must be present and not null.
* @throws IllegalValueException
*/
public EventTask(Description description, String taskType, TaskDate startDate, TaskDate endDate, TaskTime startTime, TaskTime endTime, TaskPriority taskPriority, TaskStatus taskStatus, UniqueTagList tags) throws IllegalValueException {
public EventTask(Description description, String taskType, TaskDate startDate, TaskDate endDate, TaskTime startTime, TaskTime endTime, TaskPriority taskPriority, RecurringType recurringType, TaskStatus taskStatus, UniqueTagList tags) throws IllegalValueException {
endDate = autoAdjustEndDate(startDate, endDate, startTime, endTime);

if (!isValidEventDuration(startDate, endDate, startTime, endTime)) {
Expand All @@ -44,6 +45,7 @@ public EventTask(Description description, String taskType, TaskDate startDate, T
this.startTime = startTime;
this.endTime = endTime;
this.taskPriority = taskPriority;
this.recurringType = recurringType;
this.taskStatus = taskStatus;
this.tags = tags;
}
Expand Down
11 changes: 7 additions & 4 deletions src/main/java/seedu/taskell/model/task/FloatingTask.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,24 @@
* Guarantees: details are present and not null, field values are validated.
*/
public class FloatingTask extends Task {

public FloatingTask(String description, String taskPriority, String taskStatus, UniqueTagList tags) throws IllegalValueException {

public static final String RECURRING_TYPE_NOT_ALLOWED = "Floating task cannot be recurring";

public FloatingTask(String description, String taskPriority, String recurringType, String taskStatus, UniqueTagList tags) throws IllegalValueException {
this(new Description(description),
FLOATING_TASK,
new TaskDate(TaskDate.DEFAULT_DATE),
new TaskDate(TaskDate.DEFAULT_DATE),
new TaskTime(TaskTime.DEFAULT_START_TIME),
new TaskTime(TaskTime.DEFAULT_END_TIME),
new TaskPriority(taskPriority),
new RecurringType(recurringType),
new TaskStatus(taskStatus),
tags);
}

public FloatingTask(Description description, String taskType, TaskDate startDate, TaskDate endDate, TaskTime startTime, TaskTime endTime, TaskPriority taskPriority, TaskStatus taskStatus, UniqueTagList tags) {
super(description, taskType, startDate, endDate, startTime, endTime, taskPriority, taskStatus, tags);
public FloatingTask(Description description, String taskType, TaskDate startDate, TaskDate endDate, TaskTime startTime, TaskTime endTime, TaskPriority taskPriority, RecurringType recurringType, TaskStatus taskStatus, UniqueTagList tags) {
super(description, taskType, startDate, endDate, startTime, endTime, taskPriority, recurringType, taskStatus, tags);
}

@Override
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/seedu/taskell/model/task/ReadOnlyTask.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public interface ReadOnlyTask {
TaskTime getStartTime();
TaskTime getEndTime();
TaskPriority getTaskPriority();
RecurringType getRecurringType();
TaskStatus getTaskStatus();

/**
Expand All @@ -35,6 +36,7 @@ default boolean isSameStateAs(ReadOnlyTask other) {
&& other.getStartTime().equals(this.getStartTime())
&& other.getEndTime().equals(this.getEndTime())
&& other.getTaskPriority().equals(this.getTaskPriority())
&& other.getRecurringType().equals(this.getRecurringType())
&& other.getTaskStatus().equals(this.getTaskStatus()));
}

Expand All @@ -57,6 +59,10 @@ default String getAsTextFloatingTask() {
builder.append(getDescription())
.append(" TaskPriority: ")
.append(getTaskPriority())
.append(" RecurringType: ")
.append(getRecurringType())
.append(" TaskComplete: ")
.append(getTaskStatus())
.append(" Tags: ");
getTags().forEach(builder::append);
return builder.toString();
Expand All @@ -78,6 +84,8 @@ default String getAsTextEventTask() {
.append(getEndTime())
.append(" TaskPriority: ")
.append(getTaskPriority())
.append(" RecurringType: ")
.append(getRecurringType())
.append(" TaskComplete: ")
.append(getTaskStatus())
.append(" Tags: ");
Expand Down

0 comments on commit 7a9e04b

Please sign in to comment.