diff options
Diffstat (limited to 'src/org/traccar/api/BaseResource.java')
-rw-r--r-- | src/org/traccar/api/BaseResource.java | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/src/org/traccar/api/BaseResource.java b/src/org/traccar/api/BaseResource.java index 6051fdb61..9b0c2cf79 100644 --- a/src/org/traccar/api/BaseResource.java +++ b/src/org/traccar/api/BaseResource.java @@ -17,6 +17,8 @@ package org.traccar.api; import java.sql.SQLException; import java.util.Collection; +import java.util.HashMap; +import java.util.Map; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; import javax.ws.rs.core.SecurityContext; @@ -24,38 +26,47 @@ import org.traccar.Context; import org.traccar.helper.Clazz; import org.traccar.model.User; -public class BaseResource<T, I> { +public class BaseResource<T> { + + private static final String ERROR_KEY = "error"; private final Class<T> clazz = Clazz.getGenericArgumentType(getClass()); @javax.ws.rs.core.Context private SecurityContext securityContext; + private static Map<String, String> getError(Exception e) { + Map<String, String> error = new HashMap<>(); + error.put(ERROR_KEY, e.getMessage()); + return error; + } + public Collection<T> getEntities() { Collection<T> collection; try { collection = Context.getDataManager().get(clazz); } catch (SQLException e) { - throw new WebApplicationException(ResponseBuilder.badRequest(e)); + throw new WebApplicationException( + Response.status(Response.Status.BAD_REQUEST).entity(getError(e)).build()); } if (collection == null || collection.isEmpty()) { - throw new WebApplicationException(ResponseBuilder.notFound()); + throw new WebApplicationException(Response.status(Response.Status.NOT_FOUND).build()); } else { return collection; } } - public T getEntity(I id) { + public T getEntity(long id) { validateSecurityContext(User.ROLE_USER, id); T entity = Clazz.newInstance(clazz); try { Clazz.setId(entity, id); entity = Context.getDataManager().get(entity); } catch (Exception e) { - throw new WebApplicationException(ResponseBuilder.badRequest(e)); + throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).entity(getError(e)).build()); } if (entity == null) { - throw new WebApplicationException(ResponseBuilder.notFound()); + throw new WebApplicationException(Response.status(Response.Status.NOT_FOUND).build()); } else { return entity; } @@ -64,37 +75,38 @@ public class BaseResource<T, I> { public Response postEntity(T entity) { try { Context.getDataManager().add(entity); - return ResponseBuilder.ok(entity); + return Response.status(Response.Status.OK).entity(entity).build(); } catch (Exception e) { - return ResponseBuilder.badRequest(e); + return Response.status(Response.Status.BAD_REQUEST).entity(getError(e)).build(); } } - public Response putEntity(I id, T entity) { + public Response putEntity(long id, T entity) { try { Clazz.setId(entity, id); Context.getDataManager().update(entity); - return ResponseBuilder.ok(entity); + return Response.status(Response.Status.OK).entity(entity).build(); } catch (Exception e) { - return ResponseBuilder.badRequest(e); + return Response.status(Response.Status.BAD_REQUEST).entity(getError(e)).build(); } } - public Response deleteEntity(I id) { + public Response deleteEntity(long id) { try { T entity = Clazz.newInstance(clazz); Clazz.setId(entity, id); Context.getDataManager().remove(entity); - return ResponseBuilder.deleted(); + return Response.status(Response.Status.NO_CONTENT).build(); } catch (Exception e) { - return ResponseBuilder.badRequest(e); + return Response.status(Response.Status.BAD_REQUEST).entity(getError(e)).build(); } } - private void validateSecurityContext(String role, I id) { + private void validateSecurityContext(String role, long id) { UserPrincipal userPrincipal = (UserPrincipal) securityContext.getUserPrincipal(); if (!securityContext.isUserInRole(role) && !userPrincipal.getId().equals(id)) { - throw new WebApplicationException(ResponseBuilder.forbidden()); + throw new WebApplicationException(Response.status(Response.Status.FORBIDDEN).build()); } } + } |