package com.github.daniel.shuy.ws.rs.jpa.crud;

import java.io.Closeable;
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

/**
 * Extend this class to create a CRUD JAX-RS Repository Class.
 *
 * @param <E> The Entity Class type
 */
public interface ResourceCRUD<E extends EntityCRUD> extends Closeable {
    public abstract RepositoryCRUD<E> getRepository();

    @POST
    @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public default void create(E content) {
        try {
            getRepository().create(content);
        }
        finally {
            close();
        }
    }

    @GET
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public default List<E> findAll() {
        try {
            return getRepository().findAll();
        }
        finally {
            close();
        }
    }

    @GET
    @Path("{id}")
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public default E find(@PathParam("id") Long id) {
        try {
            return getRepository().find(id);
        }
        finally {
            close();
        }
    }

    @GET
    @Path("{from}/{to}")
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public default List<E> findRange(@PathParam("from") Long from, @PathParam("to") Long to) {
        try {
            return getRepository().findRange(from, to);
        }
        finally {
            close();
        }
    }

    @GET
    @Path("count")
    @Produces(MediaType.TEXT_PLAIN)
    public default String count() {
        try {
            return String.valueOf(getRepository().count());
        }
        finally {
            close();
        }
    }
    
    @PUT
    @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public default void edit(E content) {
        try {
            getRepository().edit(content);
        }
        finally {
            close();
        }
    }

    @DELETE
    @Path("{id}")
    public default void remove(@PathParam("id") Long id) {
        try {
            getRepository().remove(id);
        }
        finally {
            close();
        }
    }

    @Override
    public default void close() {}
}

@@ -766,32 +766,24 @@
 );%0A        %7D
-%0A       
  finally %7B%0A 
@@ -773,32 +773,32 @@
     %7D finally %7B%0A
+
             clos
@@ -1003,32 +1003,24 @@
 );%0A        %7D
-%0A       
  finally %7B%0A 
@@ -1272,32 +1272,24 @@
 );%0A        %7D
-%0A       
  finally %7B%0A 
@@ -1600,32 +1600,24 @@
 );%0A        %7D
-%0A       
  finally %7B%0A 
@@ -1832,32 +1832,24 @@
 );%0A        %7D
-%0A       
  finally %7B%0A 
@@ -2073,32 +2073,24 @@
 );%0A        %7D
-%0A       
  finally %7B%0A 
@@ -2265,24 +2265,24 @@
 remove(id);%0A
+
         %7D%0A  
@@ -2278,24 +2278,16 @@
        %7D
-%0A       
  finally

Format code