diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index 44aa2b3..c8aeed9 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -1,5 +1,6 @@ - + + @@ -7,7 +8,8 @@ - + + @@ -15,7 +17,8 @@ - + + @@ -23,7 +26,8 @@ - + + diff --git a/src/main/java/envoy/data/Attachment.java b/src/main/java/envoy/data/Attachment.java new file mode 100644 index 0000000..177441b --- /dev/null +++ b/src/main/java/envoy/data/Attachment.java @@ -0,0 +1,84 @@ +package envoy.data; + +import java.io.Serializable; + +/** + * This interface should be used for any type supposed to be a {@link Message} + * attachment (i.e. images or sound). + *

+ * Project: envoy-common
+ * File: Attachment.java
+ * Created: 30 Dec 2019
+ * + * @author Leon Hofmeister + * @author Kai S. K. Engelbart + * @since Envoy Common v0.2-alpha + */ +public class Attachment implements Serializable { + + /** + * Defines the type of the attachment. + * + * @since Envoy Common v0.1-beta + */ + public enum AttachmentType { + + /** + * This attachment type denotes a picture. + * + * @since Envoy Common v0.1-beta + */ + PICTURE, + + + /** + * This attachment type denotes a video. + * + * @since Envoy Common v0.1-beta + */ + VIDEO, + + /** + * This attachment type denotes a voice message. + * + * @since Envoy Common v0.1-beta + */ + VOICE, + + /** + * This attachment type denotes a document. + * + * @since Envoy Common v0.1-beta + */ + DOCUMENT + } + + private final byte[] data; + private final AttachmentType type; + + private static final long serialVersionUID = 1L; + + /** + * Constructs an attachment. + * + * @param data the data of the attachment + * @param type the type of the attachment + * @since Envoy Common v0.1-beta + */ + public Attachment(byte[] data, AttachmentType type) { + this.data = data; + this.type = type; + } + + /** + * @return the data of the attachment + * @since Envoy Common v0.1-beta + */ + public byte[] getData() { return data; } + + /** + * @return the type of the attachment + * @since Envoy Common v0.1-beta + */ + public AttachmentType getType() { return type; } +} diff --git a/src/main/java/envoy/data/GroupMessage.java b/src/main/java/envoy/data/GroupMessage.java index 85b61e8..7fb0d4a 100644 --- a/src/main/java/envoy/data/GroupMessage.java +++ b/src/main/java/envoy/data/GroupMessage.java @@ -29,6 +29,8 @@ public final class GroupMessage extends Message { * @param senderID the ID of the user who sends the message * @param groupID the ID of the group which receives the message * @param creationDate the creation date of the message + * @param receivedDate the received date of the message + * @param readDate the read date of the message * @param text the text content of the message * @param attachment the attachment of the message, if present * @param status the current {@link Message.MessageStatus} of the @@ -38,10 +40,9 @@ public final class GroupMessage extends Message { * {@link GroupMessage} * @since Envoy Common v0.1-beta */ - GroupMessage(long id, long senderID, long groupID, LocalDateTime creationDate, String text, MessageAttachment attachment, - MessageStatus status, - boolean forwarded, Map memberStatuses) { - super(id, senderID, groupID, creationDate, text, attachment, status, forwarded); + GroupMessage(long id, long senderID, long groupID, LocalDateTime creationDate, LocalDateTime receivedDate, LocalDateTime readDate, String text, + Attachment attachment, MessageStatus status, boolean forwarded, Map memberStatuses) { + super(id, senderID, groupID, creationDate, receivedDate, readDate, text, attachment, status, forwarded); this.memberStatuses = memberStatuses; } diff --git a/src/main/java/envoy/data/Message.java b/src/main/java/envoy/data/Message.java index 4b579bc..040ad59 100644 --- a/src/main/java/envoy/data/Message.java +++ b/src/main/java/envoy/data/Message.java @@ -48,11 +48,11 @@ public class Message implements Serializable { READ } - private final long id, senderID, recipientID; - private final boolean forwarded; - private final LocalDateTime creationDate; - private final String text; - private final MessageAttachment attachment; + private final long id, senderID, recipientID; + private final boolean forwarded; + private final LocalDateTime creationDate; + private final String text; + private final Attachment attachment; private LocalDateTime receivedDate, readDate; private MessageStatus status; @@ -69,19 +69,22 @@ public class Message implements Serializable { * @param senderID the ID of the user who sends the message * @param recipientID the ID of the user who receives the message * @param creationDate the creation date of the message + * @param receivedDate the received date of the message + * @param readDate the read date of the message * @param text the text content of the message * @param attachment the attachment of the message, if present * @param status the current {@link MessageStatus} of the message * @param forwarded whether this message was forwarded * @since Envoy Common v0.2-alpha */ - Message(long id, long senderID, long recipientID, LocalDateTime creationDate, String text, MessageAttachment attachment, - MessageStatus status, - boolean forwarded) { + Message(long id, long senderID, long recipientID, LocalDateTime creationDate, LocalDateTime receivedDate, LocalDateTime readDate, String text, + Attachment attachment, MessageStatus status, boolean forwarded) { this.id = id; this.senderID = senderID; this.recipientID = recipientID; this.creationDate = creationDate; + this.receivedDate = receivedDate; + this.readDate = readDate; this.text = text; this.attachment = attachment; this.status = status; @@ -178,7 +181,13 @@ public class Message implements Serializable { * @return the messageAttachment * @since Envoy Common v0.2-alpha */ - public MessageAttachment getAttachment() { return attachment; } + public Attachment getAttachment() { return attachment; } + + /** + * @return {@code true} if an attachment is present + * @since Envoy Common v0.1-beta + */ + public boolean hasAttachment() { return attachment != null; } /** * @return the current status of this message diff --git a/src/main/java/envoy/data/MessageAttachment.java b/src/main/java/envoy/data/MessageAttachment.java deleted file mode 100644 index 3d04eab..0000000 --- a/src/main/java/envoy/data/MessageAttachment.java +++ /dev/null @@ -1,43 +0,0 @@ -package envoy.data; - -import java.io.IOException; -import java.io.Serializable; - -import envoy.util.SerializationUtils; - -/** - * This interface should be used for any type supposed to be a {@link Message} - * attachment (i.e. images or sound).
- *
- * Project: envoy-common
- * File: MessageAttachment.java
- * Created: 30 Dec 2019
- * - * @author Leon Hofmeister - * @param the type of this message attachment - * @since Envoy Common v0.2-alpha - */ -public class MessageAttachment implements Serializable { - - private static final long serialVersionUID = 0L; - private T value; - - /** - * @return the type implementing this interface - * @since Envoy Common v0.2-alpha - */ - T getValue() { return value; } - - /** - * @return the {@link MessageAttachment} as a byte array - * @throws IOException if the serialization failed - * @since Envoy Common v0.2-alpha - */ - byte[] toByteArray() throws IOException { return SerializationUtils.writeToByteArray(this); } - - /** - * @param value the value to set - * @since Envoy Common v0.2-alpha - */ - public void setValue(T value) { this.value = value; } -} diff --git a/src/main/java/envoy/data/MessageBuilder.java b/src/main/java/envoy/data/MessageBuilder.java index 934f65b..917adc4 100644 --- a/src/main/java/envoy/data/MessageBuilder.java +++ b/src/main/java/envoy/data/MessageBuilder.java @@ -23,9 +23,9 @@ public class MessageBuilder { // Properties with default values private long id; - private LocalDateTime creationDate; + private LocalDateTime creationDate, receivedDate, readDate; private String text; - private MessageAttachment attachment; + private Attachment attachment; private Message.MessageStatus status; private boolean forwarded; @@ -83,7 +83,8 @@ public class MessageBuilder { * * * - * + * * * * @@ -100,7 +101,7 @@ public class MessageBuilder { */ public Message build() { supplyDefaults(); - return new Message(id, senderID, recipientID, creationDate, text, attachment, status, forwarded); + return new Message(id, senderID, recipientID, creationDate, receivedDate, readDate, text, attachment, status, forwarded); } /** @@ -157,7 +158,7 @@ public class MessageBuilder { public GroupMessage buildGroupMessage(Group group, Map memberStatuses) { if (group == null || memberStatuses == null) throw new NullPointerException(); supplyDefaults(); - return new GroupMessage(id, senderID, recipientID, creationDate, text, attachment, status, forwarded, memberStatuses); + return new GroupMessage(id, senderID, recipientID, creationDate, receivedDate, readDate, text, attachment, status, forwarded, memberStatuses); } private void supplyDefaults() { @@ -171,11 +172,31 @@ public class MessageBuilder { * @return this {@link MessageBuilder} * @since Envoy Common v0.2-alpha */ - public MessageBuilder setDate(LocalDateTime creationDate) { + public MessageBuilder setCreationDate(LocalDateTime creationDate) { this.creationDate = creationDate; return this; } + /** + * @param receivedDate the received date of the {@link Message} to create + * @return this {@link MessageBuilder} + * @since Envoy Common v0.1-beta + */ + public MessageBuilder setReceivedDate(LocalDateTime receivedDate) { + this.receivedDate = receivedDate; + return this; + } + + /** + * @param readDate the read date of the {@link Message} to create + * @return this {@link MessageBuilder} + * @since Envoy Common v0.1-beta + */ + public MessageBuilder setReadDate(LocalDateTime readDate) { + this.readDate = readDate; + return this; + } + /** * @param text the text of the {@link Message} to create * @return this {@link MessageBuilder} @@ -187,12 +208,12 @@ public class MessageBuilder { } /** - * @param attachment the {@link MessageAttachment} of the {@link Message} to + * @param attachment the {@link Attachment} of the {@link Message} to * create * @return this {@link MessageBuilder} * @since Envoy Common v0.2-alpha */ - public MessageBuilder setAttachment(MessageAttachment attachment) { + public MessageBuilder setAttachment(Attachment attachment) { this.attachment = attachment; return this; }
{@code date}{@code LocalDateTime.now()}{@code LocalDateTime.now()} and {@code null} for {@code receivedDate} and + * {@code readDate}
{@code text}