X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Ftext%2FSoneTextParser.java;h=7319b2b71baef195b5a1caa346dbc6f21659c5ec;hb=2c66e80b5bc96df18f02757201edd83fd8af6d94;hp=a093e46e213803bdaf07588d084d6e060f76f76c;hpb=b04f97f923dcae625ee2aaa15491c75864936b82;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/text/SoneTextParser.java b/src/main/java/net/pterodactylus/sone/text/SoneTextParser.java index a093e46..7319b2b 100644 --- a/src/main/java/net/pterodactylus/sone/text/SoneTextParser.java +++ b/src/main/java/net/pterodactylus/sone/text/SoneTextParser.java @@ -17,6 +17,8 @@ package net.pterodactylus.sone.text; +import static java.util.logging.Logger.getLogger; + import java.io.BufferedReader; import java.io.IOException; import java.io.Reader; @@ -26,12 +28,15 @@ import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; -import net.pterodactylus.sone.core.PostProvider; -import net.pterodactylus.sone.core.SoneProvider; import net.pterodactylus.sone.data.Post; import net.pterodactylus.sone.data.Sone; +import net.pterodactylus.sone.data.impl.IdOnlySone; +import net.pterodactylus.sone.database.PostProvider; +import net.pterodactylus.sone.database.SoneProvider; import net.pterodactylus.util.io.Closer; -import net.pterodactylus.util.logging.Logging; + +import com.google.common.base.Optional; + import freenet.keys.FreenetURI; /** @@ -42,7 +47,7 @@ import freenet.keys.FreenetURI; public class SoneTextParser implements Parser { /** The logger. */ - private static final Logger logger = Logging.getLogger(SoneTextParser.class); + private static final Logger logger = getLogger(SoneTextParser.class.getName()); /** Pattern to detect whitespace. */ private static final Pattern whitespacePattern = Pattern.compile("[\\u000a\u0020\u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u200c\u200d\u202f\u205f\u2060\u2800\u3000]"); @@ -54,41 +59,21 @@ public class SoneTextParser implements Parser { */ private enum LinkType { - /** Link is a KSK. */ - KSK("KSK@"), - - /** Link is a CHK. */ - CHK("CHK@"), - - /** Link is an SSK. */ - SSK("SSK@"), - - /** Link is a USK. */ - USK("USK@"), - - /** Link is HTTP. */ - HTTP("http://"), - - /** Link is HTTPS. */ - HTTPS("https://"), + KSK("KSK@", true), + CHK("CHK@", true), + SSK("SSK@", true), + USK("USK@", true), + HTTP("http://", false), + HTTPS("https://", false), + SONE("sone://", false), + POST("post://", false); - /** Link is a Sone. */ - SONE("sone://"), - - /** Link is a post. */ - POST("post://"); - - /** The scheme identifying this link type. */ private final String scheme; + private final boolean freenetLink; - /** - * Creates a new link type identified by the given scheme. - * - * @param scheme - * The scheme of the link type - */ - private LinkType(String scheme) { + LinkType(String scheme, boolean freenetLink) { this.scheme = scheme; + this.freenetLink = freenetLink; } /** @@ -100,6 +85,10 @@ public class SoneTextParser implements Parser { return scheme; } + public boolean isFreenetLink() { + return freenetLink; + } + } /** The Sone provider. */ @@ -206,7 +195,7 @@ public class SoneTextParser implements Parser { } /* cut off “freenet:” from before keys. */ - if (((linkType == LinkType.KSK) || (linkType == LinkType.CHK) || (linkType == LinkType.SSK) || (linkType == LinkType.USK)) && (next >= 8) && (line.substring(next - 8, next).equals("freenet:"))) { + if (linkType.isFreenetLink() && (next >= 8) && (line.substring(next - 8, next).equals("freenet:"))) { next -= 8; line = line.substring(0, next) + line.substring(next + 8); } @@ -239,15 +228,15 @@ public class SoneTextParser implements Parser { if (linkType == LinkType.SONE) { if (line.length() >= (7 + 43)) { String soneId = line.substring(7, 50); - Sone sone = soneProvider.getSone(soneId, false); - if (sone == null) { + Optional sone = soneProvider.getSone(soneId); + if (!sone.isPresent()) { /* * don’t use create=true above, we don’t want * the empty shell. */ - sone = new Sone(soneId, false); + sone = Optional.of(new IdOnlySone(soneId)); } - parts.add(new SonePart(sone)); + parts.add(new SonePart(sone.get())); line = line.substring(50); } else { parts.add(new PlainTextPart(line)); @@ -258,9 +247,9 @@ public class SoneTextParser implements Parser { if (linkType == LinkType.POST) { if (line.length() >= (7 + 36)) { String postId = line.substring(7, 43); - Post post = postProvider.getPost(postId); - if ((post != null) && (post.getSone() != null)) { - parts.add(new PostPart(post)); + Optional post = postProvider.getPost(postId); + if (post.isPresent()) { + parts.add(new PostPart(post.get())); } else { parts.add(new PlainTextPart(line.substring(0, 43))); }