From 1767a24fdef57da1ea6217e5021e3ad6c23fc88d Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Fri, 6 Dec 2019 20:48:27 +0100 Subject: [PATCH] Refactoring and commenting --- .../ui/chat/MessagesRecyclerViewAdapter.java | 4 +-- .../data/di/RepositoryComponent.java | 23 -------------- .../data/mapping/MessageContentMapping.java | 23 +++++++------- .../data/mapping/MessageMapping.java | 8 ++--- .../data/mapping/MessagePayloadMapping.java | 28 ++++++++--------- .../model/AbstractMessageContentModel.java | 27 ---------------- .../data/model/AbstractMessageModel.java | 2 +- .../AbstractMessagePayloadContainerModel.java | 24 ++++++++++++++ .../model/AbstractMessagePayloadModel.java | 15 +++++---- .../mercury_im/messenger/entity/Account.java | 2 ++ .../messenger/entity/chat/Chat.java | 5 +++ .../entity/chat/ChatPreferences.java | 5 +++ .../messenger/entity/chat/DirectChat.java | 5 +++ .../messenger/entity/chat/GroupChat.java | 5 +++ .../messenger/entity/contact/Peer.java | 2 ++ .../entity/contact/SubscriptionMode.java | 3 ++ .../messenger/entity/event/TypingEvent.java | 5 +++ .../messenger/entity/message/IMessage.java | 6 ++-- .../entity/message/IMessagePayload.java | 31 ------------------- .../entity/message/IPayloadContainer.java | 31 +++++++++++++++++++ .../messenger/entity/message/Message.java | 4 +-- .../entity/message/MessagePayload.java | 25 --------------- .../entity/message/PayloadContainer.java | 26 ++++++++++++++++ .../message/content/MessageContent.java | 16 ---------- .../entity/message/content/Payload.java | 25 +++++++++++++++ ...xtMessageContent.java => TextPayload.java} | 2 +- 26 files changed, 185 insertions(+), 167 deletions(-) delete mode 100644 data/src/main/java/org/mercury_im/messenger/data/di/RepositoryComponent.java delete mode 100644 data/src/main/java/org/mercury_im/messenger/data/model/AbstractMessageContentModel.java create mode 100644 data/src/main/java/org/mercury_im/messenger/data/model/AbstractMessagePayloadContainerModel.java delete mode 100644 entity/src/main/java/org/mercury_im/messenger/entity/message/IMessagePayload.java create mode 100644 entity/src/main/java/org/mercury_im/messenger/entity/message/IPayloadContainer.java delete mode 100644 entity/src/main/java/org/mercury_im/messenger/entity/message/MessagePayload.java create mode 100644 entity/src/main/java/org/mercury_im/messenger/entity/message/PayloadContainer.java delete mode 100644 entity/src/main/java/org/mercury_im/messenger/entity/message/content/MessageContent.java create mode 100644 entity/src/main/java/org/mercury_im/messenger/entity/message/content/Payload.java rename entity/src/main/java/org/mercury_im/messenger/entity/message/content/{TextMessageContent.java => TextPayload.java} (86%) diff --git a/app/src/main/java/org/mercury_im/messenger/ui/chat/MessagesRecyclerViewAdapter.java b/app/src/main/java/org/mercury_im/messenger/ui/chat/MessagesRecyclerViewAdapter.java index 3f80d73..c0306c0 100644 --- a/app/src/main/java/org/mercury_im/messenger/ui/chat/MessagesRecyclerViewAdapter.java +++ b/app/src/main/java/org/mercury_im/messenger/ui/chat/MessagesRecyclerViewAdapter.java @@ -11,7 +11,7 @@ import androidx.recyclerview.widget.RecyclerView; import org.mercury_im.messenger.R; import org.mercury_im.messenger.entity.message.Message; -import org.mercury_im.messenger.entity.message.content.TextMessageContent; +import org.mercury_im.messenger.entity.message.content.TextPayload; import org.mercury_im.messenger.ui.util.MessageBackgroundDrawable; import java.util.ArrayList; @@ -55,7 +55,7 @@ public class MessagesRecyclerViewAdapter extends RecyclerView.Adapter { +public class MessageContentMapping implements Mapping { @Override - public MessageContentModel entityToModel(MessageContent entity, MessageContentModel model) { + public MessagePayloadModel entityToModel(Payload entity, MessagePayloadModel model) { if (entity == null) { return null; } if (model == null) { - model = new MessageContentModel(); + model = new MessagePayloadModel(); } - if (entity instanceof TextMessageContent) { + if (entity instanceof TextPayload) { model.setType(body); - model.setBody(((TextMessageContent) entity).getBody()); + model.setBody(((TextPayload) entity).getBody()); } // else if (...) return model; } @Override - public MessageContent modelToEntity(MessageContentModel model, MessageContent entity) { + public Payload modelToEntity(MessagePayloadModel model, Payload entity) { if (model == null) { - model = new MessageContentModel(); + model = new MessagePayloadModel(); } switch (model.getType()) { case body: if (entity == null) { - TextMessageContent body = new TextMessageContent(); + TextPayload body = new TextPayload(); body.setId(model.getId()); body.setBody(model.getBody()); entity = body; diff --git a/data/src/main/java/org/mercury_im/messenger/data/mapping/MessageMapping.java b/data/src/main/java/org/mercury_im/messenger/data/mapping/MessageMapping.java index c69089a..37796c2 100644 --- a/data/src/main/java/org/mercury_im/messenger/data/mapping/MessageMapping.java +++ b/data/src/main/java/org/mercury_im/messenger/data/mapping/MessageMapping.java @@ -1,10 +1,10 @@ package org.mercury_im.messenger.data.mapping; import org.mercury_im.messenger.data.model.MessageModel; -import org.mercury_im.messenger.data.model.MessagePayloadModel; +import org.mercury_im.messenger.data.model.MessagePayloadContainerModel; import org.mercury_im.messenger.entity.message.IMessage; import org.mercury_im.messenger.entity.message.Message; -import org.mercury_im.messenger.entity.message.MessagePayload; +import org.mercury_im.messenger.entity.message.PayloadContainer; import javax.inject.Inject; @@ -30,8 +30,8 @@ public class MessageMapping implements Mapping { model.setTimestamp(entity.getTimestamp()); model.getPayloads().clear(); - for (MessagePayload payload : entity.getMessagePayloads()) { - MessagePayloadModel payloadModel = messagePayloadMapping.entityToModel(payload, new MessagePayloadModel()); + for (PayloadContainer payload : entity.getMessagePayloads()) { + MessagePayloadContainerModel payloadModel = messagePayloadMapping.entityToModel(payload, new MessagePayloadContainerModel()); payloadModel.setMessage(model); model.getPayloads().add(payloadModel); } diff --git a/data/src/main/java/org/mercury_im/messenger/data/mapping/MessagePayloadMapping.java b/data/src/main/java/org/mercury_im/messenger/data/mapping/MessagePayloadMapping.java index 32cac4a..bbcad94 100644 --- a/data/src/main/java/org/mercury_im/messenger/data/mapping/MessagePayloadMapping.java +++ b/data/src/main/java/org/mercury_im/messenger/data/mapping/MessagePayloadMapping.java @@ -1,17 +1,17 @@ package org.mercury_im.messenger.data.mapping; -import org.mercury_im.messenger.data.model.MessageContentModel; import org.mercury_im.messenger.data.model.MessagePayloadModel; -import org.mercury_im.messenger.entity.message.IMessagePayload; -import org.mercury_im.messenger.entity.message.MessagePayload; -import org.mercury_im.messenger.entity.message.content.MessageContent; +import org.mercury_im.messenger.data.model.MessagePayloadContainerModel; +import org.mercury_im.messenger.entity.message.IPayloadContainer; +import org.mercury_im.messenger.entity.message.PayloadContainer; +import org.mercury_im.messenger.entity.message.content.Payload; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; -public class MessagePayloadMapping implements Mapping { +public class MessagePayloadMapping implements Mapping { private final MessageContentMapping messageContentMapping; @@ -21,17 +21,17 @@ public class MessagePayloadMapping implements Mapping contents = new ArrayList<>(model.getContents().size()); - for (MessageContentModel contentModel : model.getContents()) { - MessageContent contentEntity = messageContentMapping.modelToEntity(contentModel, null); + List contents = new ArrayList<>(model.getContents().size()); + for (MessagePayloadModel contentModel : model.getContents()) { + Payload contentEntity = messageContentMapping.modelToEntity(contentModel, null); contents.add(contentEntity); } entity.setMessageContents(contents); diff --git a/data/src/main/java/org/mercury_im/messenger/data/model/AbstractMessageContentModel.java b/data/src/main/java/org/mercury_im/messenger/data/model/AbstractMessageContentModel.java deleted file mode 100644 index 2f48e26..0000000 --- a/data/src/main/java/org/mercury_im/messenger/data/model/AbstractMessageContentModel.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.mercury_im.messenger.data.model; - -import org.mercury_im.messenger.data.enums.MessageContentType; - -import io.requery.Column; -import io.requery.Entity; -import io.requery.Generated; -import io.requery.Key; -import io.requery.ManyToOne; -import io.requery.Table; - -@Entity -@Table(name = "message_contents") -public abstract class AbstractMessageContentModel { - - @Key @Generated - long id; - - @ManyToOne - MessagePayloadModel payload; - - @Column - String body; - - @Column(nullable = false) - MessageContentType type; -} diff --git a/data/src/main/java/org/mercury_im/messenger/data/model/AbstractMessageModel.java b/data/src/main/java/org/mercury_im/messenger/data/model/AbstractMessageModel.java index b8e495d..72c3971 100644 --- a/data/src/main/java/org/mercury_im/messenger/data/model/AbstractMessageModel.java +++ b/data/src/main/java/org/mercury_im/messenger/data/model/AbstractMessageModel.java @@ -28,7 +28,7 @@ public abstract class AbstractMessageModel implements Persistable { Date timestamp; @OneToMany - Set payloads; + Set payloads; @Column(nullable = false) String legacyId; diff --git a/data/src/main/java/org/mercury_im/messenger/data/model/AbstractMessagePayloadContainerModel.java b/data/src/main/java/org/mercury_im/messenger/data/model/AbstractMessagePayloadContainerModel.java new file mode 100644 index 0000000..8bd4a74 --- /dev/null +++ b/data/src/main/java/org/mercury_im/messenger/data/model/AbstractMessagePayloadContainerModel.java @@ -0,0 +1,24 @@ +package org.mercury_im.messenger.data.model; + +import java.util.Set; + +import io.requery.Entity; +import io.requery.Generated; +import io.requery.Key; +import io.requery.ManyToOne; +import io.requery.OneToMany; +import io.requery.Table; + +@Entity +@Table(name = "msg_payload_containers") +public abstract class AbstractMessagePayloadContainerModel { + + @Key @Generated + long id; + + @ManyToOne + MessageModel message; + + @OneToMany + Set contents; +} diff --git a/data/src/main/java/org/mercury_im/messenger/data/model/AbstractMessagePayloadModel.java b/data/src/main/java/org/mercury_im/messenger/data/model/AbstractMessagePayloadModel.java index e1ad512..f5e3da8 100644 --- a/data/src/main/java/org/mercury_im/messenger/data/model/AbstractMessagePayloadModel.java +++ b/data/src/main/java/org/mercury_im/messenger/data/model/AbstractMessagePayloadModel.java @@ -1,24 +1,27 @@ package org.mercury_im.messenger.data.model; -import java.util.Set; +import org.mercury_im.messenger.data.enums.MessageContentType; +import io.requery.Column; import io.requery.Entity; import io.requery.Generated; import io.requery.Key; import io.requery.ManyToOne; -import io.requery.OneToMany; import io.requery.Table; @Entity -@Table(name = "message_payloads") +@Table(name = "msg_payloads") public abstract class AbstractMessagePayloadModel { @Key @Generated long id; @ManyToOne - MessageModel message; + MessagePayloadContainerModel payload; - @OneToMany - Set contents; + @Column + String body; + + @Column(nullable = false) + MessageContentType type; } diff --git a/entity/src/main/java/org/mercury_im/messenger/entity/Account.java b/entity/src/main/java/org/mercury_im/messenger/entity/Account.java index 251ce19..3079838 100644 --- a/entity/src/main/java/org/mercury_im/messenger/entity/Account.java +++ b/entity/src/main/java/org/mercury_im/messenger/entity/Account.java @@ -2,6 +2,8 @@ package org.mercury_im.messenger.entity; /** * User Account entity. + * + * An implementation of this entity can be found as {@link IAccount}. */ public interface Account { diff --git a/entity/src/main/java/org/mercury_im/messenger/entity/chat/Chat.java b/entity/src/main/java/org/mercury_im/messenger/entity/chat/Chat.java index 7882224..19fd2c6 100644 --- a/entity/src/main/java/org/mercury_im/messenger/entity/chat/Chat.java +++ b/entity/src/main/java/org/mercury_im/messenger/entity/chat/Chat.java @@ -2,6 +2,11 @@ package org.mercury_im.messenger.entity.chat; import org.mercury_im.messenger.entity.Account; +/** + * Generic interface defining shared properties of chats. + * + * Child interfaces of {@link Chat} are {@link DirectChat} and {@link GroupChat}. + */ public interface Chat { long getId(); diff --git a/entity/src/main/java/org/mercury_im/messenger/entity/chat/ChatPreferences.java b/entity/src/main/java/org/mercury_im/messenger/entity/chat/ChatPreferences.java index aebc4a3..f6aee3c 100644 --- a/entity/src/main/java/org/mercury_im/messenger/entity/chat/ChatPreferences.java +++ b/entity/src/main/java/org/mercury_im/messenger/entity/chat/ChatPreferences.java @@ -1,5 +1,10 @@ package org.mercury_im.messenger.entity.chat; +/** + * Interface that describes typical preferences in the context of a chat. + * + * An implementation can be found as {@link IChatPreferences}. + */ public interface ChatPreferences { NotificationPreferences getNotificationPreference(); diff --git a/entity/src/main/java/org/mercury_im/messenger/entity/chat/DirectChat.java b/entity/src/main/java/org/mercury_im/messenger/entity/chat/DirectChat.java index c2ab095..b831e4a 100644 --- a/entity/src/main/java/org/mercury_im/messenger/entity/chat/DirectChat.java +++ b/entity/src/main/java/org/mercury_im/messenger/entity/chat/DirectChat.java @@ -2,6 +2,11 @@ package org.mercury_im.messenger.entity.chat; import org.mercury_im.messenger.entity.contact.Peer; +/** + * Interface that describes a direct chat between the user and another one. + * + * An implementation can be found in {@link IDirectChat}. + */ public interface DirectChat extends Chat { Peer getPeer(); diff --git a/entity/src/main/java/org/mercury_im/messenger/entity/chat/GroupChat.java b/entity/src/main/java/org/mercury_im/messenger/entity/chat/GroupChat.java index c825991..feae5dd 100644 --- a/entity/src/main/java/org/mercury_im/messenger/entity/chat/GroupChat.java +++ b/entity/src/main/java/org/mercury_im/messenger/entity/chat/GroupChat.java @@ -4,6 +4,11 @@ import org.mercury_im.messenger.entity.contact.Peer; import java.util.Set; +/** + * An interface that describes a group chat entity. + * + * An implementation can be found as {@link IGroupChat}. + */ public interface GroupChat extends Chat { Set getParticipants(); diff --git a/entity/src/main/java/org/mercury_im/messenger/entity/contact/Peer.java b/entity/src/main/java/org/mercury_im/messenger/entity/contact/Peer.java index c0ea28a..d91a5e1 100644 --- a/entity/src/main/java/org/mercury_im/messenger/entity/contact/Peer.java +++ b/entity/src/main/java/org/mercury_im/messenger/entity/contact/Peer.java @@ -5,6 +5,8 @@ import org.mercury_im.messenger.entity.Account; /** * Defines a user on the network (eg. a contact, chat partner, group chat member etc). * Basically anyone that may send you a message is a Peer. + * + * An implementation can be found as {@link IPeer}. */ public interface Peer { diff --git a/entity/src/main/java/org/mercury_im/messenger/entity/contact/SubscriptionMode.java b/entity/src/main/java/org/mercury_im/messenger/entity/contact/SubscriptionMode.java index 9eb1f2c..aeb728f 100644 --- a/entity/src/main/java/org/mercury_im/messenger/entity/contact/SubscriptionMode.java +++ b/entity/src/main/java/org/mercury_im/messenger/entity/contact/SubscriptionMode.java @@ -1,5 +1,8 @@ package org.mercury_im.messenger.entity.contact; +/** + * Enum describing the relationship between the user and another entity. + */ public enum SubscriptionMode { /** * No subscription between us an them. diff --git a/entity/src/main/java/org/mercury_im/messenger/entity/event/TypingEvent.java b/entity/src/main/java/org/mercury_im/messenger/entity/event/TypingEvent.java index c0db012..c728929 100644 --- a/entity/src/main/java/org/mercury_im/messenger/entity/event/TypingEvent.java +++ b/entity/src/main/java/org/mercury_im/messenger/entity/event/TypingEvent.java @@ -4,6 +4,11 @@ import org.mercury_im.messenger.entity.contact.Peer; import java.util.Map; +/** + * Event of someone typing in a chat. + * + * An implementation can be found as {@link ITypingEvent}. + */ public interface TypingEvent { Map getTypingStates(); diff --git a/entity/src/main/java/org/mercury_im/messenger/entity/message/IMessage.java b/entity/src/main/java/org/mercury_im/messenger/entity/message/IMessage.java index 66c6bcf..b052aca 100644 --- a/entity/src/main/java/org/mercury_im/messenger/entity/message/IMessage.java +++ b/entity/src/main/java/org/mercury_im/messenger/entity/message/IMessage.java @@ -9,7 +9,7 @@ public class IMessage implements Message { protected String sender; protected String recipient; protected Date timestamp; - protected List payloads; + protected List payloads; protected MessageDeliveryState deliveryState; protected MessageMetadata metadata; @@ -54,12 +54,12 @@ public class IMessage implements Message { } @Override - public List getMessagePayloads() { + public List getMessagePayloads() { return payloads; } @Override - public void setMessagePayloads(List list) { + public void setMessagePayloads(List list) { this.payloads = list; } diff --git a/entity/src/main/java/org/mercury_im/messenger/entity/message/IMessagePayload.java b/entity/src/main/java/org/mercury_im/messenger/entity/message/IMessagePayload.java deleted file mode 100644 index 677616a..0000000 --- a/entity/src/main/java/org/mercury_im/messenger/entity/message/IMessagePayload.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.mercury_im.messenger.entity.message; - -import org.mercury_im.messenger.entity.message.content.MessageContent; - -import java.util.List; - -public class IMessagePayload implements MessagePayload { - - protected long id; - protected List contents; - - @Override - public long getId() { - return id; - } - - @Override - public void setId(long id) { - this.id = id; - } - - @Override - public List getMessageContents() { - return contents; - } - - @Override - public void setMessageContents(List messageContents) { - this.contents = messageContents; - } -} diff --git a/entity/src/main/java/org/mercury_im/messenger/entity/message/IPayloadContainer.java b/entity/src/main/java/org/mercury_im/messenger/entity/message/IPayloadContainer.java new file mode 100644 index 0000000..d5337bd --- /dev/null +++ b/entity/src/main/java/org/mercury_im/messenger/entity/message/IPayloadContainer.java @@ -0,0 +1,31 @@ +package org.mercury_im.messenger.entity.message; + +import org.mercury_im.messenger.entity.message.content.Payload; + +import java.util.List; + +public class IPayloadContainer implements PayloadContainer { + + protected long id; + protected List contents; + + @Override + public long getId() { + return id; + } + + @Override + public void setId(long id) { + this.id = id; + } + + @Override + public List getMessageContents() { + return contents; + } + + @Override + public void setMessageContents(List payloads) { + this.contents = payloads; + } +} diff --git a/entity/src/main/java/org/mercury_im/messenger/entity/message/Message.java b/entity/src/main/java/org/mercury_im/messenger/entity/message/Message.java index c5bcc44..81eab37 100644 --- a/entity/src/main/java/org/mercury_im/messenger/entity/message/Message.java +++ b/entity/src/main/java/org/mercury_im/messenger/entity/message/Message.java @@ -21,9 +21,9 @@ public interface Message { void setTimestamp(Date timestamp); - List getMessagePayloads(); + List getMessagePayloads(); - void setMessagePayloads(List messagePayloads); + void setMessagePayloads(List payloadContainers); MessageDeliveryState getDeliveryState(); diff --git a/entity/src/main/java/org/mercury_im/messenger/entity/message/MessagePayload.java b/entity/src/main/java/org/mercury_im/messenger/entity/message/MessagePayload.java deleted file mode 100644 index d2263b8..0000000 --- a/entity/src/main/java/org/mercury_im/messenger/entity/message/MessagePayload.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.mercury_im.messenger.entity.message; - -import org.mercury_im.messenger.entity.message.content.MessageContent; - -import java.util.List; - -/** - * Defines the payload of a message. - * A payload can either be a plaintext container or an encrypted container and contains - * MessageContents. - * A message may contain encrypted and unencrypted contents. Those could then be represented by - * two different MessageContents. - */ -public interface MessagePayload { - - long getId(); - - void setId(long id); - - List getMessageContents(); - - void setMessageContents(List messageContents); - - -} diff --git a/entity/src/main/java/org/mercury_im/messenger/entity/message/PayloadContainer.java b/entity/src/main/java/org/mercury_im/messenger/entity/message/PayloadContainer.java new file mode 100644 index 0000000..1e31c04 --- /dev/null +++ b/entity/src/main/java/org/mercury_im/messenger/entity/message/PayloadContainer.java @@ -0,0 +1,26 @@ +package org.mercury_im.messenger.entity.message; + +import org.mercury_im.messenger.entity.message.content.Payload; + +import java.util.List; + +/** + * Defines a certain set of {@link Payload Payloads} of a message. + * A {@link PayloadContainer} can either be a plaintext container or an encrypted container and contains + * {@link Payload Payloads}. + * + * A message may contain encrypted and unencrypted payloads. Those could then be represented by + * two different {@link PayloadContainer PayloadContainers}. + */ +public interface PayloadContainer { + + long getId(); + + void setId(long id); + + List getMessageContents(); + + void setMessageContents(List payloads); + + +} diff --git a/entity/src/main/java/org/mercury_im/messenger/entity/message/content/MessageContent.java b/entity/src/main/java/org/mercury_im/messenger/entity/message/content/MessageContent.java deleted file mode 100644 index 7502077..0000000 --- a/entity/src/main/java/org/mercury_im/messenger/entity/message/content/MessageContent.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.mercury_im.messenger.entity.message.content; - -public interface MessageContent { - - long getId(); - - void setId(long id); - - interface Body extends MessageContent { - - String getBody(); - - void setBody(String body); - - } -} diff --git a/entity/src/main/java/org/mercury_im/messenger/entity/message/content/Payload.java b/entity/src/main/java/org/mercury_im/messenger/entity/message/content/Payload.java new file mode 100644 index 0000000..f84a8f7 --- /dev/null +++ b/entity/src/main/java/org/mercury_im/messenger/entity/message/content/Payload.java @@ -0,0 +1,25 @@ +package org.mercury_im.messenger.entity.message.content; + +/** + * Interface describing contents of a message. + * + * A message consists of general information like sender, recipient etc. + * Additionally a message contains at least one payload container, eg. the set of unencrypted + * message contents, or the set of encrypted contents. + * + * Inside those payloads, message contents exist. + */ +public interface Payload { + + long getId(); + + void setId(long id); + + interface Body extends Payload { + + String getBody(); + + void setBody(String body); + + } +} diff --git a/entity/src/main/java/org/mercury_im/messenger/entity/message/content/TextMessageContent.java b/entity/src/main/java/org/mercury_im/messenger/entity/message/content/TextPayload.java similarity index 86% rename from entity/src/main/java/org/mercury_im/messenger/entity/message/content/TextMessageContent.java rename to entity/src/main/java/org/mercury_im/messenger/entity/message/content/TextPayload.java index ba09517..0500d18 100644 --- a/entity/src/main/java/org/mercury_im/messenger/entity/message/content/TextMessageContent.java +++ b/entity/src/main/java/org/mercury_im/messenger/entity/message/content/TextPayload.java @@ -1,6 +1,6 @@ package org.mercury_im.messenger.entity.message.content; -public class TextMessageContent implements MessageContent.Body { +public class TextPayload implements Payload.Body { private long id; private String body;