1 package net.pterodactylus.sone.data.impl;
3 import static com.google.common.base.Preconditions.checkState;
5 import java.util.Collection;
6 import java.util.HashSet;
8 import net.pterodactylus.sone.data.Client;
9 import net.pterodactylus.sone.data.Post;
10 import net.pterodactylus.sone.data.PostReply;
11 import net.pterodactylus.sone.database.SoneBuilder;
12 import net.pterodactylus.sone.freenet.wot.Identity;
13 import net.pterodactylus.sone.freenet.wot.OwnIdentity;
16 * Abstract {@link SoneBuilder} implementation.
18 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
20 public abstract class AbstractSoneBuilder implements SoneBuilder {
22 protected Identity identity;
23 protected boolean local;
24 protected long lastUpdated;
25 protected Client client;
26 protected final Collection<Post> posts = new HashSet<Post>();
27 protected final Collection<PostReply> postReplies = new HashSet<PostReply>();
30 public SoneBuilder from(Identity identity) {
31 this.identity = identity;
36 public SoneBuilder local() {
42 public SoneBuilder lastUpdated(long lastUpdated) {
43 this.lastUpdated = lastUpdated;
48 public SoneBuilder using(Client client) {
54 public SoneBuilder withPosts(Collection<Post> posts) {
56 this.posts.addAll(posts);
61 public SoneBuilder withPostReplies(Collection<PostReply> postReplies) {
62 this.postReplies.clear();
63 this.postReplies.addAll(postReplies);
67 protected void validate() throws IllegalStateException {
68 checkState(identity != null, "identity must not be null");
69 checkState(!local || (identity instanceof OwnIdentity),
70 "can not create local Sone from remote identity");
71 checkState(lastUpdated > 0, "last update time must be set");
72 checkState(client != null, "client must not be null");