import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import com.google.common.base.Optional;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
import com.google.common.collect.FluentIterable;
+import com.google.common.collect.HashMultimap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Multimap;
+import com.google.common.collect.Multimaps;
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
import com.google.inject.Inject;
private final Set<String> bookmarkedPosts = new HashSet<String>();
/** Trusted identities, sorted by own identities. */
- private final Map<OwnIdentity, Set<Identity>> trustedIdentities = Collections.synchronizedMap(new HashMap<OwnIdentity, Set<Identity>>());
+ private final Multimap<OwnIdentity, Identity> trustedIdentities = Multimaps.synchronizedSetMultimap(HashMultimap.<OwnIdentity, Identity>create());
/** All known albums. */
private final Map<String, Album> albums = new HashMap<String, Album>();
@Override
public Collection<Sone> getSones() {
synchronized (sones) {
- return Collections.unmodifiableCollection(sones.values());
+ return ImmutableSet.copyOf(sones.values());
}
}
@Override
public Collection<Sone> getLocalSones() {
synchronized (sones) {
- return Collections2.filter(sones.values(), new Predicate<Sone>() {
+ return FluentIterable.from(sones.values()).filter(new Predicate<Sone>() {
@Override
public boolean apply(Sone sone) {
return sone.isLocal();
}
- });
+ }).toSet();
}
}
@Override
public Collection<Sone> getRemoteSones() {
synchronized (sones) {
- return Collections2.filter(sones.values(), new Predicate<Sone>() {
+ return FluentIterable.from(sones.values()).filter(new Predicate<Sone>() {
@Override
public boolean apply(Sone sone) {
return !sone.isLocal();
}
- });
+ }).toSet();
}
}
checkNotNull(origin, "origin must not be null");
checkNotNull(target, "target must not be null");
checkArgument(origin.getIdentity() instanceof OwnIdentity, "origin’s identity must be an OwnIdentity");
- return trustedIdentities.containsKey(origin.getIdentity()) && trustedIdentities.get(origin.getIdentity()).contains(target.getIdentity());
+ return trustedIdentities.containsEntry(origin.getIdentity(), target.getIdentity());
}
/**
synchronized (bookmarkedPosts) {
for (String bookmarkedPostId : bookmarkedPosts) {
Optional<Post> post = getPost(bookmarkedPostId);
- if (!post.isPresent()) {
+ if (post.isPresent()) {
posts.add(post.get());
}
}
logger.log(Level.WARNING, "Given OwnIdentity is null!");
return null;
}
+ logger.info(String.format("Adding Sone from OwnIdentity: %s", ownIdentity));
synchronized (sones) {
final Sone sone;
try {
sone.setClient(new Client("Sone", SonePlugin.VERSION.toString()));
sone.setKnown(true);
/* TODO - load posts ’n stuff */
- trustedIdentities.put(ownIdentity, Collections.synchronizedSet(new HashSet<Identity>()));
sones.put(ownIdentity.getId(), sone);
final SoneInserter soneInserter = new SoneInserter(this, eventBus, freenetInterface, sone);
soneInserters.put(sone, soneInserter);
return null;
}
synchronized (sones) {
- final Sone sone = getRemoteSone(identity.getId(), true).setIdentity(identity);
+ final Sone sone = getRemoteSone(identity.getId(), true);
+ if (sone.isLocal()) {
+ return sone;
+ }
+ sone.setIdentity(identity);
boolean newSone = sone.getRequestUri() == null;
sone.setRequestUri(SoneUri.create(identity.getRequestUri()));
sone.setLatestEdition(Numbers.safeParseLong(identity.getProperty("Sone.LatestEdition"), (long) 0));
}
synchronized (sones) {
sone.setOptions(storedSone.get().getOptions());
+ sone.setKnown(storedSone.get().isKnown());
sones.put(sone.getId(), sone);
}
}
logger.log(Level.FINE, String.format("Tried to load non-local Sone: %s", sone));
return;
}
+ logger.info(String.format("Loading local Sone: %s", sone));
/* initialize options. */
sone.getOptions().addBooleanOption("AutoFollow", new DefaultOption<Boolean>(false));
for (PostReply reply : replies) {
reply.setKnown(true);
}
+
+ logger.info(String.format("Sone loaded successfully: %s", sone));
}
/**
public void ownIdentityRemoved(OwnIdentityRemovedEvent ownIdentityRemovedEvent) {
OwnIdentity ownIdentity = ownIdentityRemovedEvent.ownIdentity();
logger.log(Level.FINEST, String.format("Removing OwnIdentity: %s", ownIdentity));
- trustedIdentities.remove(ownIdentity);
+ trustedIdentities.removeAll(ownIdentity);
}
/**
public void identityAdded(IdentityAddedEvent identityAddedEvent) {
Identity identity = identityAddedEvent.identity();
logger.log(Level.FINEST, String.format("Adding Identity: %s", identity));
- trustedIdentities.get(identityAddedEvent.ownIdentity()).add(identity);
+ trustedIdentities.put(identityAddedEvent.ownIdentity(), identity);
addRemoteSone(identity);
}
@SuppressWarnings("synthetic-access")
public void run() {
Sone sone = getRemoteSone(identity.getId(), false);
+ if (sone.isLocal()) {
+ return;
+ }
sone.setIdentity(identity);
sone.setLatestEdition(Numbers.safeParseLong(identity.getProperty("Sone.LatestEdition"), sone.getLatestEdition()));
soneDownloader.addSone(sone);
public void identityRemoved(IdentityRemovedEvent identityRemovedEvent) {
OwnIdentity ownIdentity = identityRemovedEvent.ownIdentity();
Identity identity = identityRemovedEvent.identity();
- trustedIdentities.get(ownIdentity).remove(identity);
+ trustedIdentities.remove(ownIdentity, identity);
boolean foundIdentity = false;
- for (Entry<OwnIdentity, Set<Identity>> trustedIdentity : trustedIdentities.entrySet()) {
+ for (Entry<OwnIdentity, Collection<Identity>> trustedIdentity : trustedIdentities.asMap().entrySet()) {
if (trustedIdentity.getKey().equals(ownIdentity)) {
continue;
}