social-util-library/src/main/java/org/gcube/socialnetworking/token/MessageParser.java

115 lines
3.6 KiB
Java

package org.gcube.socialnetworking.token;
import java.io.StringWriter;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.gcube.common.portal.GCubePortalConstants;
import org.gcube.portal.databook.client.GCubeSocialNetworking;
import org.gcube.portlets.widgets.pickitem.shared.ItemBean;
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;
public class MessageParser {
private static final Logger logger = LoggerFactory.getLogger(MessageParser.class);
private final String originalMessage;
private StringWriter stringWriter;
private List<ReplaceableToken> tokens;
private List<String> hashtags;
public MessageParser(String message) {
this.originalMessage = message;
}
public List<ReplaceableToken> getTokens() {
if(tokens==null){
tokens = new ArrayList<>();
SocialStringTokenizer socialStringTokenizer = new SocialStringTokenizer(originalMessage);
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);
tokens.add(urlToken);
continue;
}
ReplaceableToken replaceableToken = new ReplaceableToken(token);
tokens.add(replaceableToken);
}
}
return tokens;
}
public String getParsedMessage() {
if(stringWriter==null) {
stringWriter = new StringWriter();
hashtags = new ArrayList<>();
for(ReplaceableToken token : getTokens()) {
stringWriter.append(token.getTokenReplacement());
stringWriter.append(token.getDelimiter());
if(token instanceof TagToken) {
hashtags.add(token.getToken());
}
}
}
return stringWriter.toString();
}
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;
}
public List<String> getHashtags() {
if(stringWriter==null) {
getParsedMessage();
}
return hashtags;
}
}