@POST
  @Path("type/{type}/owner/{owningObjectId}/avatar")
  public Response createAvatarFromTemporary(
      final @PathParam("type") String avatarType,
      final @PathParam("owningObjectId") String owningObjectId,
      final AvatarCroppingBean croppingInstructions) {
    try {
      final Avatar.Type avatarsType = Avatar.Type.getByName(avatarType);
      if (null == avatarsType) {
        throw new NoSuchElementException("avatarType");
      }
      final ApplicationUser remoteUser = authContext.getUser();

      final AvatarBean avatarFromTemporary =
          avatarTemporaryHelper.createAvatarFromTemporary(
              remoteUser, avatarsType, owningObjectId, croppingInstructions);

      return Response.status(Response.Status.CREATED)
          .entity(avatarFromTemporary)
          .cacheControl(never())
          .build();
    } catch (NoSuchElementException x) {
      return Response.status(Response.Status.NOT_FOUND).entity(x.getMessage()).build();
    }
  }
  /**
   * Creates temporary avatar
   *
   * @param avatarType Type of entity where to change avatar
   * @param owningObjectId Entity id where to change avatar
   * @param filename name of file being uploaded
   * @param size size of file
   * @param request servlet request
   * @return temporary avatar cropping instructions
   * @since v5.0
   */
  @POST
  @Consumes(MediaType.WILDCARD)
  @RequiresXsrfCheck
  @Path("type/{type}/owner/{owningObjectId}/temp")
  public Response storeTemporaryAvatar(
      final @PathParam("type") String avatarType,
      final @PathParam("owningObjectId") String owningObjectId,
      final @QueryParam("filename") String filename,
      final @QueryParam("size") Long size,
      final @Context HttpServletRequest request) {
    try {
      final Avatar.Type avatarsType = Avatar.Type.getByName(avatarType);
      if (null == avatarsType) {
        throw new NoSuchElementException("avatarType");
      }

      final ApplicationUser remoteUser = authContext.getUser();

      // get from paramter!!
      Avatar.Size avatarTargetSize = Avatar.Size.LARGE;
      final Response storeTemporaryAvatarResponse =
          avatarTemporaryHelper.storeTemporaryAvatar(
              remoteUser, avatarsType, owningObjectId, avatarTargetSize, filename, size, request);

      return storeTemporaryAvatarResponse;
    } catch (NoSuchElementException x) {
      return Response.status(Response.Status.NOT_FOUND).entity(x.getMessage()).build();
    }
  }
  @POST
  @Consumes(MediaType.MULTIPART_FORM_DATA)
  @RequiresXsrfCheck
  @Path("type/{type}/owner/{owningObjectId}/temp")
  @Produces({MediaType.TEXT_HTML})
  public Response storeTemporaryAvatarUsingMultiPart(
      final @PathParam("type") String avatarType,
      final @PathParam("owningObjectId") String owningObjectId,
      final @MultipartFormParam("avatar") FilePart filePart,
      final @Context HttpServletRequest request) {
    try {
      try {
        final Avatar.Type avatarsType = Avatar.Type.getByName(avatarType);
        if (null == avatarsType) {
          throw new NoSuchElementException("avatarType");
        }

        final ApplicationUser remoteUser = authContext.getUser();

        // get from paramter!!
        Avatar.Size avatarTargetSize = Avatar.Size.LARGE;
        final Response storeTemporaryAvatarResponse =
            avatarTemporaryHelper.storeTemporaryAvatar(
                remoteUser, avatarsType, owningObjectId, avatarTargetSize, filePart, request);

        return storeTemporaryAvatarResponse;
      } catch (NoSuchElementException x) {
        return Response.status(Response.Status.NOT_FOUND).entity(x.getMessage()).build();
      }
    } catch (RESTException x) {
      String errorMsgs = x.toString();
      String sep = "";

      return Response.status(Response.Status.OK)
          .entity(
              "<html><body>"
                  + "<textarea>"
                  + "{"
                  + "\"errorMessages\": ["
                  + errorMsgs
                  + "]"
                  + "}"
                  + "</textarea>"
                  + "</body></html>")
          .cacheControl(never())
          .build();
    }
  }
  /**
   * Deletes avatar
   *
   * @param avatarType Project id or project key
   * @param id database id for avatar
   * @return temporary avatar cropping instructions
   * @since v5.0
   */
  @DELETE
  @Path("type/{type}/owner/{owningObjectId}/avatar/{id}")
  public Response deleteAvatar(
      final @PathParam("type") String avatarType,
      final @PathParam("owningObjectId") String owningObjectId,
      @PathParam("id") final Long id) {
    final Avatar.Type avatarsType = Avatar.Type.getByName(avatarType);
    final TypeAvatarService avatarsForType = universalAvatars.getAvatars(avatarsType);

    if (null == avatarsForType) {
      return Response.status(Response.Status.NOT_FOUND).build();
    }
    if (!avatarsForType.canUserCreateAvatar(authContext.getUser(), owningObjectId)) {
      return Response.status(Response.Status.FORBIDDEN).build();
    }

    final Response avatarFromTemporaryResponse = avatarResourceHelper.deleteAvatar(id);
    return avatarFromTemporaryResponse;
  }
  /** @since v6.3 */
  @GET
  @Path("type/{type}/owner/{owningObjectId}")
  public Response getAvatars(
      final @PathParam("type") String avatarType,
      final @PathParam("owningObjectId") String owningObjectId) {
    final Avatar.Type avatarsType = Avatar.Type.getByName(avatarType);
    final TypeAvatarService avatarsForType = universalAvatars.getAvatars(avatarsType);
    if (null == avatarsForType) {
      return Response.status(Response.Status.NOT_FOUND).entity("avatarType").build();
    }
    final AvatarImageResolver uriResolver = universalAvatars.getImages(avatarsType);
    if (null == uriResolver) {
      return Response.status(Response.Status.NOT_FOUND).entity("avatarType").build();
    }

    final SystemAndCustomAvatars allAvatars =
        avatarsForType.getAvatars(authContext.getUser(), owningObjectId);

    Map<String, List<AvatarBean>> result = sytemAndCustomAvatarsToBeanMap(uriResolver, allAvatars);

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