/**
   * Return detailed information about the version whose id is passed as path argument. Returns a
   * JSON map with the fields id, creator, date, added_triples, removed_triples. Triple will be
   * represented in RDF/JSON format. @HTTP 404 in case the requested version does not exist
   *
   * @param id the ID of the version to return
   * @return a JSON map representing the version information as described above
   */
  @GET
  @Produces("application/json")
  @Path("/versions/{id:[0-9]+}")
  public Response getVersion(@PathParam("id") Long id) {
    try {
      Version version = versioningService.getVersion(id);

      if (version != null) {
        Map<String, Object> result = new HashMap<String, Object>();
        result.put("id", version.getId());
        if (version.getCreator() != null) {
          result.put("creator", version.getCreator().stringValue());
        }
        result.put("date", DateUtils.ISO8601FORMAT.format(version.getCommitTime()));

        result.put("added_triples", JSONUtils.serializeTriplesAsJson(version.getAddedTriples()));
        result.put(
            "removed_triples", JSONUtils.serializeTriplesAsJson(version.getRemovedTriples()));

        return Response.ok().entity(result).build();

      } else {
        return Response.status(Response.Status.NOT_FOUND)
            .entity("version with id " + id + " does not exist")
            .build();
      }

    } catch (SailException e) {
      return Response.serverError()
          .entity("error loading version " + id + ": " + e.getMessage())
          .build();
    }
  }
  private List<Map<String, Object>> formatVersions(List<Version> versions) {
    List<Map<String, Object>> result = new ArrayList<Map<String, Object>>(versions.size());

    for (Version version : versions) {
      Map<String, Object> v_map = new HashMap<String, Object>();
      v_map.put("id", version.getId());
      if (version.getCreator() != null) {
        v_map.put("creator", version.getCreator().stringValue());
      }
      v_map.put("date", DateUtils.ISO8601FORMAT.format(version.getCommitTime()));

      result.add(v_map);
    }

    return result;
  }