Merge branch 'release-0.9.7'
[Sone.git] / src / main / java / net / pterodactylus / sone / data / Sone.java
index d7a7dee..b761c7b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Sone - Sone.java - Copyright © 2010–2013 David Roden
+ * Sone - Sone.java - Copyright © 2010–2016 David Roden
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -23,17 +23,21 @@ import static net.pterodactylus.sone.data.Album.FLATTENER;
 import static net.pterodactylus.sone.data.Album.IMAGES;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Set;
 
-import net.pterodactylus.sone.core.Options;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
 import net.pterodactylus.sone.freenet.wot.Identity;
 import net.pterodactylus.sone.freenet.wot.OwnIdentity;
 import net.pterodactylus.sone.template.SoneAccessor;
 
 import freenet.keys.FreenetURI;
 
+import com.google.common.base.Function;
 import com.google.common.base.Predicate;
 import com.google.common.primitives.Ints;
 
@@ -65,30 +69,6 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
                downloading,
        }
 
-       /**
-        * The possible values for the “show custom avatars” option.
-        *
-        * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
-        */
-       public static enum ShowCustomAvatars {
-
-               /** Never show custom avatars. */
-               NEVER,
-
-               /** Only show custom avatars of followed Sones. */
-               FOLLOWED,
-
-               /** Only show custom avatars of Sones you manually trust. */
-               MANUALLY_TRUSTED,
-
-               /** Only show custom avatars of automatically trusted Sones. */
-               TRUSTED,
-
-               /** Always show custom avatars. */
-               ALWAYS,
-
-       }
-
        /** comparator that sorts Sones by their nice name. */
        public static final Comparator<Sone> NICE_NAME_COMPARATOR = new Comparator<Sone>() {
 
@@ -144,7 +124,7 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
 
                @Override
                public boolean apply(Sone sone) {
-                       return (sone == null) ? false : sone.getTime() != 0;
+                       return (sone != null) && (sone.getTime() != 0);
                }
        };
 
@@ -153,7 +133,7 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
 
                @Override
                public boolean apply(Sone sone) {
-                       return (sone == null) ? false : sone.getIdentity() instanceof OwnIdentity;
+                       return (sone != null) && (sone.getIdentity() instanceof OwnIdentity);
                }
 
        };
@@ -163,7 +143,24 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
 
                @Override
                public boolean apply(Sone sone) {
-                       return (sone == null) ? false : !sone.getRootAlbum().getAlbums().isEmpty();
+                       return (sone != null) && !sone.getRootAlbum().getAlbums().isEmpty();
+               }
+       };
+
+       public static final Function<Sone, List<Album>> toAllAlbums = new Function<Sone, List<Album>>() {
+               @Override
+               public List<Album> apply(@Nullable Sone sone) {
+                       return (sone == null) ? Collections.<Album>emptyList() : FLATTENER.apply(
+                                       sone.getRootAlbum());
+               }
+       };
+
+       public static final Function<Sone, List<Image>> toAllImages = new Function<Sone, List<Image>>() {
+               @Override
+               public List<Image> apply(@Nullable Sone sone) {
+                       return (sone == null) ? Collections.<Image>emptyList() :
+                                       from(FLATTENER.apply(sone.getRootAlbum()))
+                                                       .transformAndConcat(IMAGES).toList();
                }
        };
 
@@ -172,25 +169,15 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
         *
         * @return The identity of this Sone
         */
+       @Nonnull
        Identity getIdentity();
 
        /**
-        * Sets the identity of this Sone. The {@link Identity#getId() ID} of the
-        * identity has to match this Sone’s {@link #getId()}.
-        *
-        * @param identity
-        *              The identity of this Sone
-        * @return This Sone (for method chaining)
-        * @throws IllegalArgumentException
-        *              if the ID of the identity does not match this Sone’s ID
-        */
-       Sone setIdentity(Identity identity) throws IllegalArgumentException;
-
-       /**
         * Returns the name of this Sone.
         *
         * @return The name of this Sone
         */
+       @Nonnull
        String getName();
 
        /**
@@ -205,34 +192,18 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
         *
         * @return The request URI of this Sone
         */
+       @Nonnull
        FreenetURI getRequestUri();
 
        /**
-        * Sets the request URI of this Sone.
-        *
-        * @param requestUri
-        *              The request URI of this Sone
-        * @return This Sone (for method chaining)
-        */
-       Sone setRequestUri(FreenetURI requestUri);
-
-       /**
         * Returns the insert URI of this Sone.
         *
         * @return The insert URI of this Sone
         */
