import net.pterodactylus.sone.data.Post;
import net.pterodactylus.sone.data.Sone;
+import com.google.common.base.Optional;
+
/**
* Builder for {@link Post} objects.
* <p>
public interface PostBuilder {
/**
- * Copies all attributes of the given post to this post builder.
- *
- * @param post
- * The post whose attributes to copy into this builder
- * @return This builder
- * @throws NullPointerException
- * if {@code post} is {@code null}
- */
- public PostBuilder copyPost(Post post) throws NullPointerException;
-
- /**
- * Configures this builder to use the given Sone as sender of the new post.
- *
- * @param senderId
- * The ID of the sender of the post
- * @return This post builder
- */
- public PostBuilder from(String senderId);
-
- /**
- * Configures this builder to use a random ID for the new post. If this
- * method is used, {@link #withId(String)} must not be used.
- *
- * @return This post builder
- */
- public PostBuilder randomId();
-
- /**
* Configures this builder to use the given ID as ID for the new post. If
* this method is used, {@link #randomId()} must not be used.
*
public PostBuilder withId(String id);
/**
- * Configures this builder to use the current time when creating the post.
- * If this method is used, {@link #withTime(long)} must not be used.
- *
- * @return This post builder
- */
- public PostBuilder currentTime();
-
- /**
* Configures the builder to use the given time as time for the new post. If
* this method is used, {@link #currentTime()} must not be used.
*
* The ID of the recipient of the post
* @return This post builder
*/
- public PostBuilder to(String recipientId);
+ public PostBuilder to(Optional<String> recipientId);
/**
* Verifies this builder’s configuration and creates a new post.
* @throws IllegalStateException
* if this builder’s configuration is not valid
*/
- public Post build() throws IllegalStateException;
+ public Post build(Optional<PostCreated> postCreated) throws IllegalStateException;
+
+ interface PostCreated {
+
+ void postCreated(Post post);
+
+ }
}