Mercurial > lada > lada-server
view src/main/java/de/intevation/lada/rest/KommentarPService.java @ 1290:14876c62f692
Push down refreshing of persisted objects deeper into the stack.
There are more places besides creation of Probe objects where it is
useful to return within the response what has been really written to
the database (including modifications by the database itself) instead
of merely the request data, e.g. creation of Ort objects, which
includes database generated ort_ids.
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Wed, 08 Feb 2017 18:02:05 +0100 |
parents | 186d602e031a |
children |
line wrap: on
line source
/* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz * Software engineering by Intevation GmbH * * This file is Free Software under the GNU GPL (v>=3) * and comes with ABSOLUTELY NO WARRANTY! Check out * the documentation coming with IMIS-Labordaten-Application for details. */ package de.intevation.lada.rest; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.servlet.http.HttpServletRequest; 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.Context; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.UriInfo; import org.apache.log4j.Logger; import de.intevation.lada.model.land.KommentarP; import de.intevation.lada.util.annotation.AuthorizationConfig; import de.intevation.lada.util.annotation.RepositoryConfig; import de.intevation.lada.util.auth.Authorization; import de.intevation.lada.util.auth.AuthorizationType; import de.intevation.lada.util.data.QueryBuilder; import de.intevation.lada.util.data.Repository; import de.intevation.lada.util.data.RepositoryType; import de.intevation.lada.util.rest.RequestMethod; import de.intevation.lada.util.rest.Response; /** * REST service to operate on KommentarP objects. * <p> * The services produce data in the application/json media type. * All HTTP methods use the authorization module to determine if the user is * allowed to perform the requested action. * A typical response holds information about the action performed and the data. * <pre> * <code> * { * "success": [boolean], * "message": [string], * "data":[{ * "datum": [timestamp], * "erzeuger": [string], * "id": [number], * "text": [string], * "probeId": [number], * "owner": [boolean], * "readonly": [boolean] * }], * "errors": [object], * "warnings": [object], * "readonly": [boolean], * "totalCount": [number] * } * </code> * </pre> * * @author <a href="mailto:rrenkert@intevation.de">Raimund Renkert</a> */ @Path("rest/pkommentar") @RequestScoped public class KommentarPService { /** * The logger used in this class. */ @Inject private Logger logger; /** * The data repository granting read/write access. */ @Inject @RepositoryConfig(type=RepositoryType.RW) private Repository defaultRepo; /** * The authorization module. */ @Inject @AuthorizationConfig(type=AuthorizationType.HEADER) private Authorization authorization; /** * Get all KommentarP objects. * <p> * The requested objects can be filtered using a URL parameter named * probeId. * <p> * Example: http://example.com/pkommentar?probeId=[ID] * * @return Response object containing all KommentarP objects. */ @GET @Path("/") @Produces(MediaType.APPLICATION_JSON) public Response get( @Context HttpHeaders headers, @Context UriInfo info, @Context HttpServletRequest request ) { MultivaluedMap<String, String> params = info.getQueryParameters(); if (params.isEmpty() || !params.containsKey("probeId")) { return defaultRepo.getAll(KommentarP.class, "land"); } String probeId = params.getFirst("probeId"); QueryBuilder<KommentarP> builder = new QueryBuilder<KommentarP>( defaultRepo.entityManager("land"), KommentarP.class); builder.and("probeId", probeId); return authorization.filter( request, defaultRepo.filter(builder.getQuery(), "land"), KommentarP.class); } /** * Get a single KommentarP object by id. * <p> * The id is appended to the URL as a path parameter. * <p> * Example: http://example.com/pkommentar/{id} * * @return Response object containing a single KommentarP. */ @GET @Path("/{id}") @Produces(MediaType.APPLICATION_JSON) public Response getById( @Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id") String id ) { return authorization.filter( request, defaultRepo.getById(KommentarP.class,Integer.valueOf(id), "land"), KommentarP.class); } /** * Create a new KommentarP object. * <p> * The new object is embedded in the post data as JSON formatted string. * <p> * <pre> * <code> * { * "probeId": [number], * "erzeuger": [string], * "text": [string], * "datum": [date], * "owner": [boolean] * } * </code> * </pre> * * @return Response object containing the new KommentarP. */ @POST @Path("/") @Produces(MediaType.APPLICATION_JSON) public Response create( @Context HttpHeaders headers, @Context HttpServletRequest request, KommentarP kommentar ) { if (!authorization.isAuthorized( request, kommentar, RequestMethod.POST, KommentarP.class) ) { return new Response(false, 699, null); } /* Persist the new object*/ return authorization.filter( request, defaultRepo.create(kommentar, "land"), KommentarP.class); } /** * Update an existing KommentarP object. * <p> * The object to update should come as JSON formatted string. * <pre> * <code> * { * "id": [number], * "owner": [boolean], * "probeId": [number], * "erzeuger": [string], * "text": [string], * "datum": [date] * } * </code> * </pre> * * @return Response object containing the updated KommentarP object. */ @PUT @Path("/{id}") @Produces(MediaType.APPLICATION_JSON) public Response update( @Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id") String id, KommentarP kommentar ) { if (!authorization.isAuthorized( request, kommentar, RequestMethod.PUT, KommentarP.class) ) { logger.debug("User is not authorized!"); return new Response(false, 699, null); } return authorization.filter( request, defaultRepo.update(kommentar, "land"), KommentarP.class); } /** * Delete an existing KommentarP by id. * <p> * The id is appended to the URL as a path parameter. * <p> * Example: http://example.com/pkommentar/{id} * * @return Response object. */ @DELETE @Path("/{id}") @Produces(MediaType.APPLICATION_JSON) public Response delete( @Context HttpHeaders headers, @Context HttpServletRequest request, @PathParam("id") String id ) { /* Get the object by id*/ Response kommentar = defaultRepo.getById(KommentarP.class, Integer.valueOf(id), "land"); KommentarP kommentarObj = (KommentarP)kommentar.getData(); if (!authorization.isAuthorized( request, kommentarObj, RequestMethod.DELETE, KommentarP.class) ) { logger.debug("User is not authorized!"); return new Response(false, 699, null); } return defaultRepo.delete(kommentarObj, "land"); } }