+       @Nullable
        FreenetURI getInsertUri();
 
        /**
-        * Sets the insert URI of this Sone.
-        *
-        * @param insertUri
-        *              The insert URI of this Sone
-        * @return This Sone (for method chaining)
-        */
-       Sone setInsertUri(FreenetURI insertUri);
-
-       /**
         * Returns the latest edition of this Sone.
         *
         * @return The latest edition of this Sone
@@ -263,6 +234,7 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
         *              The time of the update (in milliseconds since Jan 1, 1970 UTC)
         * @return This Sone (for method chaining)
         */
+       @Nonnull
        Sone setTime(long time);
 
        /**
@@ -270,6 +242,7 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
         *
         * @return The status of this Sone
         */
+       @Nonnull
        SoneStatus getStatus();
 
        /**
@@ -281,7 +254,8 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
         * @throws IllegalArgumentException
         *              if {@code status} is {@code null}
         */
-       Sone setStatus(SoneStatus status);
+       @Nonnull
+       Sone setStatus(@Nonnull SoneStatus status);
 
        /**
         * Returns a copy of the profile. If you want to update values in the profile
@@ -290,6 +264,7 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
         *
         * @return A copy of the profile
         */
+       @Nonnull
        Profile getProfile();
 
        /**
@@ -300,13 +275,14 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
         * @param profile
         *              The profile to set
         */
-       void setProfile(Profile profile);
+       void setProfile(@Nonnull Profile profile);
 
        /**
         * Returns the client used by this Sone.
         *
         * @return The client used by this Sone, or {@code null}
         */
+       @Nullable
        Client getClient();
 
        /**
@@ -316,7 +292,8 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
         *              The client used by this Sone, or {@code null}
         * @return This Sone (for method chaining)
         */
-       Sone setClient(Client client);
+       @Nonnull
+       Sone setClient(@Nullable Client client);
 
        /**
         * Returns whether this Sone is known.
@@ -332,6 +309,7 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
         *              {@code true} if this Sone is known, {@code false} otherwise
         * @return This Sone
         */
+       @Nonnull
        Sone setKnown(boolean known);
 
        /**
@@ -339,7 +317,8 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
         *
         * @return The friend Sones of this Sone
         */
-       List<String> getFriends();
+       @Nonnull
+       Collection<String> getFriends();
 
        /**
         * Returns whether this Sone has the given Sone as a friend Sone.
@@ -349,31 +328,14 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
         * @return {@code true} if this Sone has the given Sone as a friend, {@code
         *         false} otherwise
         */
-       boolean hasFriend(String friendSoneId);
-
-       /**
-        * Adds the given Sone as a friend Sone.
-        *
-        * @param friendSone
-        *              The friend Sone to add
-        * @return This Sone (for method chaining)
-        */
-       Sone addFriend(String friendSone);
-
-       /**
-        * Removes the given Sone as a friend Sone.
-        *
-        * @param friendSoneId
-        *              The ID of the friend Sone to remove
-        * @return This Sone (for method chaining)
-        */
-       Sone removeFriend(String friendSoneId);
+       boolean hasFriend(@Nonnull String friendSoneId);
 
        /**
         * Returns the list of posts of this Sone, sorted by time, newest first.
         *
         * @return All posts of this Sone
         */
+       @Nonnull
        List<Post> getPosts();
 
        /**
@@ -383,7 +345,8 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
         *              The new (and only) posts of this Sone
         * @return This Sone (for method chaining)
         */
-       Sone setPosts(Collection<Post> posts);
+       @Nonnull
+       Sone setPosts(@Nonnull Collection<Post> posts);
 
        /**
         * Adds the given post to this Sone. The post will not be added if its {@link
@@ -392,7 +355,7 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
         * @param post
         *              The post to add
         */
-       void addPost(Post post);
+       void addPost(@Nonnull Post post);
 
        /**
         * Removes the given post from this Sone.
@@ -400,13 +363,14 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
         * @param post
         *              The post to remove
         */
-       void removePost(Post post);
+       void removePost(@Nonnull Post post);
 
        /**
         * Returns all replies this Sone made.
         *
         * @return All replies this Sone made
         */
