77e484a931db23e8633215890af7ffe58753acab
[Sone.git] / src / main / java / net / pterodactylus / sone / data / impl / AbstractReplyBuilder.java
1 /*
2  * Sone - ReplyBuilder.java - Copyright © 2013 David Roden
3  *
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.
8  *
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.
13  *
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/>.
16  */
17
18 package net.pterodactylus.sone.data.impl;
19
20 import net.pterodactylus.sone.data.ReplyBuilder;
21 import net.pterodactylus.sone.data.Sone;
22
23 /**
24  * Abstract implementation of a {@link ReplyBuilder}.
25  *
26  * @param <C>
27  *            The concrete implementation of the builder
28  * @param <B>
29  *            The interface implemented and exposed by the builder
30  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
31  */
32 public class AbstractReplyBuilder<C extends AbstractReplyBuilder<C, B>, B extends ReplyBuilder<B>> implements ReplyBuilder<B> {
33
34         /** Whether to use a random ID for the reply. */
35         protected boolean randomId;
36
37         /** The ID of the reply. */
38         protected String id;
39
40         /** The sender of the reply. */
41         protected Sone sender;
42
43         /** Whether to use the current time when creating the reply. */
44         protected boolean currentTime;
45
46         /** The time of the reply. */
47         protected long time;
48
49         /** The text of the reply. */
50         protected String text;
51
52         /**
53          * {@inheritDoc}
54          */
55         @Override
56         @SuppressWarnings("unchecked")
57         public B randomId() {
58                 this.randomId = true;
59                 return (B) this;
60         }
61
62         /**
63          * {@inheritDoc}
64          */
65         @Override
66         @SuppressWarnings("unchecked")
67         public B withId(String id) {
68                 this.id = id;
69                 return (B) this;
70         }
71
72         /**
73          * {@inheritDoc}
74          */
75         @Override
76         @SuppressWarnings("unchecked")
77         public B from(Sone sender) {
78                 this.sender = sender;
79                 return (B) this;
80         }
81
82         /**
83          * {@inheritDoc}
84          */
85         @Override
86         @SuppressWarnings("unchecked")
87         public B currentTime() {
88                 this.currentTime = true;
89                 return (B) this;
90         }
91
92         /**
93          * {@inheritDoc}
94          */
95         @Override
96         @SuppressWarnings("unchecked")
97         public B withTime(long time) {
98                 this.time = time;
99                 return (B) this;
100         }
101
102         /**
103          * {@inheritDoc}
104          */
105         @Override
106         @SuppressWarnings("unchecked")
107         public B withText(String text) {
108                 this.text = text;
109                 return (B) this;
110         }
111
112 }