X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdatabase%2Fmemory%2FMemoryDatabase.java;h=bfea5e2fb153d357d865aafcec77037eb56c0869;hb=858555f647a1c39b2a6707192bdb8f32107aa5dd;hp=813dc422a561d96dd268ece2171721c7c0a9780b;hpb=b282ae4881da1f8329fded3369bc08d6aaee6e7b;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java b/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java index 813dc42..bfea5e2 100644 --- a/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java +++ b/src/main/java/net/pterodactylus/sone/database/memory/MemoryDatabase.java @@ -50,6 +50,7 @@ import net.pterodactylus.sone.core.ConfigurationSoneParser.InvalidPostReplyFound import net.pterodactylus.sone.data.Album; import net.pterodactylus.sone.data.Client; import net.pterodactylus.sone.data.Image; +import net.pterodactylus.sone.data.LocalSone; import net.pterodactylus.sone.data.Post; import net.pterodactylus.sone.data.PostReply; import net.pterodactylus.sone.data.Profile; @@ -131,6 +132,7 @@ public class MemoryDatabase extends AbstractService implements Database { private final Map allImages = new HashMap(); private final Multimap soneImages = HashMultimap.create(); + private final MemorySoneDatabase soneDatabase; private final MemoryPostDatabase postDatabase; private final MemoryBookmarkDatabase memoryBookmarkDatabase; private final MemoryFriendDatabase memoryFriendDatabase; @@ -148,6 +150,7 @@ public class MemoryDatabase extends AbstractService implements Database { this.soneProvider = soneProvider; this.configuration = configuration; this.configurationLoader = new ConfigurationLoader(configuration); + soneDatabase = new MemorySoneDatabase(configurationLoader); postDatabase = new MemoryPostDatabase(this, configurationLoader); memoryBookmarkDatabase = new MemoryBookmarkDatabase(this, configurationLoader); @@ -158,16 +161,28 @@ public class MemoryDatabase extends AbstractService implements Database { // DATABASE METHODS // + @Override + public Optional getLocalSone(String localSoneId) { + lock.readLock().lock(); + try { + if (!localSones.contains(localSoneId)) { + return Optional.absent(); + } + return Optional.of((LocalSone) allSones.get(localSoneId)); + } finally { + lock.readLock().unlock(); + } + } @Override - public Sone registerLocalSone(OwnIdentity ownIdentity) { - final Sone localSone = loadLocalSone(ownIdentity); + public LocalSone registerLocalSone(OwnIdentity ownIdentity) { + final LocalSone localSone = loadLocalSone(ownIdentity); localSones.add(ownIdentity.getId()); return localSone; } - private Sone loadLocalSone(OwnIdentity ownIdentity) { - Sone localSone = newSoneBuilder().local().from(ownIdentity).build(); + private LocalSone loadLocalSone(OwnIdentity ownIdentity) { + LocalSone localSone = (LocalSone) newSoneBuilder().local().from(ownIdentity).build(); localSone.setLatestEdition( Optional.fromNullable( Longs.tryParse(ownIdentity.getProperty(LATEST_EDITION_PROPERTY))) @@ -179,7 +194,7 @@ public class MemoryDatabase extends AbstractService implements Database { return localSone; } - public void loadSone(Sone sone) { + public void loadSone(LocalSone sone) { long soneTime = configurationLoader.getLocalSoneTime(sone.getId()); if (soneTime == -1) { return; @@ -448,6 +463,7 @@ public class MemoryDatabase extends AbstractService implements Database { /** {@inheritDocs} */ @Override protected void doStart() { + soneDatabase.start(); postDatabase.start(); memoryBookmarkDatabase.start(); loadKnownPostReplies(); @@ -458,6 +474,7 @@ public class MemoryDatabase extends AbstractService implements Database { @Override protected void doStop() { try { + soneDatabase.stop(); postDatabase.stop(); memoryBookmarkDatabase.stop(); save(); @@ -488,6 +505,16 @@ public class MemoryDatabase extends AbstractService implements Database { } } + @Override + public boolean isSoneKnown(Sone sone) { + return soneDatabase.isKnownSone(sone.getId()); + } + + @Override + public void setSoneKnown(Sone sone) { + soneDatabase.setSoneKnown(sone.getId()); + } + private void storePosts(String soneId, Collection posts) { postDatabase.storePosts(soneId, posts); } @@ -570,10 +597,16 @@ public class MemoryDatabase extends AbstractService implements Database { } @Override - public Collection getLocalSones() { + public Collection getLocalSones() { lock.readLock().lock(); try { - return from(allSones.values()).filter(LOCAL_SONE_FILTER).toSet(); + return from(allSones.values()).filter(LOCAL_SONE_FILTER).transform(new Function() { + @Override + public LocalSone apply(Sone sone) { + // FIXME – Sones will not always implement LocalSone + return (LocalSone) sone; + } + }).toSet(); } finally { lock.readLock().unlock(); } @@ -591,7 +624,7 @@ public class MemoryDatabase extends AbstractService implements Database { } @Override - public Collection getFriends(Sone localSone) { + public Collection getFriends(LocalSone localSone) { if (!localSone.isLocal()) { return Collections.emptySet(); } @@ -599,7 +632,7 @@ public class MemoryDatabase extends AbstractService implements Database { } @Override - public boolean isFriend(Sone localSone, String friendSoneId) { + public boolean isFriend(LocalSone localSone, String friendSoneId) { if (!localSone.isLocal()) { return false; }