Finished adding support to show discussions in email's body.
git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/application-support-layer/applicationSupportLayerSocial@124290 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
ed484080f0
commit
3cd229ca74
|
@ -1,5 +1,6 @@
|
||||||
package org.gcube.applicationsupportlayer.social.mailing;
|
package org.gcube.applicationsupportlayer.social.mailing;
|
||||||
|
|
||||||
|
import java.nio.charset.Charset;
|
||||||
import java.text.Format;
|
import java.text.Format;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -91,76 +92,13 @@ public class EmailPlugin {
|
||||||
|
|
||||||
body.append("<body>");
|
body.append("<body>");
|
||||||
|
|
||||||
String htmlPost = "";
|
|
||||||
|
|
||||||
if (notification2Save.getType() == NotificationType.POST_ALERT ||
|
if (notification2Save.getType() == NotificationType.POST_ALERT ||
|
||||||
notification2Save.getType() == NotificationType.COMMENT ||
|
notification2Save.getType() == NotificationType.COMMENT ||
|
||||||
notification2Save.getType() == NotificationType.MENTION ||
|
notification2Save.getType() == NotificationType.MENTION ||
|
||||||
notification2Save.getType() == NotificationType.OWN_COMMENT) {
|
notification2Save.getType() == NotificationType.OWN_COMMENT) {
|
||||||
body.append("<div>").append(WRITE_ABOVE_TO_REPLY).append("</div><br />");
|
body.append("<div>").append(WRITE_ABOVE_TO_REPLY).append("</div><br />");
|
||||||
|
|
||||||
try{
|
|
||||||
|
|
||||||
// data formatter
|
|
||||||
Format formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm a");
|
|
||||||
|
|
||||||
// escape html
|
|
||||||
String feedTextNoHtml = convertHTML2Text(feed.getDescription());
|
|
||||||
|
|
||||||
// build up html post + comments
|
|
||||||
if(notification2Save.getType() == NotificationType.POST_ALERT || (comments.size() == 0 && notification2Save.getType() == NotificationType.MENTION))
|
|
||||||
htmlPost = "<div style=\"margin-top: 10px; margin-bottom: 10px; margin-left: 50px; padding-left: 15px; "
|
|
||||||
+ "border-left: 3px solid #ccc; font-style: italic; font-weight:bold\">"
|
|
||||||
+ feed.getFullName()
|
|
||||||
+ ": "
|
|
||||||
+ (feedTextNoHtml.length() > 30 ? feedTextNoHtml.substring(0, 30) + " ..." : feedTextNoHtml)
|
|
||||||
+ "<p style=\"font-family:Lucida Grande,"
|
|
||||||
+ "Verdana,Bitstream Vera Sans,Arial,sans-serif; "
|
|
||||||
+ "white-space: nowrap; font-size: smaller; color: #999;\">" + formatter.format(feed.getTime()) + "</p>"
|
|
||||||
+"</div>";
|
|
||||||
else
|
|
||||||
htmlPost = "<div style=\"margin-top: 10px; margin-bottom: 10px; margin-left: 50px; padding-left: 15px; "
|
|
||||||
+ "border-left: 3px solid #ccc; font-style: italic\">\""
|
|
||||||
+ feed.getFullName()
|
|
||||||
+ ": "
|
|
||||||
+ (feedTextNoHtml.length() > 30 ? feedTextNoHtml.substring(0, 30) + " ..." : feedTextNoHtml)
|
|
||||||
+ "<p style=\"font-family:Lucida Grande,"
|
|
||||||
+ "Verdana,Bitstream Vera Sans,Arial,sans-serif; "
|
|
||||||
+ "white-space: nowrap; font-size: smaller; color: #999;\">" + formatter.format(feed.getTime()) + "</p>"
|
|
||||||
+"\"</div>";
|
|
||||||
|
|
||||||
for (int i = 0; i < comments.size(); i++) {
|
|
||||||
|
|
||||||
String commentTextNoHtml = convertHTML2Text(comments.get(i).getText());
|
|
||||||
|
|
||||||
if((commentKey != null && comments.get(i).getKey().equals(commentKey)) && !(notification2Save.getType() == NotificationType.POST_ALERT)){
|
|
||||||
htmlPost += "<div style=\"margin-top: 10px; margin-bottom: 10px; margin-left: 100px; padding-left: 15px; "
|
|
||||||
+ "border-left: 3px solid #ccc; font-style: italic; font-weight:bold\">\""
|
|
||||||
+ comments.get(i).getFullName()
|
|
||||||
+ ": "
|
|
||||||
+ commentTextNoHtml
|
|
||||||
+ "<p style=\"font-family:Lucida Grande,"
|
|
||||||
+ "Verdana,Bitstream Vera Sans,Arial,sans-serif; "
|
|
||||||
+ "white-space: nowrap; font-size: smaller; color: #999;\">" + formatter.format(comments.get(i).getTime()) + "</p>"
|
|
||||||
+"\"</div>";
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
htmlPost += "<div style=\"margin-top: 10px; margin-bottom: 10px; margin-left: 100px; padding-left: 15px; "
|
|
||||||
+ "border-left: 3px solid #ccc; font-style: italic;\">\""
|
|
||||||
+ comments.get(i).getFullName()
|
|
||||||
+ ": "
|
|
||||||
+ commentTextNoHtml
|
|
||||||
+ "<p style=\"font-family:Lucida Grande,"
|
|
||||||
+ "Verdana,Bitstream Vera Sans,Arial,sans-serif; "
|
|
||||||
+ "white-space: nowrap; font-size: smaller; color: #999;\">" + formatter.format(comments.get(i).getTime()) + "</p>"
|
|
||||||
+"\"</div>";
|
|
||||||
}
|
|
||||||
|
|
||||||
}catch(Exception e){
|
|
||||||
_log.error("Unable to reconstruct the discussion to put into the email body.", e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (notification2Save.getType() == NotificationType.MESSAGE) {
|
if (notification2Save.getType() == NotificationType.MESSAGE) {
|
||||||
body.append("<div>").append(WRITE_ABOVE_MESSAGE_REPLY).append("</div><br />");
|
body.append("<div>").append(WRITE_ABOVE_MESSAGE_REPLY).append("</div><br />");
|
||||||
|
@ -170,7 +108,7 @@ public class EmailPlugin {
|
||||||
.append("Dear ").append(userFirstName).append(",") //dear <user>
|
.append("Dear ").append(userFirstName).append(",") //dear <user>
|
||||||
.append("<p>").append(sender).append(" ").append(removedMarkup) // has done something
|
.append("<p>").append(sender).append(" ").append(removedMarkup) // has done something
|
||||||
.append(getActionLink(notification2Save, portalURL)) //Goto
|
.append(getActionLink(notification2Save, portalURL)) //Goto
|
||||||
.append(htmlPost)
|
.append(buildHtmlDiscussion(notification2Save, feed, comments, commentKey)) // the original discussion
|
||||||
.append("</p>")
|
.append("</p>")
|
||||||
.append("</div><br/>")
|
.append("</div><br/>")
|
||||||
.append("<p><div style=\"color:#999999; font-size:11px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif;\">")
|
.append("<p><div style=\"color:#999999; font-size:11px; font-family:'lucida grande',tahoma,verdana,arial,sans-serif;\">")
|
||||||
|
@ -222,16 +160,126 @@ public class EmailPlugin {
|
||||||
|
|
||||||
StringBuilder body = new StringBuilder();
|
StringBuilder body = new StringBuilder();
|
||||||
|
|
||||||
String discussion = "";
|
|
||||||
if (notification2Save.getType() == NotificationType.POST_ALERT ||
|
if (notification2Save.getType() == NotificationType.POST_ALERT ||
|
||||||
notification2Save.getType() == NotificationType.COMMENT ||
|
notification2Save.getType() == NotificationType.COMMENT ||
|
||||||
notification2Save.getType() == NotificationType.MENTION ||
|
notification2Save.getType() == NotificationType.MENTION ||
|
||||||
notification2Save.getType() == NotificationType.OWN_COMMENT) {
|
notification2Save.getType() == NotificationType.OWN_COMMENT) {
|
||||||
body.append(WRITE_ABOVE_TO_REPLY).append("\n\n");
|
body.append(WRITE_ABOVE_TO_REPLY).append("\n\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
if (notification2Save.getType() == NotificationType.MESSAGE) {
|
||||||
|
body.append(WRITE_ABOVE_MESSAGE_REPLY).append("\n\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
body.append("Dear ").append(userFirstName).append(",") //dear <user>
|
||||||
|
.append("\n").append(sender).append(" ").append(removedMarkup) // has done something
|
||||||
|
.append("\nsee: ").append(portalURL).append(notification2Save.getUri())
|
||||||
|
.append(buildPlainTextDiscussion(feed, comments, commentKey))
|
||||||
|
.append("\n----\n")
|
||||||
|
.append("This message was sent to ")
|
||||||
|
.append(email)
|
||||||
|
.append(" by ")
|
||||||
|
.append(portalHost)
|
||||||
|
.append(" If you don't want to receive these emails in the future, please unsubscribe here: ")
|
||||||
|
.append(portalURL).append("/group/data-e-infrastructure-gateway/notifications .");
|
||||||
|
|
||||||
|
return body.toString();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build up a discussion given the feed and its comments.
|
||||||
|
* @param notification2Save
|
||||||
|
* @param feed
|
||||||
|
* @param comments
|
||||||
|
* @param commentKey if not null, when building the discussion stop at this comment.
|
||||||
|
* @return an html string representing the discussion
|
||||||
|
*/
|
||||||
|
private static String buildHtmlDiscussion(Notification notification2Save, Feed feed, List<Comment> comments, String commentKey){
|
||||||
|
|
||||||
|
try{
|
||||||
|
|
||||||
|
String htmlPost = "<br />" + "<br />----<p>Original post:</p>";
|
||||||
|
// data formatter
|
||||||
|
Format formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm a");
|
||||||
|
|
||||||
|
// escape html
|
||||||
|
String feedTextNoHtml = convertHTML2Text(feed.getDescription());
|
||||||
|
|
||||||
|
// build up html post + comments
|
||||||
|
if(notification2Save.getType() == NotificationType.POST_ALERT || (comments.size() == 0 && notification2Save.getType() == NotificationType.MENTION))
|
||||||
|
htmlPost += "<div style=\"margin-top: 10px; margin-bottom: 10px;padding-left: 15px; "
|
||||||
|
+ "font-style: italic; font-weight:bold\">"
|
||||||
|
+ feed.getFullName()
|
||||||
|
+ ": "
|
||||||
|
+ (feedTextNoHtml.length() > 30 ? feedTextNoHtml.substring(0, 30) + " ..." : feedTextNoHtml)
|
||||||
|
+ "<p style=\"font-family:Lucida Grande,"
|
||||||
|
+ "Verdana,Bitstream Vera Sans,Arial,sans-serif; "
|
||||||
|
+ "white-space: nowrap; font-size: smaller; color: #999;\">" + formatter.format(feed.getTime()) + "</p>"
|
||||||
|
+"</div>";
|
||||||
|
else
|
||||||
|
htmlPost += "<div style=\"margin-top: 10px; margin-bottom: 10px;padding-left: 15px; "
|
||||||
|
+ "font-style: italic\">"
|
||||||
|
+ feed.getFullName()
|
||||||
|
+ ": "
|
||||||
|
+ (feedTextNoHtml.length() > 30 ? feedTextNoHtml.substring(0, 30) + " ..." : feedTextNoHtml)
|
||||||
|
+ "<p style=\"font-family:Lucida Grande,"
|
||||||
|
+ "Verdana,Bitstream Vera Sans,Arial,sans-serif; "
|
||||||
|
+ "white-space: nowrap; font-size: smaller; color: #999;\">" + formatter.format(feed.getTime()) + "</p>"
|
||||||
|
+"</div>";
|
||||||
|
|
||||||
|
for (int i = 0; i < comments.size(); i++) {
|
||||||
|
|
||||||
|
String commentTextNoHtml = convertHTML2Text(comments.get(i).getText());
|
||||||
|
|
||||||
|
if((commentKey != null && comments.get(i).getKey().equals(commentKey)) && !(notification2Save.getType() == NotificationType.POST_ALERT)){
|
||||||
|
htmlPost += "<div style=\"margin-top: 10px; margin-bottom: 10px; margin-left: 50px; padding-left: 15px; "
|
||||||
|
+ "border-left: 3px solid #ccc; font-style: italic; font-weight:bold\">"
|
||||||
|
+ comments.get(i).getFullName()
|
||||||
|
+ ": "
|
||||||
|
+ commentTextNoHtml
|
||||||
|
+ "<p style=\"font-family:Lucida Grande,"
|
||||||
|
+ "Verdana,Bitstream Vera Sans,Arial,sans-serif; "
|
||||||
|
+ "white-space: nowrap; font-size: smaller; color: #999;\">" + formatter.format(comments.get(i).getTime()) + "</p>"
|
||||||
|
+"</div>";
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
htmlPost += "<div style=\"margin-top: 10px; margin-bottom: 10px; margin-left: 50px; padding-left: 15px; "
|
||||||
|
+ "border-left: 3px solid #ccc; font-style: italic;\">"
|
||||||
|
+ comments.get(i).getFullName()
|
||||||
|
+ ": "
|
||||||
|
+ commentTextNoHtml
|
||||||
|
+ "<p style=\"font-family:Lucida Grande,"
|
||||||
|
+ "Verdana,Bitstream Vera Sans,Arial,sans-serif; "
|
||||||
|
+ "white-space: nowrap; font-size: smaller; color: #999;\">" + formatter.format(comments.get(i).getTime()) + "</p>"
|
||||||
|
+"</div>";
|
||||||
|
}
|
||||||
|
|
||||||
|
return htmlPost;
|
||||||
|
}catch(Exception e){
|
||||||
|
_log.error("Unable to reconstruct html discussion to put into the email body.", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build a plain text discussion given a feed and its comments.
|
||||||
|
* @param feed
|
||||||
|
* @param comments
|
||||||
|
* @param commentKey if not null, when building the discussion stop at this comment.
|
||||||
|
* @return a string representing the discussion
|
||||||
|
*/
|
||||||
|
private static String buildPlainTextDiscussion(Feed feed, List<Comment> comments, String commentKey){
|
||||||
|
|
||||||
|
try{
|
||||||
|
|
||||||
// build discussion
|
// build discussion
|
||||||
discussion += "\n\nDiscussion:\n";
|
String discussion = "\n\n----\n\nOriginal post:";
|
||||||
|
|
||||||
// data formatter
|
// data formatter
|
||||||
Format formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm a");
|
Format formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm a");
|
||||||
|
|
||||||
|
@ -239,8 +287,8 @@ public class EmailPlugin {
|
||||||
String feedTextNoHtml = convertHTML2Text(feed.getDescription());
|
String feedTextNoHtml = convertHTML2Text(feed.getDescription());
|
||||||
|
|
||||||
// build up post + comments
|
// build up post + comments
|
||||||
discussion =
|
discussion +=
|
||||||
"\t"
|
"\n"
|
||||||
+ "[" + formatter.format(feed.getTime()) + "] "
|
+ "[" + formatter.format(feed.getTime()) + "] "
|
||||||
+ feed.getFullName()
|
+ feed.getFullName()
|
||||||
+ ": "
|
+ ": "
|
||||||
|
@ -253,7 +301,7 @@ public class EmailPlugin {
|
||||||
String commentTextNoHtml = convertHTML2Text(comments.get(i).getText());
|
String commentTextNoHtml = convertHTML2Text(comments.get(i).getText());
|
||||||
|
|
||||||
discussion +=
|
discussion +=
|
||||||
"\t\t\t"
|
"\t"
|
||||||
+ "[" + formatter.format(comments.get(i).getTime()) + "] "
|
+ "[" + formatter.format(comments.get(i).getTime()) + "] "
|
||||||
+ comments.get(i).getFullName()
|
+ comments.get(i).getFullName()
|
||||||
+ ": "
|
+ ": "
|
||||||
|
@ -264,29 +312,16 @@ public class EmailPlugin {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return discussion;
|
||||||
}
|
}
|
||||||
if (notification2Save.getType() == NotificationType.MESSAGE) {
|
catch(Exception e){
|
||||||
body.append(WRITE_ABOVE_MESSAGE_REPLY).append("\n\n");
|
_log.error("Unable to reconstruct plain text discussion to put into the email body.", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
body.append("Dear ").append(userFirstName).append(",") //dear <user>
|
return "";
|
||||||
.append("\n").append(sender).append(" ").append(removedMarkup) // has done something
|
|
||||||
.append("\nsee: ").append(portalURL).append(notification2Save.getUri()).append( " if you want to reply.")
|
|
||||||
.append(discussion)
|
|
||||||
.append("\n\n\n----\n")
|
|
||||||
.append("This message was sent to ")
|
|
||||||
.append(email)
|
|
||||||
.append(" by ")
|
|
||||||
.append(portalHost)
|
|
||||||
.append(" If you don't want to receive these emails in the future, please unsubscribe here: ")
|
|
||||||
.append(portalURL).append("/group/data-e-infrastructure-gateway/notifications .");
|
|
||||||
|
|
||||||
return body.toString();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert html into simple text
|
* Convert html into simple text
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue