2019-01-22 18:22:17 +01:00
|
|
|
package org.gcube.social_networking.socialutillibrary;
|
|
|
|
|
|
|
|
import java.io.StringWriter;
|
|
|
|
import java.net.URL;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
|
2019-01-23 15:51:28 +01:00
|
|
|
import org.gcube.common.portal.GCubePortalConstants;
|
|
|
|
import org.gcube.portal.databook.client.GCubeSocialNetworking;
|
|
|
|
import org.gcube.portlets.widgets.pickitem.shared.ItemBean;
|
2019-01-22 18:22:17 +01:00
|
|
|
import org.gcube.socialnetworking.token.ReplaceableToken;
|
2019-01-23 16:30:36 +01:00
|
|
|
import org.gcube.socialnetworking.token.SocialStringTokenizer;
|
2019-01-22 18:22:17 +01:00
|
|
|
import org.gcube.socialnetworking.token.TagToken;
|
|
|
|
import org.gcube.socialnetworking.token.URLToken;
|
2019-01-23 16:36:14 +01:00
|
|
|
import org.gcube.socialnetworking.token.Token;
|
2019-01-23 15:51:28 +01:00
|
|
|
import org.gcube.vomanagement.usermanagement.impl.LiferayGroupManager;
|
|
|
|
import org.gcube.vomanagement.usermanagement.impl.LiferayRoleManager;
|
|
|
|
import org.gcube.vomanagement.usermanagement.model.GCubeTeam;
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
2019-01-22 18:22:17 +01:00
|
|
|
|
|
|
|
public class MessageParser {
|
|
|
|
|
2019-01-23 15:51:28 +01:00
|
|
|
private static final Logger logger = LoggerFactory.getLogger(MessageParser.class);
|
|
|
|
|
2019-01-22 18:22:17 +01:00
|
|
|
private final String originalMessage;
|
|
|
|
|
|
|
|
private StringWriter stringWriter;
|
|
|
|
private List<ReplaceableToken> tokens;
|
|
|
|
|
2019-01-23 16:51:01 +01:00
|
|
|
private List<String> hashtags;
|
|
|
|
|
2019-01-22 18:22:17 +01:00
|
|
|
public MessageParser(String message) {
|
|
|
|
this.originalMessage = message;
|
|
|
|
}
|
|
|
|
|
|
|
|
public List<ReplaceableToken> getTokens() {
|
|
|
|
if(tokens==null){
|
|
|
|
tokens = new ArrayList<>();
|
2019-01-23 16:30:36 +01:00
|
|
|
SocialStringTokenizer socialStringTokenizer = new SocialStringTokenizer(originalMessage);
|
2019-01-22 18:22:17 +01:00
|
|
|
for(Token token : socialStringTokenizer.getTokens()) {
|
|
|
|
String tokenString = token.getToken();
|
|
|
|
if(tokenString.startsWith("#")) {
|
|
|
|
TagToken tagToken = new TagToken(token);
|
|
|
|
tokens.add(tagToken);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
URL url = URLToken.isURL(tokenString);
|
|
|
|
if(url!=null) {
|
|
|
|
URLToken urlToken = new URLToken(token, url);
|
|
|
|
tokens.add(urlToken);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
ReplaceableToken replaceableToken = new ReplaceableToken(token);
|
|
|
|
tokens.add(replaceableToken);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return tokens;
|
|
|
|
}
|
|
|
|
|
|
|
|
public String getParsedMessage() {
|
|
|
|
if(stringWriter==null) {
|
|
|
|
stringWriter = new StringWriter();
|
2019-01-23 16:51:01 +01:00
|
|
|
hashtags = new ArrayList<>();
|
2019-01-22 18:22:17 +01:00
|
|
|
for(ReplaceableToken token : getTokens()) {
|
|
|
|
stringWriter.append(token.getTokenReplacement());
|
|
|
|
stringWriter.append(token.getDelimiter());
|
2019-01-23 16:51:01 +01:00
|
|
|
if(token instanceof TagToken) {
|
|
|
|
hashtags.add(token.getToken());
|
|
|
|
}
|
2019-01-22 18:22:17 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return stringWriter.toString();
|
|
|
|
}
|
|
|
|
|
2019-01-23 15:51:28 +01:00
|
|
|
|
|
|
|
public String getParsedMessage(List<ItemBean> taggedPeople, String siteLandingPagePath) {
|
|
|
|
String parsedMessage = getParsedMessage();
|
|
|
|
for (ItemBean tagged : taggedPeople) {
|
|
|
|
String baseURL;
|
|
|
|
String hrefAttributeName;
|
|
|
|
String hrefAttributeValue;
|
|
|
|
if (! tagged.isItemGroup()) {
|
|
|
|
baseURL = siteLandingPagePath+GCubePortalConstants.USER_PROFILE_FRIENDLY_URL;
|
|
|
|
hrefAttributeName = GCubeSocialNetworking.USER_PROFILE_OID;
|
|
|
|
hrefAttributeValue = tagged.getName();
|
|
|
|
} else {
|
|
|
|
try {
|
|
|
|
long teamId = Long.parseLong(tagged.getId());
|
|
|
|
GCubeTeam theTeam = new LiferayRoleManager().getTeam(teamId);
|
|
|
|
//returns the VRE url e.g. /devVRE
|
|
|
|
String vreURL = new LiferayGroupManager().getGroup(theTeam.getGroupId()).getFriendlyURL();
|
|
|
|
//append the members url
|
|
|
|
baseURL= GCubePortalConstants.PREFIX_GROUP_URL + vreURL + GCubePortalConstants.GROUP_MEMBERS_FRIENDLY_URL;
|
|
|
|
hrefAttributeName = GCubeSocialNetworking.GROUP_MEMBERS_OID;
|
|
|
|
hrefAttributeValue = tagged.getId();
|
|
|
|
} catch (Exception e) {
|
|
|
|
logger.error("Error while retrieving team {}", tagged.getAlternativeName(), e);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
String linkTarget = ReplaceableToken.createHref(baseURL, hrefAttributeName, hrefAttributeValue);
|
|
|
|
String replacement = ReplaceableToken.createLink(linkTarget, tagged.getAlternativeName(), null);
|
|
|
|
|
|
|
|
parsedMessage = parsedMessage.replace(tagged.getAlternativeName(), replacement);
|
|
|
|
}
|
|
|
|
return parsedMessage;
|
|
|
|
}
|
2019-01-23 16:51:01 +01:00
|
|
|
|
|
|
|
public List<String> getHashtags() {
|
|
|
|
if(stringWriter==null) {
|
|
|
|
getParsedMessage();
|
|
|
|
}
|
|
|
|
return hashtags;
|
|
|
|
}
|
2019-01-22 18:22:17 +01:00
|
|
|
}
|