Use different method to create a local Sone.
[Sone.git] / src / main / java / net / pterodactylus / sone / data / impl / AbstractSoneBuilder.java
index a214677..5ec8ec4 100644 (file)
@@ -2,6 +2,12 @@ package net.pterodactylus.sone.data.impl;
 
 import static com.google.common.base.Preconditions.checkState;
 
+import java.util.Collection;
+import java.util.HashSet;
+
+import net.pterodactylus.sone.data.Client;
+import net.pterodactylus.sone.data.Post;
+import net.pterodactylus.sone.data.PostReply;
 import net.pterodactylus.sone.database.SoneBuilder;
 import net.pterodactylus.sone.freenet.wot.Identity;
 import net.pterodactylus.sone.freenet.wot.OwnIdentity;
@@ -14,7 +20,10 @@ import net.pterodactylus.sone.freenet.wot.OwnIdentity;
 public abstract class AbstractSoneBuilder implements SoneBuilder {
 
        protected Identity identity;
-       protected boolean local;
+       protected long lastUpdated;
+       protected Client client;
+       protected final Collection<Post> posts = new HashSet<Post>();
+       protected final Collection<PostReply> postReplies = new HashSet<PostReply>();
 
        @Override
        public SoneBuilder from(Identity identity) {
@@ -23,15 +32,41 @@ public abstract class AbstractSoneBuilder implements SoneBuilder {
        }
 
        @Override
-       public SoneBuilder local() {
-               this.local = true;
+       public SoneBuilder lastUpdated(long lastUpdated) {
+               this.lastUpdated = lastUpdated;
+               return this;
+       }
+
+       @Override
+       public SoneBuilder using(Client client) {
+               this.client = client;
+               return this;
+       }
+
+       @Override
+       public SoneBuilder withPosts(Collection<Post> posts) {
+               this.posts.clear();
+               this.posts.addAll(posts);
+               return this;
+       }
+
+       @Override
+       public SoneBuilder withPostReplies(Collection<PostReply> postReplies) {
+               this.postReplies.clear();
+               this.postReplies.addAll(postReplies);
                return this;
        }
 
        protected void validate() throws IllegalStateException {
                checkState(identity != null, "identity must not be null");
-               checkState(!local || (identity instanceof OwnIdentity),
-                               "can not create local Sone from remote identity");
+               checkState(lastUpdated > 0, "last update time must be set");
+               checkState(client != null, "client must not be null");
+       }
+
+       protected void validateLocal() throws IllegalStateException {
+               validate();
+               checkState(identity instanceof OwnIdentity,
+                               "identity must be an own identity for a local Sone");
        }
 
 }