X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FCore.java;h=d0d585f0a48458eadb14cf8099d1b8f2b3c1e9fc;hb=806ebfdf165123e880dd95c50b6aeaad25e52bb2;hp=d9060555966ca7e72ec350254fb9a7e6910be985;hpb=685be6a668a5ad675760d0d1b25e1bf945dadbfb;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/core/Core.java b/src/main/java/net/pterodactylus/sone/core/Core.java index d906055..d0d585f 100644 --- a/src/main/java/net/pterodactylus/sone/core/Core.java +++ b/src/main/java/net/pterodactylus/sone/core/Core.java @@ -29,9 +29,14 @@ import java.util.logging.Logger; import net.pterodactylus.sone.core.SoneException.Type; import net.pterodactylus.sone.data.Post; +import net.pterodactylus.sone.data.PostShell; import net.pterodactylus.sone.data.Profile; import net.pterodactylus.sone.data.Reply; +import net.pterodactylus.sone.data.ReplyShell; +import net.pterodactylus.sone.data.Shell; +import net.pterodactylus.sone.data.ShellCache; import net.pterodactylus.sone.data.Sone; +import net.pterodactylus.sone.data.SoneShell; import net.pterodactylus.util.config.Configuration; import net.pterodactylus.util.config.ConfigurationException; import net.pterodactylus.util.logging.Logging; @@ -60,6 +65,17 @@ public class Core extends AbstractService { /** Sone inserters. */ private final Map soneInserters = new HashMap(); + /* various caches follow here. */ + + /** Cache for all known Sones. */ + private final ShellCache soneCache = new ShellCache(SoneShell.creator); + + /** Cache for all known posts. */ + private final ShellCache postCache = new ShellCache(PostShell.creator); + + /** Cache for all known replies. */ + private final ShellCache replyCache = new ShellCache(ReplyShell.creator); + /** * Creates a new core. */ @@ -104,6 +120,17 @@ public class Core extends AbstractService { return Collections.unmodifiableSet(localSones); } + /** + * Returns a Sone or a {@link Shell} around one for the given ID. + * + * @param soneId + * The ID of the Sone + * @return The Sone, or a {@link Shell} around one + */ + public Sone getSone(String soneId) { + return soneCache.get(soneId); + } + // // ACTIONS // @@ -249,6 +276,7 @@ public class Core extends AbstractService { profile.setMiddleName(middleName); profile.setLastName(lastName); Sone sone = new Sone(UUID.fromString(id), name, new FreenetURI(requestUri), new FreenetURI(insertUri)); + soneCache.put(id, sone); sone.setProfile(profile); int postId = 0; do { @@ -260,8 +288,23 @@ public class Core extends AbstractService { long time = configuration.getLongValue(postPrefix + "/Time").getValue(null); String text = configuration.getStringValue(postPrefix + "/Text").getValue(null); Post post = new Post(UUID.fromString(id), sone, time, text); + postCache.put(id, post); sone.addPost(post); } while (true); + int replyCounter = 0; + do { + String replyPrefix = sonePrefix + "/Reply." + replyCounter++; + String replyId = configuration.getStringValue(replyPrefix + "/ID").getValue(null); + if (replyId == null) { + break; + } + Sone replySone = soneCache.get(configuration.getStringValue(replyPrefix + "/Sone").getValue(null)); + Post replyPost = postCache.get(configuration.getStringValue(replyPrefix + "/Post").getValue(null)); + long replyTime = configuration.getLongValue(replyPrefix + "/Time").getValue(null); + String replyText = configuration.getStringValue(replyPrefix + "/Text").getValue(null); + Reply reply = new ReplyShell().setSone(replySone).setPost(replyPost).setTime(replyTime).setText(replyText).getShelled(); + replyCache.put(replyId, reply); + } while (true); sone.setModificationCounter(modificationCounter); addSone(sone); } catch (MalformedURLException mue1) {