/*
* 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();
}
}