diff --git a/src/main/java/org/gcube/social_networking/socialutillibrary/MessageParser.java b/src/main/java/org/gcube/social_networking/socialutillibrary/MessageParser.java index 70f113f..e4c4c26 100644 --- a/src/main/java/org/gcube/social_networking/socialutillibrary/MessageParser.java +++ b/src/main/java/org/gcube/social_networking/socialutillibrary/MessageParser.java @@ -5,13 +5,23 @@ 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.socialnetworking.token.ReplaceableToken; import org.gcube.socialnetworking.token.TagToken; import org.gcube.socialnetworking.token.Token; import org.gcube.socialnetworking.token.URLToken; +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; @@ -58,4 +68,38 @@ public class MessageParser { return stringWriter.toString(); } + + public String getParsedMessage(List 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; + } } diff --git a/src/main/java/org/gcube/socialnetworking/token/ReplaceableToken.java b/src/main/java/org/gcube/socialnetworking/token/ReplaceableToken.java index 6d240a0..b2d6549 100644 --- a/src/main/java/org/gcube/socialnetworking/token/ReplaceableToken.java +++ b/src/main/java/org/gcube/socialnetworking/token/ReplaceableToken.java @@ -9,7 +9,7 @@ public class ReplaceableToken extends Token { protected String tokenReplacement; - protected String createHref(String baseURL, String attributeName, String attributeValue) { + public static String createHref(String baseURL, String attributeName, String attributeValue) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(baseURL); stringBuilder.append("?"); @@ -20,7 +20,7 @@ public class ReplaceableToken extends Token { } - protected String createLink(String linkTarget, String linkValue, Map additionalAttributes) { + public static String createLink(String linkTarget, String linkValue, Map additionalAttributes) { Map attributes = new HashMap<>(); if(additionalAttributes!=null) { attributes.putAll(additionalAttributes); diff --git a/src/main/java/org/gcube/socialnetworking/token/TagToken.java b/src/main/java/org/gcube/socialnetworking/token/TagToken.java index 5f9802d..c076086 100644 --- a/src/main/java/org/gcube/socialnetworking/token/TagToken.java +++ b/src/main/java/org/gcube/socialnetworking/token/TagToken.java @@ -13,8 +13,8 @@ public class TagToken extends ReplaceableToken { public String getTokenReplacement() { if(!replaced) { - String linkTarget = createHref("", GCubeSocialNetworking.HASHTAG_OID, token); - tokenReplacement = createLink(linkTarget, token, null); + String linkTarget = ReplaceableToken.createHref("", GCubeSocialNetworking.HASHTAG_OID, token); + tokenReplacement = ReplaceableToken.createLink(linkTarget, token, null); replaced = true; } return super.getTokenReplacement(); diff --git a/src/main/java/org/gcube/socialnetworking/token/URLToken.java b/src/main/java/org/gcube/socialnetworking/token/URLToken.java index 0f87d52..cf114df 100644 --- a/src/main/java/org/gcube/socialnetworking/token/URLToken.java +++ b/src/main/java/org/gcube/socialnetworking/token/URLToken.java @@ -32,7 +32,7 @@ public class URLToken extends ReplaceableToken { if(!replaced) { Map anchorAttibutes = new HashMap<>(1); anchorAttibutes.put("target", "_blank"); - tokenReplacement = createLink(token, token, anchorAttibutes); + tokenReplacement = ReplaceableToken.createLink(token, token, anchorAttibutes); replaced = true; } return super.getTokenReplacement(); diff --git a/src/test/java/org/gcube/social_networking/socialutillibrary/MessageParserTest.java b/src/test/java/org/gcube/social_networking/socialutillibrary/MessageParserTest.java index 0f2df1d..0b5e7d7 100644 --- a/src/test/java/org/gcube/social_networking/socialutillibrary/MessageParserTest.java +++ b/src/test/java/org/gcube/social_networking/socialutillibrary/MessageParserTest.java @@ -1,10 +1,12 @@ package org.gcube.social_networking.socialutillibrary; import java.io.StringWriter; +import java.util.ArrayList; import java.util.List; import org.apache.commons.codec.binary.Base64; import org.gcube.portal.databook.client.GCubeSocialNetworking; +import org.gcube.portlets.widgets.pickitem.shared.ItemBean; import org.gcube.socialnetworking.token.Token; import org.junit.Assert; import org.junit.Test; @@ -32,7 +34,7 @@ public class MessageParserTest { public static final String TEST_LUCA = "Dear members,\n" + - "The item 'just a test with time fields' has been just published by Francesco Mangiacrapa .\n" + + "The item 'just a test with time fields' has been just published by Francesco Mangiacrapa.\n" + "You can find it here: http://data-d.d4science.org/ctlg/NextNext/just_a_test_with_time_fields\n" + "#Text_mining #Field_1 #B3"; @@ -51,6 +53,13 @@ public class MessageParserTest { messageParser = new MessageParser(TEST_LUCA); logger.debug(messageParser.getParsedMessage()); + + List mentionedUsers = new ArrayList<>(); + ItemBean itemBean = new ItemBean("21150", "francesco.mangiacrapa", "Francesco Mangiacrapa", ""); + itemBean.setItemGroup(false); + mentionedUsers.add(itemBean); + logger.debug(messageParser.getParsedMessage(mentionedUsers, "/group/nextnext")); + } @Test