TodoListDTO.java

package info.ejava.examples.jaxrs.todos.dto;

import java.io.Serializable;
import java.util.LinkedList;
import java.util.List;

import javax.json.bind.annotation.JsonbTransient;
import javax.xml.bind.annotation.XmlRootElement;

import com.fasterxml.jackson.annotation.JsonIgnore;

@XmlRootElement(name="todoList", namespace="urn:ejava.jaxrs.todos")
public class TodoListDTO implements Serializable {
    private static final long serialVersionUID = 1L;
    private String name;
    private List<TodoItemDTO> todoItems;
    
    public TodoListDTO() {}
    
    public TodoListDTO(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    
    public List<TodoItemDTO> getTodoItems() {
        return todoItems;
    }
    public void setTodoItems(List<TodoItemDTO> todoItems) {
        this.todoItems = todoItems;
    }
    public void withTodoItem(TodoItemDTO todoItem) {
        if (todoItems==null && todoItem!=null) {
            todoItems = new LinkedList<>();            
        }
        if (todoItem!=null) {
            todoItems.add(todoItem);
        }
    }
    
    @JsonbTransient
    @JsonIgnore
    public TodoItemDTO getListItem(String itemName) {
        if (todoItems==null) { return null; }
        return todoItems.stream()
                        .filter(item->itemName.equalsIgnoreCase(item.getName()))
                        .findFirst()
                        .orElseGet(null);
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("TodoList[name=").append(name)
               .append(", todoItems=");
        if (todoItems!=null) {
            boolean first=true;
            for (TodoItemDTO todo: todoItems) {
                if (!first) { builder.append(",").append(System.lineSeparator()); }
                builder.append(todo);
                first=false;
            }
        }
        builder.append("]");
        return builder.toString();
    }
}