X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fdata%2FSone.java;h=836baa19d2bf560783cf305316f4334bdc63d014;hp=1b76588502033fc45ca88cc57ad98873cbd9b24c;hb=07d3fa7dac96e8a5eff41487d647974df8c26f8d;hpb=fdffe49b10613e1d9caacdf62ab99bca06edf3e1 diff --git a/src/main/java/net/pterodactylus/sone/data/Sone.java b/src/main/java/net/pterodactylus/sone/data/Sone.java index 1b76588..836baa1 100644 --- a/src/main/java/net/pterodactylus/sone/data/Sone.java +++ b/src/main/java/net/pterodactylus/sone/data/Sone.java @@ -1,5 +1,5 @@ /* - * Sone - Sone.java - Copyright © 2010–2013 David Roden + * Sone - Sone.java - Copyright © 2010–2020 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 @@ -18,41 +18,31 @@ package net.pterodactylus.sone.data; import static com.google.common.collect.FluentIterable.from; -import static java.util.Arrays.asList; import static net.pterodactylus.sone.data.Album.FLATTENER; import static net.pterodactylus.sone.data.Album.IMAGES; import java.util.Collection; -import java.util.Comparator; +import java.util.Collections; import java.util.List; import java.util.Set; -import javax.annotation.Nonnegative; 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; /** * A Sone defines everything about a user: her profile, her status updates, her * replies, her likes and dislikes, etc. - * - * @author David ‘Bombe’ Roden */ public interface Sone extends Identified, Fingerprintable, Comparable { /** * Enumeration for the possible states of a {@link Sone}. - * - * @author David ‘Bombe’ Roden */ public enum SoneStatus { @@ -69,143 +59,37 @@ public interface Sone extends Identified, Fingerprintable, Comparable { downloading, } - /** - * The possible values for the “show custom avatars” option. - * - * @author David ‘Bombe’ Roden - */ - 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 NICE_NAME_COMPARATOR = new Comparator() { - - @Override - public int compare(Sone leftSone, Sone rightSone) { - int diff = SoneAccessor.getNiceName(leftSone).compareToIgnoreCase(SoneAccessor.getNiceName(rightSone)); - if (diff != 0) { - return diff; - } - return leftSone.getId().compareToIgnoreCase(rightSone.getId()); - } - - }; - - /** Comparator that sorts Sones by last activity (least recent active first). */ - public static final Comparator LAST_ACTIVITY_COMPARATOR = new Comparator() { - - @Override - public int compare(Sone firstSone, Sone secondSone) { - return (int) Math.min(Integer.MAX_VALUE, Math.max(Integer.MIN_VALUE, secondSone.getTime() - firstSone.getTime())); - } - }; - - /** Comparator that sorts Sones by numbers of posts (descending). */ - public static final Comparator POST_COUNT_COMPARATOR = new Comparator() { - - /** - * {@inheritDoc} - */ - @Override - public int compare(Sone leftSone, Sone rightSone) { - return (leftSone.getPosts().size() != rightSone.getPosts().size()) ? (rightSone.getPosts().size() - leftSone.getPosts().size()) : (rightSone.getReplies().size() - leftSone.getReplies().size()); - } - }; - - /** Comparator that sorts Sones by number of images (descending). */ - public static final Comparator IMAGE_COUNT_COMPARATOR = new Comparator() { - - /** - * {@inheritDoc} - */ - @Override - public int compare(Sone leftSone, Sone rightSone) { - int rightSoneImageCount = from(asList(rightSone.getRootAlbum())).transformAndConcat(FLATTENER).transformAndConcat(IMAGES).size(); - int leftSoneImageCount = from(asList(leftSone.getRootAlbum())).transformAndConcat(FLATTENER).transformAndConcat(IMAGES).size(); - /* sort descending. */ - return Ints.compare(rightSoneImageCount, leftSoneImageCount); - } - }; - - /** Filter to remove Sones that have not been downloaded. */ - public static final Predicate EMPTY_SONE_FILTER = new Predicate() { - - @Override - public boolean apply(Sone sone) { - return (sone != null) && (sone.getTime() != 0); - } - }; - - /** Filter that matches all {@link Sone#isLocal() local Sones}. */ - public static final Predicate LOCAL_SONE_FILTER = new Predicate() { - + public static final Function> toAllAlbums = new Function>() { @Override - public boolean apply(Sone sone) { - return (sone != null) && (sone.getIdentity() instanceof OwnIdentity); + public List apply(@Nullable Sone sone) { + return (sone == null) ? Collections.emptyList() : FLATTENER.apply( + sone.getRootAlbum()); } - }; - /** Filter that matches Sones that have at least one album. */ - public static final Predicate HAS_ALBUM_FILTER = new Predicate() { - + public static final Function> toAllImages = new Function>() { @Override - public boolean apply(Sone sone) { - return (sone != null) && !sone.getRootAlbum().getAlbums().isEmpty(); + public List apply(@Nullable Sone sone) { + return (sone == null) ? Collections.emptyList() : + from(FLATTENER.apply(sone.getRootAlbum())) + .transformAndConcat(IMAGES).toList(); } }; - public static final Function toSoneXmlUri = - new Function() { - @Nonnull - @Override - public String apply(@Nullable Sone input) { - return input.getRequestUri() - .setMetaString(new String[] { "sone.xml" }) - .toString(); - } - }; - /** * Returns the identity of this 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(); /** @@ -220,34 +104,10 @@ public interface Sone extends Identified, Fingerprintable, Comparable { * * @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 - */ - 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 @@ -278,6 +138,7 @@ public interface Sone extends Identified, Fingerprintable, Comparable { * The time of the update (in milliseconds since Jan 1, 1970 UTC) * @return This Sone (for method chaining) */ + @Nonnull Sone setTime(long time); /** @@ -285,6 +146,7 @@ public interface Sone extends Identified, Fingerprintable, Comparable { * * @return The status of this Sone */ + @Nonnull SoneStatus getStatus(); /** @@ -296,7 +158,8 @@ public interface Sone extends Identified, Fingerprintable, Comparable { * @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 @@ -305,6 +168,7 @@ public interface Sone extends Identified, Fingerprintable, Comparable { * * @return A copy of the profile */ + @Nonnull Profile getProfile(); /** @@ -315,13 +179,14 @@ public interface Sone extends Identified, Fingerprintable, Comparable { * @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(); /** @@ -331,7 +196,8 @@ public interface Sone extends Identified, Fingerprintable, Comparable { * 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. @@ -347,6 +213,7 @@ public interface Sone extends Identified, Fingerprintable, Comparable { * {@code true} if this Sone is known, {@code false} otherwise * @return This Sone */ + @Nonnull Sone setKnown(boolean known); /** @@ -354,7 +221,8 @@ public interface Sone extends Identified, Fingerprintable, Comparable { * * @return The friend Sones of this Sone */ - List getFriends(); + @Nonnull + Collection getFriends(); /** * Returns whether this Sone has the given Sone as a friend Sone. @@ -364,31 +232,14 @@ public interface Sone extends Identified, Fingerprintable, Comparable { * @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 getPosts(); /** @@ -398,7 +249,8 @@ public interface Sone extends Identified, Fingerprintable, Comparable { * The new (and only) posts of this Sone * @return This Sone (for method chaining) */ - Sone setPosts(Collection posts); + @Nonnull + Sone setPosts(@Nonnull Collection posts); /** * Adds the given post to this Sone. The post will not be added if its {@link @@ -407,7 +259,7 @@ public interface Sone extends Identified, Fingerprintable, Comparable { * @param post * The post to add */ - void addPost(Post post); + void addPost(@Nonnull Post post); /** * Removes the given post from this Sone. @@ -415,13 +267,14 @@ public interface Sone extends Identified, Fingerprintable, Comparable { * @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 getReplies(); /** @@ -431,7 +284,8 @@ public interface Sone extends Identified, Fingerprintable, Comparable { * The new (and only) replies of this Sone * @return This Sone (for method chaining) */ - Sone setReplies(Collection replies); + @Nonnull + Sone setReplies(@Nonnull Collection replies); /** * Adds a reply to this Sone. If the given reply was not made by this Sone, @@ -440,7 +294,7 @@ public interface Sone extends Identified, Fingerprintable, Comparable { * @param reply * The reply to add */ - void addReply(PostReply reply); + void addReply(@Nonnull PostReply reply); /** * Removes a reply from this Sone. @@ -448,13 +302,14 @@ public interface Sone extends Identified, Fingerprintable, Comparable { * @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 getLikedPostIds(); /** @@ -464,7 +319,8 @@ public interface Sone extends Identified, Fingerprintable, Comparable { * All liked posts’ IDs * @return This Sone (for method chaining) */ - Sone setLikePostIds(Set likedPostIds); + @Nonnull + Sone setLikePostIds(@Nonnull Set likedPostIds); /** * Checks whether the given post ID is liked by this Sone. @@ -474,7 +330,7 @@ public interface Sone extends Identified, Fingerprintable, Comparable { * @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. @@ -483,22 +339,23 @@ public interface Sone extends Identified, Fingerprintable, Comparable { * 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 getLikedReplyIds(); /** @@ -508,7 +365,8 @@ public interface Sone extends Identified, Fingerprintable, Comparable { * All liked replies’ IDs * @return This Sone (for method chaining) */ - Sone setLikeReplyIds(Set likedReplyIds); + @Nonnull + Sone setLikeReplyIds(@Nonnull Set likedReplyIds); /** * Checks whether the given reply ID is liked by this Sone. @@ -518,7 +376,7 @@ public interface Sone extends Identified, Fingerprintable, Comparable { * @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. @@ -527,22 +385,23 @@ public interface Sone extends Identified, Fingerprintable, Comparable { * 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(); /** @@ -550,6 +409,7 @@ public interface Sone extends Identified, Fingerprintable, Comparable { * * @return The options of this Sone */ + @Nonnull SoneOptions getOptions(); /** @@ -559,6 +419,6 @@ public interface Sone extends Identified, Fingerprintable, Comparable { * The options of this Sone */ /* TODO - remove this method again, maybe add an option provider */ - void setOptions(SoneOptions options); + void setOptions(@Nonnull SoneOptions options); }