// Path: src/main/java/tudu/domain/TodoList.java
// @Entity
// @Table(name = "todo_list")
// @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
// public class TodoList implements Serializable, Comparable<TodoList> {
// 
//     /**
//      * The serialVersionUID.
//      */
//     private static final long serialVersionUID = 4048798961366546485L;
// 
//     @Id
//     @Column(name = "id")
//     @GeneratedValue(generator = "system-uuid")
//     @GenericGenerator(name = "system-uuid", strategy = "uuid")
//     private String listId;
// 
//     private String name;
// 
//     private boolean rssAllowed;
// 
//     private Date lastUpdate;
// 
//     @OneToMany(mappedBy = "todoList")
//     @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
//     @JsonIgnore
//     private Set<Todo> todos = new HashSet<Todo>();
// 
//     @ManyToMany(mappedBy = "todoLists")
//     @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
//     @JsonIgnore
//     private Set<User> users = new HashSet<User>();
// 
//     public String getListId() {
//         return listId;
//     }
// 
//     public void setListId(String listId) {
//         this.listId = listId;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public boolean isRssAllowed() {
//         return rssAllowed;
//     }
// 
//     public void setRssAllowed(boolean rssAllowed) {
//         this.rssAllowed = rssAllowed;
//     }
// 
//     public Date getLastUpdate() {
//         return lastUpdate;
//     }
// 
//     public void setLastUpdate(Date lastUpdate) {
//         this.lastUpdate = lastUpdate;
//     }
// 
//     public Set<Todo> getTodos() {
//         return todos;
//     }
// 
//     public void setTodos(Set<Todo> todos) {
//         this.todos = todos;
//     }
// 
//     public Set<User> getUsers() {
//         return users;
//     }
// 
//     public void setUsers(Set<User> users) {
//         this.users = users;
//     }
// 
//     public int compareTo(TodoList that) {
//         return (this.getName().toLowerCase() + this.getListId()).compareTo(that
//                 .getName().toLowerCase()
//                 + that.getListId());
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) {
//             return true;
//         }
//         if (!(o instanceof TodoList)) {
//             return false;
//         }
// 
//         final TodoList todoList = (TodoList) o;
// 
//         if (listId != null ? !listId.equals(todoList.listId)
//                 : todoList.listId != null) {
//             return false;
//         }
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         return (listId != null ? listId.hashCode() : 0);
//     }
// 
//     @Override
//     public String toString() {
//         return "TodoList{" +
//                 "listId='" + listId + '\'' +
//                 ", name='" + name + '\'' +
//                 ", lastUpdate=" + lastUpdate +
//                 ", todos=" + todos +
//                 ", users=" + users +
//                 '}';
//     }
// }


import org.jdom.Document;
import org.jdom.JDOMException;
import tudu.domain.TodoList;
import java.io.IOException;
import java.io.InputStream;
package tudu.service;



/**
 * Manage Todo Lists.
 * 
 * @author Julien Dubois
 */
public interface TodoListsService {

    /**
     * Create a new Todo List.
     * 
     * @param todoList
     *            The Todo List to create
     */
    void createTodoList(TodoList todoList);

    /**
     * Find a Todo List by ID.
     * 
     * @param listId
     *            The Todo List ID
     * @return The Todo List
     */
    TodoList findTodoList(String listId);

    /**
     * Find a Todo List by ID, without any security check.
     * <p>
     * This method is used for the RSS feed, which is not secured.
     * </p>
     * 
     * @param listId
     *            The Todo List ID
     * @return The Todo List
     */
    TodoList unsecuredFindTodoList(String listId);

    /**
     * Update a Todo List.
     * 
     * @param todoList
     *            The Todo List to update
     */
    void updateTodoList(TodoList todoList);

    /**
     * Delete a Todo List.
     * 
     * @param listId
     *            The ID of the Todo List to delete
     */
    void deleteTodoList(String listId);

    /**
     * Add a user to a Todo List.
     * 
     * @param listId
     *            The ID of the Todo List
     * @param login
     *            The user login
     */
    void addTodoListUser(String listId, String login);

    /**
     * Delete a user from Todo List.
     * 
     * @param listId
     *            The ID of the Todo List
     * @param login
     *            The user login
     */
    void deleteTodoListUser(String listId, String login);

    /**
     * Backup a Todo List.
     * 
     * @param todoList
     *            The Todo List
     * @return A JDOM document ready for backup
     */
    Document backupTodoList(String listId);

    /**
     * Restore a Todo List.
     * 
     * @param restoreChoice
     *            The type of RestoreController (create, replace or merge)
     * @param listId
     *            The Todo List ID
     * @param todoListContent
     *            The content to RestoreController
     */
    void restoreTodoList(String restoreChoice, String listId,
// Path: src/main/java/tudu/domain/TodoList.java
// @Entity
// @Table(name = "todo_list")
// @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
// public class TodoList implements Serializable, Comparable<TodoList> {
// 
//     /**
//      * The serialVersionUID.
//      */
//     private static final long serialVersionUID = 4048798961366546485L;
// 
//     @Id
//     @Column(name = "id")
//     @GeneratedValue(generator = "system-uuid")
//     @GenericGenerator(name = "system-uuid", strategy = "uuid")
//     private String listId;
// 
//     private String name;
// 
//     private boolean rssAllowed;
// 
//     private Date lastUpdate;
// 
//     @OneToMany(mappedBy = "todoList")
//     @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
//     @JsonIgnore
//     private Set<Todo> todos = new HashSet<Todo>();
// 
//     @ManyToMany(mappedBy = "todoLists")
//     @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
//     @JsonIgnore
//     private Set<User> users = new HashSet<User>();
// 
//     public String getListId() {
//         return listId;
//     }
// 
//     public void setListId(String listId) {
//         this.listId = listId;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public boolean isRssAllowed() {
//         return rssAllowed;
//     }
// 
//     public void setRssAllowed(boolean rssAllowed) {
//         this.rssAllowed = rssAllowed;
//     }
// 
//     public Date getLastUpdate() {
//         return lastUpdate;
//     }
// 
//     public void setLastUpdate(Date lastUpdate) {
//         this.lastUpdate = lastUpdate;
//     }
// 
//     public Set<Todo> getTodos() {
//         return todos;
//     }
// 
//     public void setTodos(Set<Todo> todos) {
//         this.todos = todos;
//     }
// 
//     public Set<User> getUsers() {
//         return users;
//     }
// 
//     public void setUsers(Set<User> users) {
//         this.users = users;
//     }
// 
//     public int compareTo(TodoList that) {
//         return (this.getName().toLowerCase() + this.getListId()).compareTo(that
//                 .getName().toLowerCase()
//                 + that.getListId());
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) {
//             return true;
//         }
//         if (!(o instanceof TodoList)) {
//             return false;
//         }
// 
//         final TodoList todoList = (TodoList) o;
// 
//         if (listId != null ? !listId.equals(todoList.listId)
//                 : todoList.listId != null) {
//             return false;
//         }
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         return (listId != null ? listId.hashCode() : 0);
//     }
// 
//     @Override
//     public String toString() {
//         return "TodoList{" +
//                 "listId='" + listId + '\'' +
//                 ", name='" + name + '\'' +
//                 ", lastUpdate=" + lastUpdate +
//                 ", todos=" + todos +
//                 ", users=" + users +
//                 '}';
//     }
// }


// Path: src/main/java/tudu/service/TodoListsService.java
import org.jdom.Document;
import org.jdom.JDOMException;
import tudu.domain.TodoList;
import java.io.IOException;
import java.io.InputStream;

package tudu.service;



/**
 * Manage Todo Lists.
 * 
 * @author Julien Dubois
 */
public interface TodoListsService {

    /**
     * Create a new Todo List.
     * 
     * @param todoList
     *            The Todo List to create
     */
    void createTodoList(TodoList todoList);

    /**
     * Find a Todo List by ID.
     * 
     * @param listId
     *            The Todo List ID
     * @return The Todo List
     */
    TodoList findTodoList(String listId);

    /**
     * Find a Todo List by ID, without any security check.
     * <p>
     * This method is used for the RSS feed, which is not secured.
     * </p>
     * 
     * @param listId
     *            The Todo List ID
     * @return The Todo List
     */
    TodoList unsecuredFindTodoList(String listId);

    /**
     * Update a Todo List.
     * 
     * @param todoList
     *            The Todo List to update
     */
    void updateTodoList(TodoList todoList);

    /**
     * Delete a Todo List.
     * 
     * @param listId
     *            The ID of the Todo List to delete
     */
    void deleteTodoList(String listId);

    /**
     * Add a user to a Todo List.
     * 
     * @param listId
     *            The ID of the Todo List
     * @param login
     *            The user login
     */
    void addTodoListUser(String listId, String login);

    /**
     * Delete a user from Todo List.
     * 
     * @param listId
     *            The ID of the Todo List
     * @param login
     *            The user login
     */
    void deleteTodoListUser(String listId, String login);

    /**
     * Backup a Todo List.
     * 
     * @param todoList
     *            The Todo List
     * @return A JDOM document ready for backup
     */
    Document backupTodoList(String listId);

    /**
     * Restore a Todo List.
     * 
     * @param restoreChoice
     *            The type of RestoreController (create, replace or merge)
     * @param listId
     *            The Todo List ID
     * @param todoListContent
     *            The content to RestoreController
     */
    void restoreTodoList(String restoreChoice, String listId,
            InputStream todoListContent) throws JDOMException, IOException;