// Path: src/main/java/com/tacs/deathlist/domain/exception/CustomForbiddenException.java
// public class CustomForbiddenException extends WebApplicationException {
// 	
//     private static final long serialVersionUID = 13754947979705084L;
// 
// 	  /**
// 	  * Create a HTTP 403 (Forbidden) exception.
// 	  * @param message the String that is the entity of the 403 response.
// 	  */
// 	public CustomForbiddenException(String message) {
// 		super(Response.status(Response.Status.FORBIDDEN).entity(message)
// 				.type("text/plain").build());
// 	}
// 
// 
// 
// }
// 
// Path: src/main/java/com/tacs/deathlist/domain/exception/CustomNotFoundException.java
// public class CustomNotFoundException extends WebApplicationException {
// 	
//     private static final long serialVersionUID = -4741874630269920223L;
// 
// 	  /**
// 	  * Create a HTTP 404 (Not Found) exception.
// 	  * @param message the String that is the entity of the 404 response.
// 	  */
// 	public CustomNotFoundException(String message) {
// 		super(Response.status(Response.Status.NOT_FOUND).entity(message)
// 				.type("text/plain").build());
// 	}
// 
// }


import com.googlecode.objectify.annotation.Cache;
import com.googlecode.objectify.annotation.Entity;
import com.googlecode.objectify.annotation.Id;
import com.googlecode.objectify.annotation.Unindex;
import com.tacs.deathlist.domain.exception.CustomForbiddenException;
import com.tacs.deathlist.domain.exception.CustomNotFoundException;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import java.util.ArrayList;
import java.util.List;

    public boolean existeItem(String itemName) {
        return this.items.contains(new Item(itemName));
    }
    
    private int getCantidadDeItems() {
    	return this.items.size();
    }
    
    public int getMaxItems() {
    	return MAX_ITEMS;
    }

    /**
     * Este método agrega un nuevo item a la lista.
     * 
     * @param nombreDeNuevoItem el nombre del item
     * 
     * @throws CustomForbiddenException si el item excede la capacidad máxima
     * de la lista o si un item con ese nombre ya existe en la lista
     * 
     */	
    public void agregarItem(String nombreDeNuevoItem) {
		if (!existeItem(nombreDeNuevoItem)) {
			if (this.getCantidadDeItems() < MAX_ITEMS)
				items.add(new Item(nombreDeNuevoItem));
			else
				throw new CustomForbiddenException("La lista " + this.getNombre()
						+ " ya tiene el número máximo permitido de items ("
						+ MAX_ITEMS + ").");
		} else

// Path: src/main/java/com/tacs/deathlist/domain/exception/CustomForbiddenException.java
// public class CustomForbiddenException extends WebApplicationException {
// 	
//     private static final long serialVersionUID = 13754947979705084L;
// 
// 	  /**
// 	  * Create a HTTP 403 (Forbidden) exception.
// 	  * @param message the String that is the entity of the 403 response.
// 	  */
// 	public CustomForbiddenException(String message) {
// 		super(Response.status(Response.Status.FORBIDDEN).entity(message)
// 				.type("text/plain").build());
// 	}
// 
// 
// 
// }
// 
// Path: src/main/java/com/tacs/deathlist/domain/exception/CustomNotFoundException.java
// public class CustomNotFoundException extends WebApplicationException {
// 	
//     private static final long serialVersionUID = -4741874630269920223L;
// 
// 	  /**
// 	  * Create a HTTP 404 (Not Found) exception.
// 	  * @param message the String that is the entity of the 404 response.
// 	  */
// 	public CustomNotFoundException(String message) {
// 		super(Response.status(Response.Status.NOT_FOUND).entity(message)
// 				.type("text/plain").build());
// 	}
// 
// }


// Path: src/main/java/com/tacs/deathlist/domain/Lista.java
import com.googlecode.objectify.annotation.Cache;
import com.googlecode.objectify.annotation.Entity;
import com.googlecode.objectify.annotation.Id;
import com.googlecode.objectify.annotation.Unindex;
import com.tacs.deathlist.domain.exception.CustomForbiddenException;
import com.tacs.deathlist.domain.exception.CustomNotFoundException;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import java.util.ArrayList;
import java.util.List;

    public boolean existeItem(String itemName) {
        return this.items.contains(new Item(itemName));
    }
    
    private int getCantidadDeItems() {
    	return this.items.size();
    }
    
    public int getMaxItems() {
    	return MAX_ITEMS;
    }

    /**
     * Este método agrega un nuevo item a la lista.
     * 
     * @param nombreDeNuevoItem el nombre del item
     * 
     * @throws CustomForbiddenException si el item excede la capacidad máxima
     * de la lista o si un item con ese nombre ya existe en la lista
     * 
     */	
    public void agregarItem(String nombreDeNuevoItem) {
		if (!existeItem(nombreDeNuevoItem)) {
			if (this.getCantidadDeItems() < MAX_ITEMS)
				items.add(new Item(nombreDeNuevoItem));
			else
				throw new CustomForbiddenException("La lista " + this.getNombre()
						+ " ya tiene el número máximo permitido de items ("
						+ MAX_ITEMS + ").");
		} else

			throw new CustomForbiddenException("El item " + nombreDeNuevoItem
