This repository has been archived on 2021-12-05. You can view files and clone it, but cannot push or open issues or pull requests.
envoy/src/main/java/envoy/data/MessageBuilder.java

129 lines
3.6 KiB
Java
Raw Normal View History

2019-12-31 10:16:52 +01:00
package envoy.data;
import java.util.Date;
import envoy.data.Message.MessageStatus;
/**
* Provides a method of constructing the {@link Message} class.<br>
* <br>
* Project: <strong>envoy-common</strong><br>
* File: <strong>MessageBuilder.java</strong><br>
* Created: <strong>31.12.2019</strong><br>
*
2019-12-31 10:16:52 +01:00
* @author Kai S. K. Engelbart
* @since Envoy Common v0.2-alpha
*/
public class MessageBuilder {
// Mandatory properties without default values
2020-01-02 17:50:04 +01:00
private final long senderId, recipientId;
2019-12-31 10:16:52 +01:00
// Properties with default values
private long id;
private Date creationDate;
2019-12-31 10:16:52 +01:00
private String text;
private MessageAttachment<?> attachment;
private Message.MessageStatus status;
/**
* Creates an instance of {@link MessageBuilder} with all mandatory values
* without defaults for the {@link Message} class.
*
2020-01-02 17:50:04 +01:00
* @param senderId the ID of the user who sends the {@link Message}
* @param recipientId the ID of the user who received the {@link Message}
* @param idGenerator the ID generator used to generate a unique {@link Message}
* id
2019-12-31 10:16:52 +01:00
* @since Envoy Common v0.2-alpha
*/
public MessageBuilder(long senderId, long recipientId, IdGenerator idGenerator) {
this(senderId, recipientId, idGenerator.next());
}
/**
* Creates an instance of {@link MessageBuilder} with all mandatory values
* without defaults for the {@link Message} class.
*
* @param senderId the ID of the user who sends the {@link Message}
* @param recipientId the ID of the user who received the {@link Message}
* @param messageId the ID of the {@link Message}
* @since Envoy Common v0.2-alpha
*/
public MessageBuilder(long senderId, long recipientId, long messageId) {
2020-01-02 17:50:04 +01:00
this.senderId = senderId;
this.recipientId = recipientId;
id = messageId;
2019-12-31 10:16:52 +01:00
}
/**
* Creates an instance of {@link Message} with the previously supplied values.
* If a mandatory value is not set, a default value will be used instead:<br>
* <br>
* <table border="1">
* <tr>
* <td>{@code date}</td>
* <td>{@code new Date()}</td>
* <tr>
* <tr>
* <td>{@code text}</td>
* <td>{@code ""}</td>
* <tr>
* <tr>
* <td>{@code status}</td>
* <td>{@code MessageStatus.WAITING}</td>
* <tr>
* </table>
*
2019-12-31 10:16:52 +01:00
* @return a new instance of {@link Message}
* @since Envoy Common v0.2-alpha
*/
public Message build() {
// Supplement default values
if (creationDate == null) creationDate = new Date();
2019-12-31 10:16:52 +01:00
if (text == null) text = "";
if (status == null) status = MessageStatus.WAITING;
return new Message(id, senderId, recipientId, creationDate, text, attachment, status);
2019-12-31 10:16:52 +01:00
}
/**
* @param creationDate the creation date of the {@link Message} to create
2019-12-31 10:16:52 +01:00
* @return this {@link MessageBuilder}
* @since Envoy Common v0.2-alpha
*/
public MessageBuilder setDate(Date creationDate) {
this.creationDate = creationDate;
2019-12-31 10:16:52 +01:00
return this;
}
/**
* @param text the text of the {@link Message} to create
* @return this {@link MessageBuilder}
* @since Envoy Common v0.2-alpha
*/
public MessageBuilder setText(String text) {
this.text = text;
return this;
}
/**
* @param attachment the {@link MessageAttachment} of the {@link Message} to
* create
* @return this {@link MessageBuilder}
* @since Envoy Common v0.2-alpha
*/
public MessageBuilder setAttachment(MessageAttachment<?> attachment) {
this.attachment = attachment;
return this;
}
/**
* @param status the {@link MessageStatus} of the {@link Message} to create
* @return this {@link MessageBuilder}
* @since Envoy Common v0.2-alpha
*/
public MessageBuilder setStatus(Message.MessageStatus status) {
this.status = status;
return this;
}
}