@@ -0,0 +1,1703 @@
+package seedu.geekeep.model.task;%0A%0Aimport seedu.geekeep.model.tag.UniqueTagList;%0A%0A/**%0A * A read-only immutable interface for a Task in the Task Manager. Implementations should guarantee: details are%0A * present and not null, field values are validated.%0A */%0Apublic interface ReadOnlyTask %7B%0A%0A    Title getTitle();%0A%0A    EndDateTime getEndDateTime();%0A%0A    StartDateTime getStartDateTime();%0A%0A    Location getLocation();%0A%0A    /**%0A     * The returned TagList is a deep copy of the internal TagList, changes on the returned list will not affect the%0A     * person's internal tags.%0A     */%0A    UniqueTagList getTags();%0A%0A    /**%0A     * Returns true if both have the same state. (interfaces cannot override .equals)%0A     */%0A    default boolean isSameStateAs(ReadOnlyTask other) %7B%0A        return other == this // short circuit if same object%0A                %7C%7C (other != null // this is first to avoid NPE below%0A                        && other.getTitle().equals(this.getTitle()) // state checks here onwards%0A                        && other.getEndDateTime().equals(this.getEndDateTime()) && other.getStartDateTime().equals(this.getStartDateTime())%0A                        && other.getLocation().equals(this.getLocation()));%0A    %7D%0A%0A    /**%0A     * Formats the Task as text, showing all contact details.%0A     */%0A    default String getAsText() %7B%0A        final StringBuilder builder = new StringBuilder();%0A        builder.append(getTitle()).append(%22 Ending DateTime: %22).append(getEndDateTime()).append(%22 Starting DateTime: %22).append(getStartDateTime())%0A                .append(%22 Location: %22).append(getLocation()).append(%22 Tags: %22);%0A        getTags().forEach(builder::append);%0A        return builder.toString();%0A    %7D%0A%0A%7D%0A

Refactor ReadOnlyTask getAsText string format