@@ -0,0 +1,3280 @@
+package seedu.jobs.model.task;%0A%0Aimport java.util.Objects;%0A%0Aimport seedu.jobs.commons.util.CollectionUtil;%0Aimport seedu.jobs.model.tag.UniqueTagList;%0A%0A%0Apublic class Task implements ReadOnlyTask %7B%0A%09%0A%09private Name name;%0A    private Time startTime;%0A    private Time endTime;%0A    private Description description;%0A    private boolean isCompleted; %0A    private UniqueTagList tags;%0A%0A    /**%0A     * Every field must be present and not null.%0A     */%0A    public Task(Name name, Time startTime, Time endTime, Description description, UniqueTagList tags) %7B%0A        assert !CollectionUtil.isAnyNull(name);%0A        this.name = name;%0A        this.startTime = startTime;%0A        this.endTime = endTime;%0A        this.description = description;%0A        this.tags = new UniqueTagList(tags); // protect internal tags from changes in the arg list%0A        this.isCompleted = false;%0A    %7D%0A%0A    /**%0A     * Creates a copy of the given ReadOnlyTask.%0A     */%0A    public Task(ReadOnlyTask source) %7B%0A        this(source.getName(), source.getStartTime(), source.getEndTime(), source.getDescription(), source.getTags());%0A        this.isCompleted = source.isCompleted();%0A    %7D%0A%0A    public void setName(Name name) %7B%0A        assert name != null;%0A        this.name = name;%0A    %7D%0A%0A    @Override%0A    public Name getName() %7B%0A        return name;%0A    %7D%0A%0A    public void setStartTime(Time startTime) %7B%0A        assert startTime != null;%0A        this.startTime = startTime;%0A    %7D%0A%0A    @Override%0A    public Time getStartTime() %7B%0A        return startTime;%0A    %7D%0A%0A    public void setEndTime(Time endTime) %7B%0A        assert endTime != null;%0A        this.endTime = endTime;%0A    %7D%0A%0A    @Override%0A    public Time getEndTime() %7B%0A        return endTime;%0A    %7D%0A%0A    public void setDescription(Description description) %7B%0A        assert description != null;%0A        this.description = description;%0A    %7D%0A%0A    @Override%0A    public Description getDescription() %7B%0A        return description;%0A    %7D%0A%0A    @Override%0A    public UniqueTagList getTags() %7B%0A        return new UniqueTagList(tags);%0A    %7D%0A%0A    /**%0A     * Replaces this task's tags with the tags in the argument tag list.%0A     */%0A    public void setTags(UniqueTagList replacement) %7B%0A        tags.setTags(replacement);%0A    %7D%0A%0A    /**%0A     * Updates this task with the details of %7B@code replacement%7D.%0A     */%0A    public void resetData(ReadOnlyTask replacement) %7B%0A        assert replacement != null;%0A%0A        this.setName(replacement.getName());%0A        this.setStartTime(replacement.getStartTime());%0A        this.setEndTime(replacement.getEndTime());%0A        this.setDescription(replacement.getDescription());%0A        this.setTags(replacement.getTags());%0A    %7D%0A%0A    @Override%0A    public boolean equals(Object other) %7B%0A        return other == this // short circuit if same object%0A                %7C%7C (other instanceof ReadOnlyTask // instanceof handles nulls%0A                && this.isSameStateAs((ReadOnlyTask) other));%0A    %7D%0A%0A    @Override%0A    public int hashCode() %7B%0A        // use this method for custom fields hashing instead of implementing your own%0A        return Objects.hash(name, startTime, endTime, description, tags);%0A    %7D%0A%0A    @Override%0A    public String toString() %7B%0A        return getAsText();%0A    %7D%0A%0A%09@Override%0A%09public boolean isCompleted() %7B%0A%09%09return isCompleted;%0A%09%7D%0A%7D%0A

Create Task.java