Rename “friend Sone” to just “friend.”
[Sone.git] / src / main / java / net / pterodactylus / sone / data / SoneShell.java
index cced1e5..9063d31 100644 (file)
@@ -19,11 +19,15 @@ package net.pterodactylus.sone.data;
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.UUID;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
+import net.pterodactylus.util.logging.Logging;
 import freenet.keys.FreenetURI;
 
 /**
@@ -33,12 +37,15 @@ import freenet.keys.FreenetURI;
  */
 public class SoneShell extends Sone implements Shell<Sone> {
 
+       /** The logger. */
+       private static final Logger logger = Logging.getLogger(SoneShell.class);
+
        /** The shell creator. */
        public static final ShellCreator<Sone> creator = new ShellCreator<Sone>() {
 
                @Override
                public Shell<Sone> createShell(String id) {
-                       return new SoneShell().setId(UUID.fromString(id));
+                       return new SoneShell().setId(id);
                }
        };
 
@@ -91,8 +98,13 @@ public class SoneShell extends Sone implements Shell<Sone> {
         *            The ID of the Sone
         * @return This Sone shell (for method chaining)
         */
-       public SoneShell setId(UUID id) {
-               this.id = id;
+       public SoneShell setId(String id) {
+               try {
+                       this.id = UUID.fromString(id);
+               } catch (IllegalArgumentException iae1) {
+                       logger.log(Level.WARNING, "Invalid ID: “" + id + "”.", iae1);
+                       this.id = UUID.randomUUID();
+               }
                return this;
        }
 
@@ -166,7 +178,7 @@ public class SoneShell extends Sone implements Shell<Sone> {
         * @return The friend Sones of this Sone
         */
        @Override
-       public Set<Sone> getFriendSones() {
+       public Set<Sone> getFriends() {
                return Collections.unmodifiableSet(friendSones);
        }
 
@@ -179,7 +191,7 @@ public class SoneShell extends Sone implements Shell<Sone> {
         *         {@code false} otherwise
         */
        @Override
-       public boolean hasFriendSone(Sone friendSone) {
+       public boolean hasFriend(Sone friendSone) {
                return friendSones.contains(friendSone);
        }
 
@@ -191,7 +203,7 @@ public class SoneShell extends Sone implements Shell<Sone> {
         * @return This Sone (for method chaining)
         */
        @Override
-       public Sone addFriendSone(Sone friendSone) {
+       public Sone addFriend(Sone friendSone) {
                friendSones.add(friendSone);
                return this;
        }
@@ -204,19 +216,28 @@ public class SoneShell extends Sone implements Shell<Sone> {
         * @return This Sone (for method chaining)
         */
        @Override
-       public Sone removeFriendSone(Sone friendSone) {
+       public Sone removeFriend(Sone friendSone) {
                friendSones.remove(friendSone);
                return this;
        }
 
        /**
-        * Returns the list of posts of this Sone.
+        * Returns the list of posts of this Sone, sorted by time, newest first.
         *
         * @return All posts of this Sone
         */
        @Override
        public List<Post> getPosts() {
-               return Collections.unmodifiableList(posts);
+               List<Post> sortedPosts = new ArrayList<Post>(posts);
+               Collections.sort(sortedPosts, new Comparator<Post>() {
+
+                       @Override
+                       public int compare(Post leftPost, Post rightPost) {
+                               return (int) Math.max(Integer.MIN_VALUE, Math.min(Integer.MAX_VALUE, rightPost.getTime() - leftPost.getTime()));
+                       }
+
+               });
+               return sortedPosts;
        }
 
        /**
@@ -296,7 +317,7 @@ public class SoneShell extends Sone implements Shell<Sone> {
                        Sone sone = new Sone(id, name, requestUri);
                        sone.setProfile(profile);
                        for (Sone friendSone : friendSones) {
-                               sone.addFriendSone(friendSone);
+                               sone.addFriend(friendSone);
                        }
                        for (Post post : posts) {
                                sone.addPost(post);