Rename post and reply implementations; use builder to create replies.
[Sone.git] / src / main / java / net / pterodactylus / sone / data / impl / AbstractReplyBuilder.java
index 5c1b976..389eb85 100644 (file)
@@ -20,12 +20,14 @@ package net.pterodactylus.sone.data.impl;
 import static com.google.common.base.Optional.absent;
 import static com.google.common.base.Optional.fromNullable;
 import static com.google.common.base.Optional.of;
+import static com.google.common.base.Preconditions.checkState;
 import static java.lang.System.currentTimeMillis;
 import static java.util.UUID.randomUUID;
 
 import net.pterodactylus.sone.database.ReplyBuilder;
 
 import com.google.common.base.Optional;
+import org.apache.commons.lang.StringUtils;
 
 /**
  * Abstract implementation of a {@link ReplyBuilder}.
@@ -36,24 +38,13 @@ import com.google.common.base.Optional;
  */
 public class AbstractReplyBuilder<B extends ReplyBuilder<B>> implements ReplyBuilder<B> {
 
+       protected final String senderId;
        protected Optional<String> id = absent();
-
-       /** The sender of the reply. */
-       protected String senderId;
-
        protected Optional<Long> time = absent();
-
-       /** The text of the reply. */
        protected String text;
 
-       /**
-        * {@inheritDoc}
-        */
-       @Override
-       @SuppressWarnings("unchecked")
-       public B withId(String id) {
-               this.id = fromNullable(id);
-               return (B) this;
+       protected AbstractReplyBuilder(String senderId) {
+               this.senderId = senderId;
        }
 
        /**
@@ -61,8 +52,8 @@ public class AbstractReplyBuilder<B extends ReplyBuilder<B>> implements ReplyBui
         */
        @Override
        @SuppressWarnings("unchecked")
-       public B from(String senderId) {
-               this.senderId = senderId;
+       public B withId(String id) {
+               this.id = fromNullable(id);
                return (B) this;
        }
 
@@ -94,4 +85,15 @@ public class AbstractReplyBuilder<B extends ReplyBuilder<B>> implements ReplyBui
                return time.isPresent() ? time.get() : currentTimeMillis();
        }
 
+       /**
+        * Validates the state of this post reply builder.
+        *
+        * @throws IllegalStateException
+        *             if the state is not valid for building a new post reply
+        */
+       protected void validate() throws IllegalStateException {
+               checkState(senderId != null, "sender must not be null");
+               checkState(!StringUtils.isBlank(text), "text must not be empty");
+       }
+
 }