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