diff --git a/.classpath b/.classpath index 5cca4e3..7657caa 100644 --- a/.classpath +++ b/.classpath @@ -12,10 +12,14 @@ + + + + + - diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs index f9fe345..cdfe4f1 100644 --- a/.settings/org.eclipse.core.resources.prefs +++ b/.settings/org.eclipse.core.resources.prefs @@ -1,4 +1,5 @@ eclipse.preferences.version=1 encoding//src/main/java=UTF-8 encoding//src/test/java=UTF-8 +encoding//src/test/resources=UTF-8 encoding/=UTF-8 diff --git a/pom.xml b/pom.xml index 940aa36..30a2658 100644 --- a/pom.xml +++ b/pom.xml @@ -76,11 +76,6 @@ commons-codec commons-codec - - org.slf4j - slf4j-log4j12 - provided - org.slf4j slf4j-api @@ -96,10 +91,17 @@ htmlparser 2.1 + junit junit - 4.8 + 4.11 + test + + + ch.qos.logback + logback-classic + 1.0.13 test diff --git a/src/main/java/org/gcube/socialnetworking/token/ReplaceableToken.java b/src/main/java/org/gcube/socialnetworking/token/ReplaceableToken.java index 6ad6cc3..6d240a0 100644 --- a/src/main/java/org/gcube/socialnetworking/token/ReplaceableToken.java +++ b/src/main/java/org/gcube/socialnetworking/token/ReplaceableToken.java @@ -1,9 +1,50 @@ package org.gcube.socialnetworking.token; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.codec.binary.Base64; + public class ReplaceableToken extends Token { protected String tokenReplacement; + protected String createHref(String baseURL, String attributeName, String attributeValue) { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(baseURL); + stringBuilder.append("?"); + stringBuilder.append(new String(Base64.encodeBase64(attributeName.getBytes()))); + stringBuilder.append("="); + stringBuilder.append(new String(Base64.encodeBase64(attributeValue.getBytes()))); + return stringBuilder.toString(); + + } + + protected String createLink(String linkTarget, String linkValue, Map additionalAttributes) { + Map attributes = new HashMap<>(); + if(additionalAttributes!=null) { + attributes.putAll(additionalAttributes); + } + attributes.put("class", "link"); + if(!attributes.containsKey("style")) { + attributes.put("style", "font-size:14px;"); + } + attributes.put("href", linkTarget); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(""); + stringBuilder.append(linkValue); + stringBuilder.append(""); + return stringBuilder.toString(); + } + + public ReplaceableToken(Token token) { super(token.token, token.delimiter, token.start, token.end); this.tokenReplacement = token.token; @@ -14,6 +55,11 @@ public class ReplaceableToken extends Token { this.tokenReplacement = tokenReplacement; } + @Override + public String getDelimiter() { + return delimiter.replaceAll("(\r\n|\n)","
"); + } + public String getTokenReplacement() { return tokenReplacement; } diff --git a/src/main/java/org/gcube/socialnetworking/token/TagToken.java b/src/main/java/org/gcube/socialnetworking/token/TagToken.java index bc0622d..5f9802d 100644 --- a/src/main/java/org/gcube/socialnetworking/token/TagToken.java +++ b/src/main/java/org/gcube/socialnetworking/token/TagToken.java @@ -1,9 +1,23 @@ package org.gcube.socialnetworking.token; +import org.gcube.portal.databook.client.GCubeSocialNetworking; + public class TagToken extends ReplaceableToken { + private boolean replaced; + public TagToken(Token token) { - super(token, "#MY_MASSI_TAG"); + super(token); + replaced = false; + } + + public String getTokenReplacement() { + if(!replaced) { + String linkTarget = createHref("", GCubeSocialNetworking.HASHTAG_OID, token); + tokenReplacement = 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 3ab4d83..0f87d52 100644 --- a/src/main/java/org/gcube/socialnetworking/token/URLToken.java +++ b/src/main/java/org/gcube/socialnetworking/token/URLToken.java @@ -2,14 +2,12 @@ package org.gcube.socialnetworking.token; import java.net.MalformedURLException; import java.net.URL; +import java.util.HashMap; +import java.util.Map; public class URLToken extends ReplaceableToken { - - private String getReplacement(URL url) { - StringBuilder sb = new StringBuilder(); - return sb.toString(); - } + private boolean replaced; public URLToken(Token token, URL url) { super(token); @@ -30,4 +28,14 @@ public class URLToken extends ReplaceableToken { } + public String getTokenReplacement() { + if(!replaced) { + Map anchorAttibutes = new HashMap<>(1); + anchorAttibutes.put("target", "_blank"); + tokenReplacement = 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 new file mode 100644 index 0000000..0f2df1d --- /dev/null +++ b/src/test/java/org/gcube/social_networking/socialutillibrary/MessageParserTest.java @@ -0,0 +1,87 @@ +package org.gcube.social_networking.socialutillibrary; + +import java.io.StringWriter; +import java.util.List; + +import org.apache.commons.codec.binary.Base64; +import org.gcube.portal.databook.client.GCubeSocialNetworking; +import org.gcube.socialnetworking.token.Token; +import org.junit.Assert; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class MessageParserTest { + + private static final Logger logger = LoggerFactory.getLogger(MessageParserTest.class); + + + public static final String TEST_11 = + "Dear all, this is a test to ignore, to select a week for the upcoming 194th #Tcom event, " + + "hosted by #Apple in #Cupertino, please use this #Doodle: http://Doodle.com/poll/not-existing-poll \n\n" + + "We're closing the poll next Thursday 16th March."; + + public static final String TEST_12 = + "Just because I am so happy to have the SPARQL-endpoint available, \n" + + "sharing some sample SPARQL queries: \n\n" + + "* Classes & usage counts: \n" + + "https://virtuoso.parthenos.d4science.org/sparql?default-graph-uri=&query=%09SELECT+%3Fp+%28COUNT%28%3Fp%29+as+%3FpCount%29++%0D%0A%09%09%09%09%09WHERE+%7B%5B%5D+%3Fp+%5B%5D%7D%0D%0A%09%09%09%09%09GROUP+BY+%3Fp&format=text%2Fhtml&timeout=0&debug=on\n" + + "\n" + + "* properties and usage counts: \n" + + "https://virtuoso.parthenos.d4science.org/sparql?default-graph-uri=&query=SELECT+%3Ftype+%28COUNT%28%3Ftype%29+as+%3FtypeCount%29++%0D%0A%09%09%09%09%09WHERE+%7B%5B%5D+a+%3Ftype%7D%0D%0A%09%09%09%09%09GROUP+BY+%3Ftype&format=text%2Fhtml&timeout=0&debug=on\n"; + + + 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" + + "You can find it here: http://data-d.d4science.org/ctlg/NextNext/just_a_test_with_time_fields\n" + + "#Text_mining #Field_1 #B3"; + + @Test + public void test() { + String message = "Prova #Pippo Pollo http://google) :) "; + + MessageParser messageParser = new MessageParser(message); + logger.debug(messageParser.getParsedMessage()); + + messageParser = new MessageParser(TEST_11); + logger.debug(messageParser.getParsedMessage()); + + messageParser = new MessageParser(TEST_12); + logger.debug(messageParser.getParsedMessage()); + + messageParser = new MessageParser(TEST_LUCA); + logger.debug(messageParser.getParsedMessage()); + } + + @Test + public void aux() { + String message = "Prova #Pippo Pollo http://google) :) "; + + SocialStringTokenizer socialStringTokenizer = new SocialStringTokenizer(message); + + List tokens = socialStringTokenizer.getTokens(); + logger.debug("{}", tokens); + + StringWriter stringWriter = new StringWriter(); + for(Token token : tokens) { + stringWriter.append(token.getToken()); + stringWriter.append(token.getDelimiter()); + } + Assert.assertTrue(message.compareTo(stringWriter.toString())==0); + logger.debug("\n'{}'\n'{}'", message, stringWriter.toString()); + + + logger.debug(new String(Base64.encodeBase64(GCubeSocialNetworking.HASHTAG_OID.getBytes()))); + logger.debug(GCubeSocialNetworking.HASHTAG_OID); + + String hashtag = "#B3"; + logger.debug(new String(Base64.encodeBase64(hashtag.getBytes()))); + + + String taggedHTML = ""+hashtag+""; + logger.debug(taggedHTML); + } + +} diff --git a/src/test/resources/logback-test.xml b/src/test/resources/logback-test.xml new file mode 100644 index 0000000..81f8bb4 --- /dev/null +++ b/src/test/resources/logback-test.xml @@ -0,0 +1,19 @@ + + + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{0}: %msg%n + + + + + + + + + + + + \ No newline at end of file