/**
  * Handles GET requests of the URL "/datarecords"<br>
  * This method is used to retrieve data records. The GET parameter name is used for filtering the
  * result. If this parameter is not provided all results are returned.
  *
  * @param name Filter for field name
  * @return List including retrieved data records + status 200 OK
  */
 @RequestMapping(value = "/datarecords", method = RequestMethod.GET, produces = "application/json")
 public ResponseEntity<List<DataRecord>> findDataRecordsByName(
     @RequestParam(value = "name", defaultValue = "") String name) {
   if (name.length() == 0) return new ResponseEntity<>(service.findTop100(), HttpStatus.OK);
   else
     return new ResponseEntity<>(
         service.findTop100ByNameContainingIgnoreCase(name), HttpStatus.OK);
 }
  /**
   * Handles PUT requests of the URL "/datarecords/{id}"<br>
   * This method is used to update an existing data record specified by the id. The id is part of
   * the URL. The new data record is part of the body. <br>
   * If the id does not exist an error is returned.
   *
   * @param id The id of the data record that will be updated.
   * @param newDataRecord The data record containing the new information
   * @return the updated object + status 200 OK or an error + status 404 NOT FOUND
   */
  @RequestMapping(
      value = "/datarecords/{id}",
      method = RequestMethod.PUT,
      produces = "application/json")
  public ResponseEntity<DataRecord> updateDataRecord(
      @PathVariable String id, @RequestBody DataRecord newDataRecord) {
    DataRecord dataRecord = service.findById(id);
    dataRecord.setName(newDataRecord.getName());
    dataRecord.setDescription(newDataRecord.getDescription());

    return new ResponseEntity<>(service.update(dataRecord), HttpStatus.OK);
  }
 /**
  * Handles GET requests of the URL "/datarecords/{id}"<br>
  * This method is used to retrieve a data record specified by the id. The id is part of the URL.
  * <br>
  * If the id does not exist an error is returned.
  *
  * @param id The id of the data record that will be retrieved
  * @return the retrieved object + status 200 OK or an error + status 404 NOT FOUND
  */
 @RequestMapping(
     value = "/datarecords/{id}",
     method = RequestMethod.GET,
     produces = "application/json")
 public ResponseEntity<DataRecord> findDataRecord(@PathVariable String id) {
   return new ResponseEntity<>(service.findById(id), HttpStatus.OK);
 }
 /**
  * Handles DELETE requests of the URL "/datarecords/{id}"<br>
  * This method is used to remove an existing data record specified by the id. The id is part of
  * the URL. If the id does not exist an error is returned.
  *
  * @param id The id of the data record that will be removed.
  * @return status 200 OK if the data record has been deleted successfully
  */
 @RequestMapping(
     value = "/datarecords/{id}",
     method = RequestMethod.DELETE,
     produces = "application/json")
 public ResponseEntity<DataRecord> updateDataRecord(@PathVariable String id) {
   service.delete(id);
   return new ResponseEntity<>(HttpStatus.OK);
 }
  /**
   * Handles POST requests of the URL "/datarecords"<br>
   * This method is used to create a new data record. Therefore the datarecord object needs to be
   * specified in the request body.
   *
   * @param dataRecord The data record object that will be created
   * @return The created data record + status 201 CREATED
   */
  @RequestMapping(
      value = "/datarecords",
      method = RequestMethod.POST,
      produces = "application/json")
  public ResponseEntity<DataRecord> createDataRecord(@RequestBody DataRecord dataRecord) {

    // the id will be set when inserting into the database, so we set it to null now
    dataRecord.setId(null);

    service.create(dataRecord);
    return new ResponseEntity<>(dataRecord, HttpStatus.CREATED);
  }