@@ -0,0 +1,2471 @@
+package seedu.address.storage;%0A%0Aimport java.util.ArrayList;%0Aimport java.util.List;%0Aimport java.util.stream.Collectors;%0A%0Aimport javax.xml.bind.annotation.XmlElement;%0Aimport javax.xml.bind.annotation.XmlRootElement;%0A%0Aimport javafx.collections.FXCollections;%0Aimport javafx.collections.ObservableList;%0Aimport seedu.address.commons.core.UnmodifiableObservableList;%0Aimport seedu.address.commons.exceptions.IllegalValueException;%0Aimport seedu.address.model.ReadOnlyTaskList;%0Aimport seedu.address.model.tag.Tag;%0Aimport seedu.address.model.task.ReadOnlyTask;%0Aimport seedu.address.model.task.Task;%0A%0A/**%0A * An Immutable TaskList that is serializable to XML format%0A */%0A@XmlRootElement(name = %22tasklist%22)%0Apublic class XmlSerializableTaskList implements ReadOnlyTaskList %7B%0A%0A    @XmlElement%0A    private List%3CXmlAdaptedPerson%3E persons;%0A    @XmlElement%0A    private List%3CXmlAdaptedTag%3E tags;%0A%0A    /**%0A     * Creates an empty XmlSerializableTaskList.%0A     * This empty constructor is required for marshalling.%0A     */%0A    public XmlSerializableTaskList() %7B%0A        persons = new ArrayList%3C%3E();%0A        tags = new ArrayList%3C%3E();%0A    %7D%0A%0A    /**%0A     * Conversion%0A     */%0A    public XmlSerializableTaskList(ReadOnlyTaskList src) %7B%0A        this();%0A        persons.addAll(src.getTaskList().stream().map(XmlAdaptedPerson::new).collect(Collectors.toList()));%0A        tags.addAll(src.getTagList().stream().map(XmlAdaptedTag::new).collect(Collectors.toList()));%0A    %7D%0A%0A    @Override%0A    public ObservableList%3CReadOnlyTask%3E getTaskList() %7B%0A        final ObservableList%3CTask%3E tasks = this.persons.stream().map(p -%3E %7B%0A            try %7B%0A                return p.toModelType();%0A            %7D catch (IllegalValueException e) %7B%0A                e.printStackTrace();%0A                //TODO: better error handling%0A                return null;%0A            %7D%0A        %7D).collect(Collectors.toCollection(FXCollections::observableArrayList));%0A        return new UnmodifiableObservableList%3C%3E(tasks);%0A    %7D%0A%0A    @Override%0A    public ObservableList%3CTag%3E getTagList() %7B%0A        final ObservableList%3CTag%3E tags = this.tags.stream().map(t -%3E %7B%0A            try %7B%0A                return t.toModelType();%0A            %7D catch (IllegalValueException e) %7B%0A                e.printStackTrace();%0A                //TODO: better error handling%0A                return null;%0A            %7D%0A        %7D).collect(Collectors.toCollection(FXCollections::observableArrayList));%0A        return new UnmodifiableObservableList%3C%3E(tags);%0A    %7D%0A%0A%7D%0A

add XmlSerializableTaskList