+ return Filters.filteredCollection(soneCache.values(), new Filter<Sone>() {
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @SuppressWarnings("synthetic-access")
+ public boolean filterObject(Sone sone) {
+ return !blacklistedSones.contains(sone);
+ }
+ });
+ }
+
+ /**
+ * Gets all known Sones that are not local Sones.
+ *
+ * @return All remote Sones
+ */
+ public Collection<Sone> getRemoteSones() {
+ return Filters.filteredCollection(getKnownSones(), new Filter<Sone>() {
+
+ @Override
+ @SuppressWarnings("synthetic-access")
+ public boolean filterObject(Sone sone) {
+ return !blacklistedSones.contains(sone) && !localSones.contains(sone);
+ }
+ });
+ }
+
+ /**
+ * Returns all blacklisted Sones.
+ *
+ * @return All blacklisted Sones
+ */
+ public Collection<Sone> getBlacklistedSones() {
+ return Collections.unmodifiableCollection(blacklistedSones);
+ }
+
+ /**
+ * Checks whether the given Sone is blacklisted.
+ *
+ * @param sone
+ * The Sone to check
+ * @return {@code true} if this Sone is blacklisted, {@code false} otherwise
+ */
+ public boolean isBlacklistedSone(Sone sone) {
+ return blacklistedSones.contains(sone);
+ }
+
+ /**
+ * Returns the status of the given Sone.
+ *
+ * @param sone
+ * The Sone to get the status for
+ * @return The status of the Sone
+ */
+ public SoneStatus getSoneStatus(Sone sone) {
+ return soneStatuses.get(sone);
+ }
+
+ /**
+ * Sets the status of the Sone.
+ *
+ * @param sone
+ * The Sone to set the status for
+ * @param soneStatus
+ * The status of the Sone
+ */
+ public void setSoneStatus(Sone sone, SoneStatus soneStatus) {
+ soneStatuses.put(sone, soneStatus);