2 * Sone - ReplyBuilder.java - Copyright © 2013 David Roden
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 package net.pterodactylus.sone.data.impl;
20 import static com.google.common.base.Optional.absent;
21 import static com.google.common.base.Optional.fromNullable;
22 import static com.google.common.base.Optional.of;
23 import static com.google.common.base.Preconditions.checkState;
24 import static java.lang.System.currentTimeMillis;
25 import static java.util.UUID.randomUUID;
27 import net.pterodactylus.sone.database.ReplyBuilder;
29 import com.google.common.base.Optional;
30 import org.apache.commons.lang.StringUtils;
33 * Abstract implementation of a {@link ReplyBuilder}.
36 * The interface implemented and exposed by the builder
37 * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
39 public abstract class AbstractReplyBuilder<B extends ReplyBuilder<B>> implements ReplyBuilder<B> {
41 protected final String senderId;
42 protected Optional<String> id = absent();
43 protected Optional<Long> time = absent();
44 protected String text;
46 protected AbstractReplyBuilder(String senderId) {
47 this.senderId = senderId;
51 @SuppressWarnings("unchecked")
52 public B withId(String id) {
53 this.id = fromNullable(id);
58 @SuppressWarnings("unchecked")
59 public B withTime(long time) {
65 @SuppressWarnings("unchecked")
66 public B withText(String text) {
71 protected String getId() {
72 return id.isPresent() ? id.get() : randomUUID().toString();
75 protected long getTime() {
76 return time.isPresent() ? time.get() : currentTimeMillis();
80 * Validates the state of this post reply builder.
82 * @throws IllegalStateException
83 * if the state is not valid for building a new post reply
85 protected void validate() throws IllegalStateException {
86 checkState(senderId != null, "sender must not be null");
87 checkState(!StringUtils.isBlank(text), "text must not be empty");