@@ -0,0 +1,2266 @@
+package seedu.ezdo.model.todo;%0A%0Aimport java.util.ArrayList;%0A%0Aimport seedu.ezdo.commons.exceptions.IllegalValueException;%0A%0A//@@author A0139177W%0A/**%0A * Represents a Task's recurring interval in ezDo.%0A * Guarantees: immutable; is valid as declared in %7B@link #isValidRecurring(String)%7D%0A */%0Apublic class Recur %7B%0A%0A    public static final String MESSAGE_RECUR_CONSTRAINTS =%0A            %22Recurring time interval should be 'daily', 'weekly', 'monthly' or 'yearly'.%22;%0A    public static final String INTERVAL_NONE = %22%22;%0A    public static final String INTERVAL_DAILY = %22daily%22;%0A    public static final String INTERVAL_WEEKLY = %22weekly%22;%0A    public static final String INTERVAL_MONTHLY = %22monthly%22;%0A    public static final String INTERVAL_YEARLY = %22yearly%22;%0A%0A    public static final ArrayList%3CString%3E RECUR_INTERVALS = new ArrayList%3C%3E();%0A%0A    public final String value;%0A%0A    /**%0A     * Validates given recurring time interval.%0A     *%0A     * @throws IllegalValueException if given recurring time interval string is invalid.%0A     */%0A    public Recur(String recur) throws IllegalValueException %7B%0A        initialiseRecurIntervals();%0A        assert recur != null;%0A        String trimmedRecur = recur.trim();%0A        if (!isValidRecur(trimmedRecur)) %7B%0A            throw new IllegalValueException(MESSAGE_RECUR_CONSTRAINTS);%0A        %7D%0A        this.value = trimmedRecur;%0A    %7D%0A%0A    private void initialiseRecurIntervals() %7B%0A        RECUR_INTERVALS.add(INTERVAL_NONE);%0A        RECUR_INTERVALS.add(INTERVAL_DAILY);%0A        RECUR_INTERVALS.add(INTERVAL_WEEKLY);%0A        RECUR_INTERVALS.add(INTERVAL_MONTHLY);%0A        RECUR_INTERVALS.add(INTERVAL_YEARLY);%0A    %7D%0A%0A    /**%0A     * Returns true if a given string is a valid recurring time interval.%0A     */%0A    public static boolean isValidRecur(String test) %7B%0A        return RECUR_INTERVALS.contains(test);%0A    %7D%0A%0A    @Override%0A    public String toString() %7B%0A        return value;%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 Recur // instanceof handles nulls%0A                && this.value.equals(((Recur) other).value)); // state check%0A    %7D%0A%0A    @Override%0A    public int hashCode() %7B%0A        return value.hashCode();%0A    %7D%0A%0A%7D%0A

Add Recur.java