diff --git a/docs-core/src/main/java/com/sismics/docs/core/dao/jpa/CommentDao.java b/docs-core/src/main/java/com/sismics/docs/core/dao/jpa/CommentDao.java index c7108661..23ad1b46 100644 --- a/docs-core/src/main/java/com/sismics/docs/core/dao/jpa/CommentDao.java +++ b/docs-core/src/main/java/com/sismics/docs/core/dao/jpa/CommentDao.java @@ -90,7 +90,7 @@ public class CommentDao { */ public List getByDocumentId(String documentId) { EntityManager em = ThreadLocalContext.get().getEntityManager(); - StringBuilder sb = new StringBuilder("select c.COM_ID_C, c.COM_CONTENT_C, c.COM_CREATEDATE_D, u.USE_USERNAME_C from T_COMMENT c, T_USER u"); + StringBuilder sb = new StringBuilder("select c.COM_ID_C, c.COM_CONTENT_C, c.COM_CREATEDATE_D, u.USE_USERNAME_C, u.USE_EMAIL_C from T_COMMENT c, T_USER u"); sb.append(" where c.COM_IDDOC_C = :documentId and c.COM_IDUSER_C = u.USE_ID_C and c.COM_DELETEDATE_D is null "); sb.append(" order by c.COM_CREATEDATE_D asc "); Query q = em.createNativeQuery(sb.toString()); @@ -106,6 +106,7 @@ public class CommentDao { commentDto.setContent((String) o[i++]); commentDto.setCreateTimestamp(((Timestamp) o[i++]).getTime()); commentDto.setCreatorName((String) o[i++]); + commentDto.setCreatorEmail((String) o[i++]); commentDtoList.add(commentDto); } return commentDtoList; diff --git a/docs-core/src/main/java/com/sismics/docs/core/dao/jpa/dto/CommentDto.java b/docs-core/src/main/java/com/sismics/docs/core/dao/jpa/dto/CommentDto.java index 446fad8e..1f2e6d41 100644 --- a/docs-core/src/main/java/com/sismics/docs/core/dao/jpa/dto/CommentDto.java +++ b/docs-core/src/main/java/com/sismics/docs/core/dao/jpa/dto/CommentDto.java @@ -19,6 +19,11 @@ public class CommentDto { */ private String creatorName; + /** + * Creator email. + */ + private String creatorEmail; + /** * Content. */ @@ -44,6 +49,14 @@ public class CommentDto { public void setCreatorName(String creatorName) { this.creatorName = creatorName; } + + public String getCreatorEmail() { + return creatorEmail; + } + + public void setCreatorEmail(String creatorEmail) { + this.creatorEmail = creatorEmail; + } public String getContent() { return content; diff --git a/docs-core/src/main/java/com/sismics/util/ImageUtil.java b/docs-core/src/main/java/com/sismics/util/ImageUtil.java index 001ba76b..40e163fd 100644 --- a/docs-core/src/main/java/com/sismics/util/ImageUtil.java +++ b/docs-core/src/main/java/com/sismics/util/ImageUtil.java @@ -11,6 +11,8 @@ import javax.imageio.ImageWriteParam; import javax.imageio.ImageWriter; import javax.imageio.stream.ImageOutputStream; +import com.google.common.base.Charsets; +import com.google.common.hash.Hashing; import com.sismics.util.mime.MimeType; /** @@ -62,4 +64,21 @@ public class ImageUtil { public static boolean isImage(String mimeType) { return mimeType.equals(MimeType.IMAGE_GIF) || mimeType.equals(MimeType.IMAGE_PNG) || mimeType.equals(MimeType.IMAGE_JPEG); } + + /** + * Compute Gravatar hash. + * See https://en.gravatar.com/site/implement/hash/. + * + * @param email + * @return Gravatar hash + */ + public static String computeGravatar(String email) { + if (email == null) { + return null; + } + + return Hashing.md5().hashString( + email.trim().toLowerCase(), Charsets.UTF_8) + .toString(); + } } diff --git a/docs-core/src/test/java/com/sismics/util/TestImageUtil.java b/docs-core/src/test/java/com/sismics/util/TestImageUtil.java new file mode 100644 index 00000000..d6c62703 --- /dev/null +++ b/docs-core/src/test/java/com/sismics/util/TestImageUtil.java @@ -0,0 +1,17 @@ +package com.sismics.util; + +import junit.framework.Assert; +import org.junit.Test; + +/** + * Test of the image utilities. + * + * @author bgamard + */ +public class TestImageUtil { + + @Test + public void computeGravatarTest() throws Exception { + Assert.assertEquals("0bc83cb571cd1c50ba6f3e8a78ef1346", ImageUtil.computeGravatar("MyEmailAddress@example.com ")); + } +} diff --git a/docs-web/src/main/java/com/sismics/docs/rest/resource/CommentResource.java b/docs-web/src/main/java/com/sismics/docs/rest/resource/CommentResource.java index 54d393af..52017f8a 100644 --- a/docs-web/src/main/java/com/sismics/docs/rest/resource/CommentResource.java +++ b/docs-web/src/main/java/com/sismics/docs/rest/resource/CommentResource.java @@ -21,6 +21,7 @@ import com.sismics.docs.core.dao.jpa.dto.CommentDto; import com.sismics.docs.core.model.jpa.Comment; import com.sismics.rest.exception.ForbiddenClientException; import com.sismics.rest.util.ValidationUtil; +import com.sismics.util.ImageUtil; /** * Comment REST resource. @@ -139,6 +140,7 @@ public class CommentResource extends BaseResource { .add("id", commentDto.getId()) .add("content", commentDto.getContent()) .add("creator", commentDto.getCreatorName()) + .add("creator_gravatar", ImageUtil.computeGravatar(commentDto.getCreatorEmail())) .add("create_date", commentDto.getCreateTimestamp())); } diff --git a/docs-web/src/main/webapp/src/partial/docs/document.view.html b/docs-web/src/main/webapp/src/partial/docs/document.view.html index 5ad747e5..b7f25544 100644 --- a/docs-web/src/main/webapp/src/partial/docs/document.view.html +++ b/docs-web/src/main/webapp/src/partial/docs/document.view.html @@ -72,15 +72,22 @@

Error loading comments

-
- {{ comment.creator }} -

- {{ comment.content }}
- {{ comment.create_date | date: 'yyyy-MM-dd' }} +

+
+ + + +
+
+ {{ comment.creator }} +

+ {{ comment.content }}
+ {{ comment.create_date | date: 'yyyy-MM-dd' }} Delete -

+

+
diff --git a/docs-web/src/test/java/com/sismics/docs/rest/TestCommentResource.java b/docs-web/src/test/java/com/sismics/docs/rest/TestCommentResource.java index 798414ee..b59551dd 100644 --- a/docs-web/src/test/java/com/sismics/docs/rest/TestCommentResource.java +++ b/docs-web/src/test/java/com/sismics/docs/rest/TestCommentResource.java @@ -127,6 +127,7 @@ public class TestCommentResource extends BaseJerseyTest { Assert.assertEquals(comment2Id, comment.getString("id")); Assert.assertEquals("Comment by comment2", comment.getString("content")); Assert.assertEquals("comment2", comment.getString("creator")); + Assert.assertEquals("d6e56c42f61983bba80d370138763420", comment.getString("creator_gravatar")); Assert.assertNotNull(comment.getJsonNumber("create_date")); // Delete a comment with comment2