Improving code

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/social-networking/social-util-library@176904 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Luca Frosini 2019-01-31 14:34:02 +00:00
parent f6e7654ee3
commit 1bd21cd2d8
6 changed files with 138 additions and 49 deletions

View File

@ -3,9 +3,12 @@ package org.gcube.socialnetworking.socialtoken;
import org.gcube.portal.databook.client.GCubeSocialNetworking; import org.gcube.portal.databook.client.GCubeSocialNetworking;
import org.gcube.socialnetworking.tokenization.Token; import org.gcube.socialnetworking.tokenization.Token;
/**
* @author Luca Frosini (ISTI - CNR)
*/
public class HashTagToken extends ReplaceableToken { public class HashTagToken extends ReplaceableToken {
protected SanitizedHashTag sanitizedTag; protected SanitizedHashTag sanitizedHashTag;
public HashTagToken(String token, String delimiter, int start, int end) { public HashTagToken(String token, String delimiter, int start, int end) {
super(token, delimiter, start, end); super(token, delimiter, start, end);
@ -18,23 +21,32 @@ public class HashTagToken extends ReplaceableToken {
public String getTokenReplacement() { public String getTokenReplacement() {
if(!replaced) { if(!replaced) {
try { try {
String tag = getTag(); String hashTag = getHashTag();
String linkTarget = ReplaceableToken.createHref("", GCubeSocialNetworking.HASHTAG_OID, tag); String linkTarget = ReplaceableToken.createHref("", GCubeSocialNetworking.HASHTAG_OID, hashTag);
tokenReplacement = ReplaceableToken.createLink(linkTarget, tag, null) + sanitizedTag.getPostfix(); tokenReplacement = sanitizedHashTag.getPrefix() + ReplaceableToken.createLink(linkTarget, hashTag, null) + sanitizedHashTag.getPostfix();
} catch(Exception e) { } catch(Exception e) {
tokenReplacement = token; tokenReplacement = token;
} }
replaced = true; replaced = true;
} }
return tokenReplacement; return tokenReplacement;
} }
public String getTag() throws Exception { public String getHashTag() throws Exception {
if(sanitizedTag==null) { if(sanitizedHashTag==null) {
sanitizedTag = new SanitizedHashTag(token); sanitizedHashTag = new SanitizedHashTag(token);
} }
return sanitizedTag.getTag(); return sanitizedHashTag.getHashTag();
} }
public static SanitizedHashTag isHashTag(String hastag) {
try {
return new SanitizedHashTag(hastag);
} catch(IllegalArgumentException e) {
// not an HashTag
return null;
}
}
} }

View File

@ -1,45 +1,74 @@
package org.gcube.socialnetworking.socialtoken; package org.gcube.socialnetworking.socialtoken;
import java.util.Objects;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
public class SanitizedHashTag { public class SanitizedHashTag {
private static final String TAG_REGEX = "^#[\\w-_]*"; private static final String RECOGNIZE_HASHTAG_REGEX = "^.{0,3}#[\\w-]*[\\W]{0,3}";
private static final Pattern RECOGNIZE_HASHTAG_PATTERN;
private static final Pattern pattern; private static final String HASHTAG_REGEX = "#[\\w-]*";
private static final Pattern HASHTAG_PATTERN;
static { static {
pattern = Pattern.compile(TAG_REGEX); HASHTAG_PATTERN = Pattern.compile(HASHTAG_REGEX);
RECOGNIZE_HASHTAG_PATTERN = Pattern.compile(RECOGNIZE_HASHTAG_REGEX);
} }
protected String tag; protected String prefix;
protected String hashTag;
protected String postfix; protected String postfix;
public SanitizedHashTag(String string) throws Exception { public SanitizedHashTag(String string) throws IllegalArgumentException {
if(string==null || string.compareTo("")==0 || !string.startsWith("#")) { if(Objects.isNull(string) || string.isEmpty()) {
throw new Exception(string + "is not a valid TAG"); throw new IllegalArgumentException(string + " is not a valid TAG");
} }
Matcher recognizeMatcher = SanitizedHashTag.RECOGNIZE_HASHTAG_PATTERN.matcher(string);
if(!recognizeMatcher.find()) {
throw new IllegalArgumentException(string + " is not a valid TAG");
}else {
if(recognizeMatcher.end()!=(string.length())) {
throw new IllegalArgumentException(string + " is not a valid TAG");
}
}
Matcher matcher = SanitizedHashTag.pattern.matcher(string); Matcher matcher = SanitizedHashTag.HASHTAG_PATTERN.matcher(string);
if(matcher.find()) { if(matcher.find()) {
tag = string.substring(matcher.start(), matcher.end()); prefix = string.substring(0,matcher.start());
hashTag = string.substring(matcher.start(), matcher.end());
postfix = string.substring(matcher.end()); postfix = string.substring(matcher.end());
}else { }else {
throw new Exception(string + "is not a valid TAG"); throw new IllegalArgumentException(string + " is not a valid TAG");
} }
} }
public String getTag() { public String getPrefix() {
return tag; return prefix;
}
public String getHashTag() {
return hashTag;
} }
public String getPostfix() { public String getPostfix() {
return postfix; return postfix;
} }
public String toString() {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("Prefix : '");
stringBuffer.append(prefix);
stringBuffer.append("' - Hashtag : '");
stringBuffer.append(hashTag);
stringBuffer.append("' - Postfix : '");
stringBuffer.append(postfix);
stringBuffer.append("'");
return stringBuffer.toString();
}
} }

View File

@ -2,6 +2,7 @@ package org.gcube.socialnetworking.socialtoken;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.util.Objects;
public class SanitizedURL { public class SanitizedURL {
@ -12,7 +13,7 @@ public class SanitizedURL {
protected final URL url; protected final URL url;
public SanitizedURL(String urlString) throws MalformedURLException { public SanitizedURL(String urlString) throws MalformedURLException {
if(urlString==null || urlString.compareTo("")==0) { if(Objects.isNull(urlString) || urlString.isEmpty()) {
throw new MalformedURLException(); throw new MalformedURLException();
} }

View File

@ -1,7 +1,6 @@
package org.gcube.socialnetworking.socialtoken; package org.gcube.socialnetworking.socialtoken;
import java.io.StringWriter; import java.io.StringWriter;
import java.net.URL;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -44,26 +43,28 @@ public class SocialMessageParser {
GCubeStringTokenizer socialStringTokenizer = new GCubeStringTokenizer(originalMessage); GCubeStringTokenizer socialStringTokenizer = new GCubeStringTokenizer(originalMessage);
for(Token token : socialStringTokenizer.getTokens()) { for(Token token : socialStringTokenizer.getTokens()) {
String tokenString = token.getToken(); String tokenString = token.getToken();
if(tokenString.startsWith("#")) {
HashTagToken tagToken = new HashTagToken(token);
try {
hashtags.add(tagToken.getTag());
tokens.add(tagToken);
tagTokens.add(tagToken);
continue;
}catch (Exception e) {
// Not a valid tag
}
}
URL url = URLToken.isURL(tokenString); SanitizedURL sanitizedURL = URLToken.isURL(tokenString);
if(url!=null) { if(sanitizedURL!=null) {
URLToken urlToken = new URLToken(token); URLToken urlToken = new URLToken(token);
tokens.add(urlToken); tokens.add(urlToken);
urlTokens.add(urlToken); urlTokens.add(urlToken);
continue; continue;
} }
SanitizedHashTag sanitizedHashTag = HashTagToken.isHashTag(tokenString);
if(sanitizedHashTag!=null) {
HashTagToken hashTagToken = new HashTagToken(token);
try {
hashtags.add(hashTagToken.getHashTag());
tokens.add(hashTagToken);
tagTokens.add(hashTagToken);
continue;
}catch (Exception e) {
// Not a valid tag
}
}
ReplaceableToken replaceableToken = new ReplaceableToken(token); ReplaceableToken replaceableToken = new ReplaceableToken(token);
tokens.add(replaceableToken); tokens.add(replaceableToken);
} }

View File

@ -19,17 +19,6 @@ public class URLToken extends ReplaceableToken {
super(token); super(token);
} }
public static URL isURL(String url) {
try {
SanitizedURL sanitizedURL = new SanitizedURL(url);
return sanitizedURL.getURL();
} catch(MalformedURLException e) {
// not an URL
return null;
}
}
public String getTokenReplacement() { public String getTokenReplacement() {
if(!replaced) { if(!replaced) {
try { try {
@ -52,4 +41,13 @@ public class URLToken extends ReplaceableToken {
return sanitizedURL.getURL(); return sanitizedURL.getURL();
} }
public static SanitizedURL isURL(String url) {
try {
return new SanitizedURL(url);
} catch(MalformedURLException e) {
// not an URL
return null;
}
}
} }

View File

@ -5,9 +5,11 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.gcube.portlets.widgets.pickitem.shared.ItemBean; import org.gcube.portlets.widgets.pickitem.shared.ItemBean;
import org.gcube.socialnetworking.socialtoken.SanitizedHashTag;
import org.gcube.socialnetworking.socialtoken.SanitizedURL; import org.gcube.socialnetworking.socialtoken.SanitizedURL;
import org.gcube.socialnetworking.socialtoken.SocialMessageParser; import org.gcube.socialnetworking.socialtoken.SocialMessageParser;
import org.gcube.socialnetworking.socialtoken.URLToken; import org.gcube.socialnetworking.socialtoken.URLToken;
import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -91,7 +93,7 @@ public class MessageParserTest {
SocialMessageParser messageParser = new SocialMessageParser(TEST_LUCA_6); SocialMessageParser messageParser = new SocialMessageParser(TEST_LUCA_6);
logger.debug(messageParser.getParsedMessage()); logger.debug(messageParser.getParsedMessage());
messageParser = new SocialMessageParser(TEST_LUCA_7); messageParser = new SocialMessageParser(TEST_LUCA_7);
logger.debug(messageParser.getParsedMessage()); logger.debug("{}", messageParser.getParsedMessage());
} }
@ -118,5 +120,51 @@ public class MessageParserTest {
text = "post \"a text with #hashtag);\""; text = "post \"a text with #hashtag);\"";
SocialMessageParser messageParser = new SocialMessageParser(text); SocialMessageParser messageParser = new SocialMessageParser(text);
logger.debug(messageParser.getParsedMessage()); logger.debug(messageParser.getParsedMessage());
text = "\"#hashtag and #hashtag repeated.";
messageParser = new SocialMessageParser(text);
logger.debug(messageParser.getParsedMessage());
}
@Test
public void checkHashTag() throws Exception {
String token = "\"#hashtag\"";
SanitizedHashTag sanitizedHashTag = new SanitizedHashTag(token);
logger.trace("{}", sanitizedHashTag);
Assert.assertTrue(sanitizedHashTag.getPrefix().compareTo("\"")==0);
Assert.assertTrue(sanitizedHashTag.getHashTag().compareTo("#hashtag")==0);
Assert.assertTrue(sanitizedHashTag.getPostfix().compareTo("\"")==0);
}
@Test(expected=IllegalArgumentException.class)
public void hasTagwithURL() throws Exception {
String token = "https://wiki.gcube-system.org/gcube/GCat_Background#GeoSpatial_search_for_datasets:_via_API_or_Search_Widget";
new SanitizedHashTag(token);
}
@Test
public void checkHashTag2() throws Exception {
String token = "\"#hashtag\");";
SanitizedHashTag sanitizedHashTag = new SanitizedHashTag(token);
logger.trace("{}", sanitizedHashTag);
Assert.assertTrue(sanitizedHashTag.getPrefix().compareTo("\"")==0);
Assert.assertTrue(sanitizedHashTag.getHashTag().compareTo("#hashtag")==0);
Assert.assertTrue(sanitizedHashTag.getPostfix().compareTo("\");")==0);
}
@Test
public void checkHashTag3() throws Exception {
String token = ";(\"#hashtag\");";
SanitizedHashTag sanitizedHashTag = new SanitizedHashTag(token);
logger.trace("{}", sanitizedHashTag);
Assert.assertTrue(sanitizedHashTag.getPrefix().compareTo(";(\"")==0);
Assert.assertTrue(sanitizedHashTag.getHashTag().compareTo("#hashtag")==0);
Assert.assertTrue(sanitizedHashTag.getPostfix().compareTo("\");")==0);
}
@Test(expected=IllegalArgumentException.class)
public void checkHashTag4() throws Exception {
String token = ";(\"#hashtag\");]";
new SanitizedHashTag(token);
} }
} }