/**
  * Lists contributors, based on an optional query string.
  *
  * @param q An optional query string to filter contributors.
  * @return A List of contributors, serialized as the response body.
  */
 @RequestMapping(value = "v1/contributors", method = RequestMethod.GET)
 public @ResponseBody PojoPage<Contributor> listContributors(
     @RequestParam(required = false) String q) {
   if (q == null) {
     return service.readAll(0);
   } else {
     return service.search(q);
   }
 }
 /**
  * Creates a new contributor based on data in the request body
  *
  * @param contributor The request body, marshalled into a Contributor object.
  * @return The newly persisted Contributor, with automated data added.
  */
 @RequestMapping(value = "v1/contributors", method = RequestMethod.POST)
 public @ResponseBody @PreAuthorize("hasRole('ROLE_ADMINS')") @ResponseStatus(HttpStatus.CREATED)
 Contributor newContributor(@RequestBody Contributor contributor) {
   contributor.setId(UUID.randomUUID().toString());
   service.store(contributor);
   return contributor;
 }
 /**
  * Replaces the contributor object with new data from the request body.
  *
  * @param id The id of the contributor to replace. Must match the id in the body.
  * @param contributor The new data for this contributor object.
  * @return The modified contributor.
  */
 @RequestMapping(value = "v1/contributors/{id}", method = RequestMethod.PUT)
 public @ResponseBody @PreAuthorize("hasRole('ROLE_ADMINS')") Contributor replaceContributor(
     @PathVariable("id") String id, @RequestBody Contributor contributor) {
   service.store(contributor);
   return contributor;
 }
 /**
  * Gets a single contributor object from the database.
  *
  * @param id The id of the contributor to fetch
  * @return The JSON serialization of a contributor in the response body.
  */
 @RequestMapping(value = "v1/contributors/{id}", method = RequestMethod.GET)
 public @ResponseBody Contributor get(@PathVariable("id") String id) {
   return service.read(id);
 }
 /**
  * Deletes a contributor by ID.
  *
  * @param id the id of the contributor to delete.
  */
 @RequestMapping(value = "v1/contributors/{id}", method = RequestMethod.DELETE)
 public @ResponseBody @PreAuthorize("hasRole('ROLE_ADMINS')") void removeContributor(
     @PathVariable("id") String id) {
   service.delete(id);
 }
 @Before
 public void setupJoe() {
   contributorService.store(Utils.joeUser);
 }