/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package qa.qcri.aidr.predictui.api; import java.util.ArrayList; import java.util.List; import javax.ejb.EJB; import javax.ejb.Stateless; import javax.ws.rs.Consumes; 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.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; import org.apache.log4j.Logger; import qa.qcri.aidr.common.exception.PropertyNotSetException; import qa.qcri.aidr.dbmanager.dto.UsersDTO; import qa.qcri.aidr.predictui.facade.UserResourceFacade; import qa.qcri.aidr.predictui.util.ResponseWrapper; import qa.qcri.aidr.predictui.util.TaggerAPIConfigurationProperty; import qa.qcri.aidr.predictui.util.TaggerAPIConfigurator; import com.fasterxml.jackson.databind.ObjectMapper; /** * REST Web Service * * @author Imran, Koushik */ @Path("/user") @Stateless public class UserResource { @Context private UriInfo context; @EJB private UserResourceFacade userLocalEJB; private Logger logger = Logger.getLogger(UserResource.class); public UserResource() { } @POST @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public Response addUser(UsersDTO user) { UsersDTO createdUser = userLocalEJB.addUser(user); if (createdUser == null){ logger.error("Error while creating new user."); UsersDTO newUser = new UsersDTO(null, null, null); return Response.ok(newUser).build(); } else { logger.info("Created new user with id = " + createdUser.getUserID() + ", name = " + createdUser.getName()); return Response.ok(createdUser).build(); } } @GET @Path("{name}") @Produces(MediaType.APPLICATION_JSON) public Response findUserByName(@PathParam("name") String userName) { UsersDTO user = userLocalEJB.getUserByName(userName); logger.info("fetched user data: " + (user != null ? user.getUserID() : "null")); if (user == null){ // return the same object but with empty id and role. By empty id we can see that user does not exist. user = new UsersDTO(null, null, null); } return Response.ok(user).build(); } @GET @Path("/id/{id}") @Produces(MediaType.APPLICATION_JSON) public UsersDTO findUserByID(@PathParam("id") Long id) { UsersDTO user = userLocalEJB.getUserByID(id); logger.info("fetched user data: " + (user != null ? user.getUserID() : "null")); if (user == null){ // return the same object but with empty id and role. By empty id we can see that user does not exist. user = new UsersDTO(null, null, null); } return user; } @GET @Path("/all") @Produces(MediaType.APPLICATION_JSON) public Response findAllUsers() { List<UsersDTO> users = userLocalEJB.getAllUsers(); logger.info("fetched user data size: " + (users != null ? users.size(): "null")); ObjectMapper mapper = new ObjectMapper(); try { return Response.ok(mapper.writeValueAsString(users)).build(); } catch (Exception e) { logger.error("Error in getting all users"); return Response.ok(new ArrayList<UsersDTO>()).build(); } } @DELETE @Path("{id}") @Produces(MediaType.APPLICATION_JSON) public Response deleteUser(@PathParam("id") Long id) throws PropertyNotSetException { Integer userDeleted = userLocalEJB.deleteUser(id); return userDeleted != null && userDeleted == 1 ? Response.ok(new ResponseWrapper(TaggerAPIConfigurator.getInstance().getProperty(TaggerAPIConfigurationProperty.STATUS_CODE_SUCCESS))).build() : Response.ok(new ResponseWrapper(TaggerAPIConfigurator.getInstance().getProperty(TaggerAPIConfigurationProperty.STATUS_CODE_FAILED))).build(); } }