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;
/**
*/
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(id);
+ }
+ };
+
/** A GUID for this Sone. */
private UUID id;
* 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;
}
* @return The friend Sones of this Sone
*/
@Override
- public Set<Sone> getFriendSones() {
+ public Set<Sone> getFriends() {
return Collections.unmodifiableSet(friendSones);
}
* {@code false} otherwise
*/
@Override
- public boolean hasFriendSone(Sone friendSone) {
+ public boolean hasFriend(Sone friendSone) {
return friendSones.contains(friendSone);
}
* @return This Sone (for method chaining)
*/
@Override
- public Sone addFriendSone(Sone friendSone) {
+ public Sone addFriend(Sone friendSone) {
friendSones.add(friendSone);
return this;
}
* @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;
}
/**
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);