@@ -0,0 +1,1389 @@
+package seedu.oneline.model.task;%0A%0Aimport seedu.oneline.commons.exceptions.IllegalValueException;%0A%0Apublic class TaskName %7B%0A%0A    public static final String MESSAGE_TASK_NAME_CONSTRAINTS = %22Task names should be spaces or alphanumeric characters%22;%0A    public static final String TASK_NAME_VALIDATION_REGEX = %22%5B%5C%5Cp%7BAlnum%7D %5D+%22;%0A%0A    public final String name;%0A%0A    /**%0A     * Validates given name.%0A     *%0A     * @throws IllegalValueException if given name string is invalid.%0A     */%0A    public TaskName(String name) throws IllegalValueException %7B%0A        assert name != null;%0A        name = name.trim();%0A        if (!isValidTaskName(name)) %7B%0A            throw new IllegalValueException(MESSAGE_TASK_NAME_CONSTRAINTS);%0A        %7D%0A        this.name = name;%0A    %7D%0A%0A    /**%0A     * Returns true if a given string is a valid task name.%0A     */%0A    public static boolean isValidTaskName(String test) %7B%0A        return test.matches(TASK_NAME_VALIDATION_REGEX);%0A    %7D%0A%0A%0A    @Override%0A    public String toString() %7B%0A        return name;%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 TaskName // instanceof handles nulls%0A                && this.name.equals(((TaskName) other).name)); // state check%0A    %7D%0A%0A    @Override%0A    public int hashCode() %7B%0A        return name.hashCode();%0A    %7D%0A    %0A%7D%0A

Add TaskName class with placeholder methods