package com.example.ldug.todo;

import java.util.Collection;
import java.util.Map;
import java.util.Optional;
import javax.inject.Inject;
import javax.inject.Singleton;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import com.google.common.collect.Maps;
import io.dropwizard.jersey.PATCH;

@Path("/todo")
@Produces(MediaType.APPLICATION_JSON)
@Singleton
public class TodoResource {

    private Map<Integer, Todo> todos = Maps.newHashMap();
    private int counter = 0;

    @Inject
    public TodoResource() {
    }

    @GET
    public Collection<Todo> list() {
        return todos.values();
    }

    @POST
    public Todo create(Todo todo) {
        todo.setId(++counter);
        todo.setCompleted(false);
        todos.put(counter, todo);
        return todo;
    }

    @GET
    @Path("{id}")
    public Todo getById(@PathParam("id") int id) {
        return todos.get(id);
    }

    @PATCH
    @Path("{id}")
    public Todo update(@PathParam("id") int id, Todo patch) {
        Todo todo = todos.get(id);

        Optional.ofNullable(patch.getCompleted()).ifPresent(todo::setCompleted);
        Optional.ofNullable(patch.getTitle()).ifPresent(todo::setTitle);

        todos.put(id, todo);

        return todo;
    }

    @DELETE
    @Path("{id}")
    public void deleteById(@PathParam("id") int id) {
        todos.remove(id);
    }

    @DELETE
    public void deleteAll() {
        todos.clear();
    }
}
@@ -526,18 +526,16 @@
 urce %7B%0A%0A
-  
   privat
@@ -582,18 +582,16 @@
 hMap();%0A
-  
   privat
@@ -610,18 +610,16 @@
 r = 0;%0A%0A
-  
   @Injec
@@ -622,18 +622,16 @@
 nject%0A  
- 
- 
 public T
@@ -646,36 +646,30 @@
 rce() %7B%0A
-  
   %7D%0A%0A  
- 
- 
 @GET%0A  
- 
- 
 public C
@@ -689,28 +689,24 @@
 o%3E list() %7B%0A
-    
     return t
@@ -724,25 +724,21 @@
 ();%0A
-  
   %7D%0A%0A
-  
   @POST%0A
     
@@ -733,18 +733,16 @@
   @POST%0A
-  
   public
@@ -767,28 +767,24 @@
 todo) %7B%0A    
-  
-  
 todo.setId(+
@@ -794,20 +794,16 @@
 unter);%0A
-    
     todo
@@ -824,28 +824,24 @@
 false);%0A    
- 
-   
 todos.put(co
@@ -854,28 +854,24 @@
  todo);%0A    
-   
- 
 return todo;
@@ -875,26 +875,20 @@
 do;%0A
-  
   %7D%0A%0A  
- 
- 
 @GET%0A
-  
   @P
@@ -891,34 +891,32 @@
   @Path(%22%7Bid%7D%22)%0A
-  
   public Todo ge
@@ -944,28 +944,24 @@
 ) int id) %7B%0A
-    
     return t
@@ -974,25 +974,21 @@
 et(id);%0A
-  
   %7D%0A%0A
-  
   @PATCH
@@ -988,18 +988,16 @@
  @PATCH%0A
-  
   @Path(
@@ -1002,26 +1002,24 @@
 h(%22%7Bid%7D%22)%0A  
- 
- 
 public Todo 
@@ -1060,28 +1060,24 @@
 do patch) %7B%0A
-    
     Todo tod
@@ -1096,28 +1096,24 @@
 t(id);%0A%0A    
- 
-   
 Optional.ofN
@@ -1173,20 +1173,16 @@
 leted);%0A
-    
     Opti
@@ -1239,28 +1239,24 @@
 setTitle);%0A%0A
-    
     todos.pu
@@ -1273,20 +1273,16 @@
 );%0A%0A    
-  
-  
 return t
@@ -1286,25 +1286,21 @@
 n todo;%0A
-  
   %7D%0A%0A
-  
   @DELET
@@ -1303,18 +1303,16 @@
 ELETE%0A  
- 
- 
 @Path(%22%7B
@@ -1317,18 +1317,16 @@
 %22%7Bid%7D%22)%0A
-  
   public
@@ -1369,28 +1369,24 @@
 t id) %7B%0A    
-   
- 
 todos.remove
@@ -1395,17 +1395,13 @@
 d);%0A
-  
   %7D%0A%0A
-  
   @D
@@ -1406,18 +1406,16 @@
 @DELETE%0A
-  
   public
@@ -1434,20 +1434,16 @@
 All() %7B%0A
-    
     todo
@@ -1453,15 +1453,13 @@
 lear();%0A
-  
   %7D%0A%7D

Reformat TodoResource to match formatting in other files