From 42e1e85992dce752841d066eb00e05c71fb887c5 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Fri, 25 Jan 2019 14:27:32 +0000 Subject: [PATCH] Fixing find hastag git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/social-networking/social-util-library@176823 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../socialtoken/SanitizedTag.java | 45 +++++++++++++++++++ .../socialtoken/SanitizedURL.java | 4 +- .../socialtoken/SocialMessageParser.java | 12 +++-- .../socialtoken/TagToken.java | 19 +++++++- .../socialutillibrary/TestUnit.java | 4 ++ 5 files changed, 76 insertions(+), 8 deletions(-) create mode 100644 src/main/java/org/gcube/socialnetworking/socialtoken/SanitizedTag.java diff --git a/src/main/java/org/gcube/socialnetworking/socialtoken/SanitizedTag.java b/src/main/java/org/gcube/socialnetworking/socialtoken/SanitizedTag.java new file mode 100644 index 0000000..f80efe3 --- /dev/null +++ b/src/main/java/org/gcube/socialnetworking/socialtoken/SanitizedTag.java @@ -0,0 +1,45 @@ +package org.gcube.socialnetworking.socialtoken; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class SanitizedTag { + + private static final String TAG_REGEX = "^#[\\w-_]*"; + + private static final Pattern pattern; + + static { + pattern = Pattern.compile(TAG_REGEX); + } + + protected String tag; + protected String postfix; + + public SanitizedTag(String string) throws Exception { + if(string==null || string.compareTo("")==0 || !string.startsWith("#")) { + throw new Exception(string + "is not a valid TAG"); + } + + + Matcher matcher = SanitizedTag.pattern.matcher(string); + + if(matcher.find()) { + tag = string.substring(matcher.start(), matcher.end()); + postfix = string.substring(matcher.end()); + }else { + throw new Exception(string + "is not a valid TAG"); + } + } + + public String getTag() { + return tag; + } + + public String getPostfix() { + return postfix; + } + + + +} \ No newline at end of file diff --git a/src/main/java/org/gcube/socialnetworking/socialtoken/SanitizedURL.java b/src/main/java/org/gcube/socialnetworking/socialtoken/SanitizedURL.java index 7754917..97a082f 100644 --- a/src/main/java/org/gcube/socialnetworking/socialtoken/SanitizedURL.java +++ b/src/main/java/org/gcube/socialnetworking/socialtoken/SanitizedURL.java @@ -5,7 +5,7 @@ import java.net.URL; public class SanitizedURL { - private static String FINAL_CHARACTERS_TO_REMOVE_FROM_LINK = "[\\.\\,\\;\\)\\:]"; + private static String FINAL_CHARACTERS_TO_REMOVE = "[\\.\\,\\;\\)\\:]"; protected String prefix; protected String postfix; @@ -27,7 +27,7 @@ public class SanitizedURL { } postfix = urlString.substring(urlString.length()-1); - if(postfix.matches(FINAL_CHARACTERS_TO_REMOVE_FROM_LINK)) { + if(postfix.matches(FINAL_CHARACTERS_TO_REMOVE)) { urlString = urlString.substring(0, urlString.length()-1); }else { postfix = ""; diff --git a/src/main/java/org/gcube/socialnetworking/socialtoken/SocialMessageParser.java b/src/main/java/org/gcube/socialnetworking/socialtoken/SocialMessageParser.java index a93f05a..9ea1d92 100644 --- a/src/main/java/org/gcube/socialnetworking/socialtoken/SocialMessageParser.java +++ b/src/main/java/org/gcube/socialnetworking/socialtoken/SocialMessageParser.java @@ -46,10 +46,14 @@ public class SocialMessageParser { String tokenString = token.getToken(); if(tokenString.startsWith("#")) { TagToken tagToken = new TagToken(token); - tokens.add(tagToken); - tagTokens.add(tagToken); - hashtags.add(tagToken.getToken()); - continue; + try { + hashtags.add(tagToken.getTag()); + tokens.add(tagToken); + tagTokens.add(tagToken); + continue; + }catch (Exception e) { + // Not a valid tag + } } URL url = URLToken.isURL(tokenString); diff --git a/src/main/java/org/gcube/socialnetworking/socialtoken/TagToken.java b/src/main/java/org/gcube/socialnetworking/socialtoken/TagToken.java index f0b0c1e..07b1035 100644 --- a/src/main/java/org/gcube/socialnetworking/socialtoken/TagToken.java +++ b/src/main/java/org/gcube/socialnetworking/socialtoken/TagToken.java @@ -5,6 +5,8 @@ import org.gcube.socialnetworking.tokenization.Token; public class TagToken extends ReplaceableToken { + protected SanitizedTag sanitizedTag; + public TagToken(String token, String delimiter, int start, int end) { super(token, delimiter, start, end); } @@ -15,11 +17,24 @@ public class TagToken extends ReplaceableToken { public String getTokenReplacement() { if(!replaced) { - String linkTarget = ReplaceableToken.createHref("", GCubeSocialNetworking.HASHTAG_OID, super.token); - tokenReplacement = ReplaceableToken.createLink(linkTarget, token, null); + try { + String tag = getTag(); + String linkTarget = ReplaceableToken.createHref("", GCubeSocialNetworking.HASHTAG_OID, tag); + tokenReplacement = ReplaceableToken.createLink(linkTarget, tag, null) + sanitizedTag.getPostfix(); + } catch(Exception e) { + tokenReplacement = token; + } + replaced = true; } return tokenReplacement; } + public String getTag() throws Exception { + if(sanitizedTag==null) { + sanitizedTag = new SanitizedTag(token); + } + return sanitizedTag.getTag(); + } + } diff --git a/src/test/java/org/gcube/social_networking/socialutillibrary/TestUnit.java b/src/test/java/org/gcube/social_networking/socialutillibrary/TestUnit.java index 9341c8f..90cbd84 100644 --- a/src/test/java/org/gcube/social_networking/socialutillibrary/TestUnit.java +++ b/src/test/java/org/gcube/social_networking/socialutillibrary/TestUnit.java @@ -55,6 +55,10 @@ public class TestUnit { public void testTest() { String text = "Hello (https://doodle.com/poll/not-existing-poll)"; logger.debug(findFirstLink(text)); + + text = "post \"a text with #hashtag);\""; + SocialMessageParser messageParser = new SocialMessageParser(text); + logger.debug(messageParser.getParsedMessage()); } }