Implementing new Solution refs #13207
git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/social-networking/social-util-library@176732 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
ee601e09d2
commit
f69ff631eb
|
@ -0,0 +1,61 @@
|
|||
package org.gcube.social_networking.socialutillibrary;
|
||||
|
||||
import java.io.StringWriter;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.gcube.socialnetworking.token.ReplaceableToken;
|
||||
import org.gcube.socialnetworking.token.TagToken;
|
||||
import org.gcube.socialnetworking.token.Token;
|
||||
import org.gcube.socialnetworking.token.URLToken;
|
||||
|
||||
public class MessageParser {
|
||||
|
||||
private final String originalMessage;
|
||||
|
||||
private StringWriter stringWriter;
|
||||
private List<ReplaceableToken> tokens;
|
||||
|
||||
public MessageParser(String message) {
|
||||
this.originalMessage = message;
|
||||
}
|
||||
|
||||
public List<ReplaceableToken> getTokens() {
|
||||
if(tokens==null){
|
||||
tokens = new ArrayList<>();
|
||||
SocialStringTokenizer socialStringTokenizer = new SocialStringTokenizer(originalMessage);
|
||||
for(Token token : socialStringTokenizer.getTokens()) {
|
||||
String tokenString = token.getToken();
|
||||
if(tokenString.startsWith("#")) {
|
||||
TagToken tagToken = new TagToken(token);
|
||||
tokens.add(tagToken);
|
||||
continue;
|
||||
}
|
||||
|
||||
URL url = URLToken.isURL(tokenString);
|
||||
if(url!=null) {
|
||||
URLToken urlToken = new URLToken(token, url);
|
||||
tokens.add(urlToken);
|
||||
continue;
|
||||
}
|
||||
|
||||
ReplaceableToken replaceableToken = new ReplaceableToken(token);
|
||||
tokens.add(replaceableToken);
|
||||
}
|
||||
}
|
||||
return tokens;
|
||||
}
|
||||
|
||||
public String getParsedMessage() {
|
||||
if(stringWriter==null) {
|
||||
stringWriter = new StringWriter();
|
||||
for(ReplaceableToken token : getTokens()) {
|
||||
stringWriter.append(token.getTokenReplacement());
|
||||
stringWriter.append(token.getDelimiter());
|
||||
}
|
||||
}
|
||||
return stringWriter.toString();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
package org.gcube.social_networking.socialutillibrary;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.gcube.socialnetworking.token.Token;
|
||||
|
||||
public class SocialStringTokenizer {
|
||||
|
||||
private final String originalString;
|
||||
|
||||
private Pattern pattern;
|
||||
private Matcher matcher;
|
||||
|
||||
private List<Token> tokens;
|
||||
|
||||
public SocialStringTokenizer(String string) {
|
||||
this.originalString = string;
|
||||
this.pattern = Pattern.compile("\\s");
|
||||
this.matcher = pattern.matcher(originalString);
|
||||
}
|
||||
|
||||
public List<Token> getTokens() {
|
||||
if(tokens==null) {
|
||||
tokens = new ArrayList<>();
|
||||
int tokenStart = 0;
|
||||
while(matcher.find()) {
|
||||
int tokenEnd = matcher.start();
|
||||
String tokenString = originalString.substring(tokenStart, tokenEnd);
|
||||
int delimiterStart = tokenEnd;
|
||||
int delimiterEnd = matcher.end();
|
||||
String delimiter = originalString.substring(delimiterStart, delimiterEnd);
|
||||
Token token = new Token(tokenString, delimiter, tokenStart, tokenEnd);
|
||||
tokens.add(token);
|
||||
tokenStart = delimiterEnd;
|
||||
}
|
||||
if(tokenStart!=originalString.length()){
|
||||
int tokenEnd = originalString.length();
|
||||
String tokenString = originalString.substring(tokenStart, tokenEnd);
|
||||
Token token = new Token(tokenString, "", tokenStart, tokenEnd);
|
||||
tokens.add(token);
|
||||
}
|
||||
}
|
||||
return tokens;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
package org.gcube.socialnetworking.token;
|
||||
|
||||
public class ReplaceableToken extends Token {
|
||||
|
||||
protected String tokenReplacement;
|
||||
|
||||
public ReplaceableToken(Token token) {
|
||||
super(token.token, token.delimiter, token.start, token.end);
|
||||
this.tokenReplacement = token.token;
|
||||
}
|
||||
|
||||
public ReplaceableToken(Token token, String tokenReplacement) {
|
||||
super(token.token, token.delimiter, token.start, token.end);
|
||||
this.tokenReplacement = tokenReplacement;
|
||||
}
|
||||
|
||||
public String getTokenReplacement() {
|
||||
return tokenReplacement;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
package org.gcube.socialnetworking.token;
|
||||
|
||||
public class TagToken extends ReplaceableToken {
|
||||
|
||||
public TagToken(Token token) {
|
||||
super(token, "#MY_MASSI_TAG");
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
package org.gcube.socialnetworking.token;
|
||||
|
||||
public class Token{
|
||||
|
||||
final String token;
|
||||
final String delimiter;
|
||||
final int start;
|
||||
final int end;
|
||||
|
||||
/**
|
||||
* @param token the Token String
|
||||
* @param delimiter the delimiter after token
|
||||
* @param start the start point in the original String
|
||||
* @param end the end point in the original String
|
||||
*/
|
||||
public Token(String token, String delimiter, int start, int end){
|
||||
this.token = token;
|
||||
this.delimiter = delimiter;
|
||||
this.start = start;
|
||||
this.end = end;
|
||||
}
|
||||
|
||||
public String getToken() {
|
||||
return token;
|
||||
}
|
||||
|
||||
public String getDelimiter() {
|
||||
return delimiter;
|
||||
}
|
||||
|
||||
public int getStart() {
|
||||
return start;
|
||||
}
|
||||
|
||||
public int getEnd() {
|
||||
return end;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format("Token '%s', Subsequent delimiter '%s', Start '%d', End '%d'", token, delimiter, start, end);
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
package org.gcube.socialnetworking.token;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
|
||||
public class URLToken extends ReplaceableToken {
|
||||
|
||||
|
||||
private String getReplacement(URL url) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public URLToken(Token token, URL url) {
|
||||
super(token);
|
||||
this.tokenReplacement = "___URL____";
|
||||
}
|
||||
|
||||
|
||||
public static URL isURL(String string) {
|
||||
if(string.startsWith("www.")) {
|
||||
string = "http://" + string;
|
||||
}
|
||||
try {
|
||||
return new URL(string);
|
||||
} catch(MalformedURLException e) {
|
||||
// not an URL
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue