// Path: src/main/java/tudu/domain/Todo.java
// @Entity
// @Table(name = "todo")
// @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
// public class Todo implements Serializable, Comparable<Todo> {
// 
//     /**
//      * The serialVersionUID.
//      */
//     private static final long serialVersionUID = 4048798961366546485L;
// 
//     @Id
//     @Column(name = "id")
//     @GeneratedValue(generator = "system-uuid")
//     @GenericGenerator(name = "system-uuid", strategy = "uuid")
//     private String todoId;
// 
//     @ManyToOne
//     private TodoList todoList;
// 
//     private Date creationDate;
// 
//     private String description;
// 
//     private int priority;
// 
//     private boolean completed;
// 
//     private Date completionDate;
// 
//     private Date dueDate;
// 
//     @ManyToOne
//     private User assignedUser;
// 
//     /**
//      * The length of this field is 10000, which is OK with MySQL but which will
//      * cause trouble with other databases (Oracle is limited at 4000 characters,
//      * SQL Server at 8000).
//      */
//     @Basic(fetch = FetchType.LAZY)
//     @Column(length = 10000)
//     private String notes;
// 
//     private boolean hasNotes;
// 
//     public String getTodoId() {
//         return todoId;
//     }
// 
//     public void setTodoId(String todoId) {
//         this.todoId = todoId;
//     }
// 
//     public boolean isCompleted() {
//         return completed;
//     }
// 
//     public void setCompleted(boolean completed) {
//         this.completed = completed;
//     }
// 
//     public Date getCompletionDate() {
//         return completionDate;
//     }
// 
//     public void setCompletionDate(Date completionDate) {
//         this.completionDate = completionDate;
//     }
// 
//     public Date getCreationDate() {
//         return creationDate;
//     }
// 
//     public void setCreationDate(Date creationDate) {
//         this.creationDate = creationDate;
//     }
// 
//     public String getDescription() {
//         return description;
//     }
// 
//     public void setDescription(String description) {
//         this.description = description;
//     }
// 
//     public Date getDueDate() {
//         return dueDate;
//     }
// 
//     public void setDueDate(Date dueDate) {
//         this.dueDate = dueDate;
//     }
// 
//     public int getPriority() {
//         return priority;
//     }
// 
//     public void setPriority(int priority) {
//         this.priority = priority;
//     }
// 
//     public User getAssignedUser() {
//         return assignedUser;
//     }
// 
//     public void setAssignedUser(User assignedUser) {
//         this.assignedUser = assignedUser;
//     }
// 
//     public boolean isHasNotes() {
//         return hasNotes;
//     }
// 
//     public void setHasNotes(boolean hasNotes) {
//         this.hasNotes = hasNotes;
//     }
// 
//     public String getNotes() {
//         return notes;
//     }
// 
//     public void setNotes(String notes) {
//         this.notes = notes;
//     }
// 
//     public TodoList getTodoList() {
//         return todoList;
//     }
// 
//     public void setTodoList(TodoList todoList) {
//         this.todoList = todoList;
//     }
// 
//     public int compareTo(Todo that) {
//         int order = that.getPriority() - this.getPriority();
//         if (this.isCompleted()) {
//             order += 10000;
//         }
//         if (that.isCompleted()) {
//             order -= 10000;
//         }
//         if (order == 0) {
//             order = (this.getDescription() + this.getTodoId()).compareTo(that
//                     .getDescription()
//                     + that.getTodoId());
//         }
//         return order;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         Todo todo = (Todo) o;
// 
//         if (todoId != null ? !todoId.equals(todo.todoId) : todo.todoId != null) return false;
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         return todoId != null ? todoId.hashCode() : 0;
//     }
// 
//     @Override
//     public String toString() {
//         return "Todo{" +
//                 "todoId='" + todoId + '\'' +
//                 ", todoList=" + todoList.getListId() +
//                 ", description='" + description + '\'' +
//                 '}';
//     }
// }


import org.junit.Test;
import tudu.domain.Todo;
import java.util.*;
import static org.junit.Assert.assertEquals;
        Calendar cal4 = Calendar.getInstance();
        cal4.set(2002, 1, 1);
        todo4.setDueDate(cal4.getTime());

        Todo todo5 = new Todo();
        todo5.setTodoId("05");
        todo5.setCompleted(false);

        Todo todo6 = new Todo();
        todo6.setTodoId("06");
        todo6.setCompleted(true);
        Calendar cal6 = Calendar.getInstance();
        cal6.set(2008, 1, 1);
        todo6.setDueDate(cal6.getTime());

        Todo todo7 = new Todo();
        todo7.setTodoId("07");
        todo7.setCompleted(true);
        Calendar cal7 = Calendar.getInstance();
        cal7.set(2008, 2, 1);
        todo7.setDueDate(cal7.getTime());

        Todo todo8 = new Todo();
        todo8.setTodoId("08");
        todo8.setCompleted(true);

        Comparator<Todo> comparator = new TodoByDueDateComparator();
        Collection<Todo> sortedTodos = new TreeSet<Todo>(comparator);
        sortedTodos.add(todo3);
        sortedTodos.add(todo2);
