Move memory post reply builder to its own file.
[Sone.git] / src / main / java / net / pterodactylus / sone / data / Sone.java
index 80032ad..a3e872b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Sone - Sone.java - Copyright © 2010–2012 David Roden
+ * Sone - Sone.java - Copyright © 2010–2013 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
@@ -17,6 +17,9 @@
 
 package net.pterodactylus.sone.data;
 
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -33,9 +36,10 @@ import net.pterodactylus.sone.freenet.wot.Identity;
 import net.pterodactylus.sone.freenet.wot.OwnIdentity;
 import net.pterodactylus.sone.template.SoneAccessor;
 import net.pterodactylus.util.logging.Logging;
-import net.pterodactylus.util.validation.Validation;
 
 import com.google.common.base.Predicate;
+import com.google.common.hash.Hasher;
+import com.google.common.hash.Hashing;
 
 import freenet.keys.FreenetURI;
 
@@ -226,7 +230,7 @@ public class Sone implements Fingerprintable, Comparable<Sone> {
        private final List<Album> albums = new CopyOnWriteArrayList<Album>();
 
        /** Sone-specific options. */
-       private final Options options = new Options();
+       private Options options = new Options();
 
        /**
         * Creates a new Sone.
@@ -422,8 +426,7 @@ public class Sone implements Fingerprintable, Comparable<Sone> {
         *             if {@code status} is {@code null}
         */
        public Sone setStatus(SoneStatus status) {
-               Validation.begin().isNotNull("Sone Status", status).check();
-               this.status = status;
+               this.status = checkNotNull(status, "status must not be null");
                return this;
        }
 
@@ -808,7 +811,8 @@ public class Sone implements Fingerprintable, Comparable<Sone> {
         *            The album to add
         */
        public void addAlbum(Album album) {
-               Validation.begin().isNotNull("Album", album).check().isEqual("Album Owner", album.getSone(), this).check();
+               checkNotNull(album, "album must not be null");
+               checkArgument(album.getSone().equals(this), "album must belong to this Sone");
                if (!albums.contains(album)) {
                        albums.add(album);
                }
@@ -821,7 +825,7 @@ public class Sone implements Fingerprintable, Comparable<Sone> {
         *            The albums of this Sone
         */
        public void setAlbums(Collection<? extends Album> albums) {
-               Validation.begin().isNotNull("Albums", albums).check();
+               checkNotNull(albums, "albums must not be null");
                this.albums.clear();
                for (Album album : albums) {
                        addAlbum(album);
@@ -835,7 +839,8 @@ public class Sone implements Fingerprintable, Comparable<Sone> {
         *            The album to remove
         */
        public void removeAlbum(Album album) {
-               Validation.begin().isNotNull("Album", album).check().isEqual("Album Owner", album.getSone(), this).check();
+               checkNotNull(album, "album must not be null");
+               checkArgument(album.getSone().equals(this), "album must belong to this Sone");
                albums.remove(album);
        }
 
@@ -849,7 +854,9 @@ public class Sone implements Fingerprintable, Comparable<Sone> {
         *         <code>null</code> if the album did not change its place
         */
        public Album moveAlbumUp(Album album) {
-               Validation.begin().isNotNull("Album", album).check().isEqual("Album Owner", album.getSone(), this).isNull("Album Parent", album.getParent()).check();
+               checkNotNull(album, "album must not be null");
+               checkArgument(album.getSone().equals(this), "album must belong to this Sone");
+               checkArgument(album.getParent() == null, "album must not have a parent");
                int oldIndex = albums.indexOf(album);
                if (oldIndex <= 0) {
                        return null;
@@ -869,7 +876,9 @@ public class Sone implements Fingerprintable, Comparable<Sone> {
         *         <code>null</code> if the album did not change its place
         */
        public Album moveAlbumDown(Album album) {
-               Validation.begin().isNotNull("Album", album).check().isEqual("Album Owner", album.getSone(), this).isNull("Album Parent", album.getParent()).check();
+               checkNotNull(album, "album must not be null");
+               checkArgument(album.getSone().equals(this), "album must belong to this Sone");
+               checkArgument(album.getParent() == null, "album must not have a parent");
                int oldIndex = albums.indexOf(album);
                if ((oldIndex < 0) || (oldIndex >= (albums.size() - 1))) {
                        return null;
@@ -888,6 +897,17 @@ public class Sone implements Fingerprintable, Comparable<Sone> {
                return options;
        }
 
+       /**
+        * Sets the options of this Sone.
+        *
+        * @param options
+        *            The options of this Sone
+        */
+       /* TODO - remove this method again, maybe add an option provider */
+       public void setOptions(Options options) {
+               this.options = options;
+       }
+
        //
        // FINGERPRINTABLE METHODS
        //
@@ -897,46 +917,46 @@ public class Sone implements Fingerprintable, Comparable<Sone> {
         */
        @Override
        public synchronized String getFingerprint() {
-               StringBuilder fingerprint = new StringBuilder();
-               fingerprint.append(profile.getFingerprint());
+               Hasher hash = Hashing.sha256().newHasher();
+               hash.putString(profile.getFingerprint());
 
-               fingerprint.append("Posts(");
+               hash.putString("Posts(");
                for (Post post : getPosts()) {
-                       fingerprint.append("Post(").append(post.getId()).append(')');
+                       hash.putString("Post(").putString(post.getId()).putString(")");
                }
-               fingerprint.append(")");
+               hash.putString(")");
 
                List<PostReply> replies = new ArrayList<PostReply>(getReplies());
                Collections.sort(replies, Reply.TIME_COMPARATOR);
-               fingerprint.append("Replies(");
+               hash.putString("Replies(");
                for (PostReply reply : replies) {
-                       fingerprint.append("Reply(").append(reply.getId()).append(')');
+                       hash.putString("Reply(").putString(reply.getId()).putString(")");
                }
-               fingerprint.append(')');
+               hash.putString(")");
 
                List<String> likedPostIds = new ArrayList<String>(getLikedPostIds());
                Collections.sort(likedPostIds);
-               fingerprint.append("LikedPosts(");
+               hash.putString("LikedPosts(");
                for (String likedPostId : likedPostIds) {
-                       fingerprint.append("Post(").append(likedPostId).append(')');
+                       hash.putString("Post(").putString(likedPostId).putString(")");
                }
-               fingerprint.append(')');
+               hash.putString(")");
 
                List<String> likedReplyIds = new ArrayList<String>(getLikedReplyIds());
                Collections.sort(likedReplyIds);
-               fingerprint.append("LikedReplies(");
+               hash.putString("LikedReplies(");
                for (String likedReplyId : likedReplyIds) {
-                       fingerprint.append("Reply(").append(likedReplyId).append(')');
+                       hash.putString("Reply(").putString(likedReplyId).putString(")");
                }
-               fingerprint.append(')');
+               hash.putString(")");
 
-               fingerprint.append("Albums(");
+               hash.putString("Albums(");
                for (Album album : albums) {
-                       fingerprint.append(album.getFingerprint());
+                       hash.putString(album.getFingerprint());
                }
-               fingerprint.append(')');
+               hash.putString(")");
 
-               return fingerprint.toString();
+               return hash.hash().toString();
        }
 
        //