+       @Nonnull
        Set<PostReply> getReplies();
 
        /**
@@ -416,7 +380,8 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
         *              The new (and only) replies of this Sone
         * @return This Sone (for method chaining)
         */
-       Sone setReplies(Collection<PostReply> replies);
+       @Nonnull
+       Sone setReplies(@Nonnull Collection<PostReply> replies);
 
        /**
         * Adds a reply to this Sone. If the given reply was not made by this Sone,
@@ -425,7 +390,7 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
         * @param reply
         *              The reply to add
         */
-       void addReply(PostReply reply);
+       void addReply(@Nonnull PostReply reply);
 
        /**
         * Removes a reply from this Sone.
@@ -433,13 +398,14 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
         * @param reply
         *              The reply to remove
         */
-       void removeReply(PostReply reply);
+       void removeReply(@Nonnull PostReply reply);
 
        /**
         * Returns the IDs of all liked posts.
         *
         * @return All liked posts’ IDs
         */
+       @Nonnull
        Set<String> getLikedPostIds();
 
        /**
@@ -449,7 +415,8 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
         *              All liked posts’ IDs
         * @return This Sone (for method chaining)
         */
-       Sone setLikePostIds(Set<String> likedPostIds);
+       @Nonnull
+       Sone setLikePostIds(@Nonnull Set<String> likedPostIds);
 
        /**
         * Checks whether the given post ID is liked by this Sone.
@@ -459,7 +426,7 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
         * @return {@code true} if this Sone likes the given post, {@code false}
         *         otherwise
         */
-       boolean isLikedPostId(String postId);
+       boolean isLikedPostId(@Nonnull String postId);
 
        /**
         * Adds the given post ID to the list of posts this Sone likes.
@@ -468,22 +435,23 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
         *              The ID of the post
         * @return This Sone (for method chaining)
         */
-       Sone addLikedPostId(String postId);
+       @Nonnull
+       Sone addLikedPostId(@Nonnull String postId);
 
        /**
         * Removes the given post ID from the list of posts this Sone likes.
         *
         * @param postId
         *              The ID of the post
-        * @return This Sone (for method chaining)
         */
-       Sone removeLikedPostId(String postId);
+       void removeLikedPostId(@Nonnull String postId);
 
        /**
         * Returns the IDs of all liked replies.
         *
         * @return All liked replies’ IDs
         */
+       @Nonnull
        Set<String> getLikedReplyIds();
 
        /**
@@ -493,7 +461,8 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
         *              All liked replies’ IDs
         * @return This Sone (for method chaining)
         */
-       Sone setLikeReplyIds(Set<String> likedReplyIds);
+       @Nonnull
+       Sone setLikeReplyIds(@Nonnull Set<String> likedReplyIds);
 
        /**
         * Checks whether the given reply ID is liked by this Sone.
@@ -503,7 +472,7 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
         * @return {@code true} if this Sone likes the given reply, {@code false}
         *         otherwise
         */
-       boolean isLikedReplyId(String replyId);
+       boolean isLikedReplyId(@Nonnull String replyId);
 
        /**
         * Adds the given reply ID to the list of replies this Sone likes.
@@ -512,22 +481,23 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
         *              The ID of the reply
         * @return This Sone (for method chaining)
         */
-       Sone addLikedReplyId(String replyId);
+       @Nonnull
+       Sone addLikedReplyId(@Nonnull String replyId);
 
        /**
         * Removes the given post ID from the list of replies this Sone likes.
         *
         * @param replyId
         *              The ID of the reply
-        * @return This Sone (for method chaining)
         */
-       Sone removeLikedReplyId(String replyId);
+       void removeLikedReplyId(@Nonnull String replyId);
 
        /**
         * Returns the root album that contains all visible albums of this Sone.
         *
         * @return The root album of this Sone
         */
+       @Nonnull
        Album getRootAlbum();
 
        /**
@@ -535,7 +505,8 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
         *
         * @return The options of this Sone
         */
-       Options getOptions();
+       @Nonnull
+       SoneOptions getOptions();
 
        /**
         * Sets the options of this Sone.
@@ -544,6 +515,6 @@ public interface Sone extends Identified, Fingerprintable, Comparable<Sone> {
         *              The options of this Sone
         */
        /* TODO - remove this method again, maybe add an option provider */
-       void setOptions(Options options);
+       void setOptions(@Nonnull SoneOptions options);
 
 }