package com.dropwizard.employee.service; import com.google.common.io.ByteStreams; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; 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; import javax.ws.rs.core.Response; import org.glassfish.jersey.media.multipart.FormDataContentDisposition; import org.glassfish.jersey.media.multipart.FormDataParam; @Path("/employees") @Produces(MediaType.APPLICATION_JSON) public class EmployeeResource { final private EmployeeDAO dao = new EmployeeListDAO(); @GET public Response getEmployees() { List employees = dao.findAll(); System.out.println("Employees: " + employees.toString()); return Response.ok() //200 .entity(employees.toArray(new Employee[0])) .build(); } @GET @Path("{id}") public Response getEmployee(@PathParam("id") long id) { System.out.println("getEmployee Called..."); List employees = dao.findById(id); if (employees != null && employees.size() > 0) { System.out.println("Employee: " + employees.get(0).toString()); return Response.ok() //200 .entity(employees.get(0)) .build(); } else { return Response.status(Response.Status.NOT_FOUND).build(); } } @GET @Path("{searchCriteria}/{searchValue}") public Response searchEmployees(@PathParam("searchCriteria") String searchCriteria, @PathParam("searchValue") String searchValue) throws Exception { List employees = null; if (searchCriteria.equals("title")) { employees = dao.findAllByTitle(searchValue); } else if (searchCriteria.equals("lastname")) { employees = dao.findAllByLastName(searchValue); } else if (searchCriteria.equals("department")) { employees = dao.findByDepartment(searchValue); } else { throw new Exception("Filter criteria not valid"); } return Response.ok() //200 .entity(employees.toArray(new Employee[0])) .build(); } @POST @Produces(MediaType.APPLICATION_JSON) @Consumes({MediaType.MULTIPART_FORM_DATA}) public Response saveEmployee(@FormDataParam("photo") InputStream fileInputStream, @FormDataParam("photo") FormDataContentDisposition cdh, @FormDataParam("firstName") String firstName, @FormDataParam("lastName") String lastName, @FormDataParam("birthDate") String birthDate, @FormDataParam("title") String title, @FormDataParam("dept") String department, @FormDataParam("phone") String phone, @FormDataParam("email") String email) { byte[] photo = null; try { photo = ByteStreams.toByteArray(fileInputStream); } catch (IOException ex) { Logger.getLogger(EmployeeResource.class.getName()).log(Level.SEVERE, null, ex); } Employee employee = new Employee(firstName, lastName, birthDate, title, department, email, phone, photo); dao.insert(employee); return Response.ok() //200 .build(); } @PUT @Path("{id}") @Produces(MediaType.APPLICATION_JSON) @Consumes({MediaType.MULTIPART_FORM_DATA}) public Response updateEmployee(@FormDataParam("photo") InputStream fileInputStream, @FormDataParam("photo") FormDataContentDisposition cdh, @FormDataParam("firstName") String firstName, @FormDataParam("lastName") String lastName, @FormDataParam("birthDate") String birthDate, @FormDataParam("title") String title, @FormDataParam("dept") String department, @FormDataParam("phone") String phone, @FormDataParam("email") String email, @PathParam("id") long id) { byte[] photo = null; try { photo = ByteStreams.toByteArray(fileInputStream); } catch (IOException ex) { Logger.getLogger(EmployeeResource.class.getName()).log(Level.SEVERE, null, ex); } Employee employee = new Employee(id, firstName, lastName, birthDate, title, department, email, phone, photo); if (photo != null && photo.length != 0) { dao.update(employee); } else { dao.updateNoPhoto(employee); } //cache.replace("EMP"+employee.getId(), employee); return Response.ok("") //200 .build(); } @DELETE @Path("{id}") public Response deleteEmployee(@PathParam("id") long id) { dao.delete(id); //cache.remove("EMP"+id); return Response.ok("") //200 .build(); } }