// Path: src/main/java/tudu/domain/Todo.java
// @Entity
// @Table(name = "todo")
// @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
// public class Todo implements Serializable, Comparable<Todo> {
// 
//     /**
//      * The serialVersionUID.
//      */
//     private static final long serialVersionUID = 4048798961366546485L;
// 
//     @Id
//     @Column(name = "id")
//     @GeneratedValue(generator = "system-uuid")
//     @GenericGenerator(name = "system-uuid", strategy = "uuid")
//     private String todoId;
// 
//     @ManyToOne
//     private TodoList todoList;
// 
//     private Date creationDate;
// 
//     private String description;
// 
//     private int priority;
// 
//     private boolean completed;
// 
//     private Date completionDate;
// 
//     private Date dueDate;
// 
//     @ManyToOne
//     private User assignedUser;
// 
//     /**
//      * The length of this field is 10000, which is OK with MySQL but which will
//      * cause trouble with other databases (Oracle is limited at 4000 characters,
//      * SQL Server at 8000).
//      */
//     @Basic(fetch = FetchType.LAZY)
//     @Column(length = 10000)
//     private String notes;
// 
//     private boolean hasNotes;
// 
//     public String getTodoId() {
//         return todoId;
//     }
// 
//     public void setTodoId(String todoId) {
//         this.todoId = todoId;
//     }
// 
//     public boolean isCompleted() {
//         return completed;
//     }
// 
//     public void setCompleted(boolean completed) {
//         this.completed = completed;
//     }
// 
//     public Date getCompletionDate() {
//         return completionDate;
//     }
// 
//     public void setCompletionDate(Date completionDate) {
//         this.completionDate = completionDate;
//     }
// 
//     public Date getCreationDate() {
//         return creationDate;
//     }
// 
//     public void setCreationDate(Date creationDate) {
//         this.creationDate = creationDate;
//     }
// 
//     public String getDescription() {
//         return description;
//     }
// 
//     public void setDescription(String description) {
//         this.description = description;
//     }
// 
//     public Date getDueDate() {
//         return dueDate;
//     }
// 
//     public void setDueDate(Date dueDate) {
//         this.dueDate = dueDate;
//     }
// 
//     public int getPriority() {
//         return priority;
//     }
// 
//     public void setPriority(int priority) {
//         this.priority = priority;
//     }
// 
//     public User getAssignedUser() {
//         return assignedUser;
//     }
// 
//     public void setAssignedUser(User assignedUser) {
//         this.assignedUser = assignedUser;
//     }
// 
//     public boolean isHasNotes() {
//         return hasNotes;
//     }
// 
//     public void setHasNotes(boolean hasNotes) {
//         this.hasNotes = hasNotes;
//     }
// 
//     public String getNotes() {
//         return notes;
//     }
// 
//     public void setNotes(String notes) {
//         this.notes = notes;
//     }
// 
//     public TodoList getTodoList() {
//         return todoList;
//     }
// 
//     public void setTodoList(TodoList todoList) {
//         this.todoList = todoList;
//     }
// 
//     public int compareTo(Todo that) {
//         int order = that.getPriority() - this.getPriority();
//         if (this.isCompleted()) {
//             order += 10000;
//         }
//         if (that.isCompleted()) {
//             order -= 10000;
//         }
//         if (order == 0) {
//             order = (this.getDescription() + this.getTodoId()).compareTo(that
//                     .getDescription()
//                     + that.getTodoId());
//         }
//         return order;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         Todo todo = (Todo) o;
// 
//         if (todoId != null ? !todoId.equals(todo.todoId) : todo.todoId != null) return false;
// 
//         return true;
//     }
// 
//     @Override
//     public int hashCode() {
//         return todoId != null ? todoId.hashCode() : 0;
//     }
// 
//     @Override
//     public String toString() {
//         return "Todo{" +
//                 "todoId='" + todoId + '\'' +
//                 ", todoList=" + todoList.getListId() +
//                 ", description='" + description + '\'' +
//                 '}';
//     }
// }


// Path: src/test/java/tudu/domain/comparator/TodoByDueDateComparatorTest.java
import org.junit.Test;
import tudu.domain.Todo;
import java.util.*;
import static org.junit.Assert.assertEquals;

        Calendar cal4 = Calendar.getInstance();
        cal4.set(2002, 1, 1);
        todo4.setDueDate(cal4.getTime());

        Todo todo5 = new Todo();
        todo5.setTodoId("05");
        todo5.setCompleted(false);

        Todo todo6 = new Todo();
        todo6.setTodoId("06");
        todo6.setCompleted(true);
        Calendar cal6 = Calendar.getInstance();
        cal6.set(2008, 1, 1);
        todo6.setDueDate(cal6.getTime());

        Todo todo7 = new Todo();
        todo7.setTodoId("07");
        todo7.setCompleted(true);
        Calendar cal7 = Calendar.getInstance();
        cal7.set(2008, 2, 1);
        todo7.setDueDate(cal7.getTime());

        Todo todo8 = new Todo();
        todo8.setTodoId("08");
        todo8.setCompleted(true);

        Comparator<Todo> comparator = new TodoByDueDateComparator();
        Collection<Todo> sortedTodos = new TreeSet<Todo>(comparator);
        sortedTodos.add(todo3);
        sortedTodos.add(todo2);
        sortedTodos.add(todo5);