Refactoring and commenting

This commit is contained in:
Paul Schaub 2019-12-06 20:48:27 +01:00
parent 40a14abe02
commit 1767a24fde
Signed by: vanitasvitae
GPG Key ID: 62BEE9264BF17311
26 changed files with 185 additions and 167 deletions

View File

@ -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<MessagesRe
// } else {
// holder.body.setBackgroundResource(background.getOutgoingDrawable());
// }
holder.body.setText(((TextMessageContent) message.getMessagePayloads().get(0).getMessageContents().get(0)).getBody());
holder.body.setText(((TextPayload) message.getMessagePayloads().get(0).getMessageContents().get(0)).getBody());
holder.body.requestLayout();
}

View File

@ -1,23 +0,0 @@
package org.mercury_im.messenger.data.di;
import org.mercury_im.messenger.data.repository.XmppAccountRepository;
import org.mercury_im.messenger.data.repository.XmppDirectChatRepository;
import org.mercury_im.messenger.data.repository.XmppGroupChatRepository;
import org.mercury_im.messenger.data.repository.XmppPeerRepository;
import dagger.Component;
@Component(modules = {
RepositoryModule.class
})
public interface RepositoryComponent {
void inject(XmppAccountRepository accountRepository);
void inject(XmppPeerRepository peerRepository);
void inject(XmppDirectChatRepository directChatRepository);
void inject(XmppGroupChatRepository groupChatRepository);
}

View File

@ -1,40 +1,39 @@
package org.mercury_im.messenger.data.mapping;
import org.mercury_im.messenger.data.enums.MessageContentType;
import org.mercury_im.messenger.data.model.MessageContentModel;
import org.mercury_im.messenger.entity.message.content.MessageContent;
import org.mercury_im.messenger.entity.message.content.TextMessageContent;
import org.mercury_im.messenger.data.model.MessagePayloadModel;
import org.mercury_im.messenger.entity.message.content.Payload;
import org.mercury_im.messenger.entity.message.content.TextPayload;
import static org.mercury_im.messenger.data.enums.MessageContentType.body;
public class MessageContentMapping implements Mapping<MessageContent, MessageContentModel> {
public class MessageContentMapping implements Mapping<Payload, MessagePayloadModel> {
@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;

View File

@ -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<Message, MessageModel> {
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);
}

View File

@ -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<MessagePayload, MessagePayloadModel> {
public class MessagePayloadMapping implements Mapping<PayloadContainer, MessagePayloadContainerModel> {
private final MessageContentMapping messageContentMapping;
@ -21,17 +21,17 @@ public class MessagePayloadMapping implements Mapping<MessagePayload, MessagePay
}
@Override
public MessagePayloadModel entityToModel(MessagePayload entity, MessagePayloadModel model) {
public MessagePayloadContainerModel entityToModel(PayloadContainer entity, MessagePayloadContainerModel model) {
if (entity == null) {
return null;
}
if (model == null) {
model = new MessagePayloadModel();
model = new MessagePayloadContainerModel();
}
model.getContents().clear();
for (MessageContent contentEntity : entity.getMessageContents()) {
MessageContentModel contentModel = messageContentMapping.entityToModel(contentEntity, new MessageContentModel());
for (Payload contentEntity : entity.getMessageContents()) {
MessagePayloadModel contentModel = messageContentMapping.entityToModel(contentEntity, new MessagePayloadModel());
contentModel.setPayload(model);
model.getContents().add(contentModel);
}
@ -40,19 +40,19 @@ public class MessagePayloadMapping implements Mapping<MessagePayload, MessagePay
}
@Override
public MessagePayload modelToEntity(MessagePayloadModel model, MessagePayload entity) {
public PayloadContainer modelToEntity(MessagePayloadContainerModel model, PayloadContainer entity) {
if (model == null) {
return null;
}
if (entity == null) {
entity = new IMessagePayload();
entity = new IPayloadContainer();
}
entity.setId(model.getId());
List<MessageContent> contents = new ArrayList<>(model.getContents().size());
for (MessageContentModel contentModel : model.getContents()) {
MessageContent contentEntity = messageContentMapping.modelToEntity(contentModel, null);
List<Payload> contents = new ArrayList<>(model.getContents().size());
for (MessagePayloadModel contentModel : model.getContents()) {
Payload contentEntity = messageContentMapping.modelToEntity(contentModel, null);
contents.add(contentEntity);
}
entity.setMessageContents(contents);

View File

@ -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;
}

View File

@ -28,7 +28,7 @@ public abstract class AbstractMessageModel implements Persistable {
Date timestamp;
@OneToMany
Set<MessagePayloadModel> payloads;
Set<MessagePayloadContainerModel> payloads;
@Column(nullable = false)
String legacyId;

View File

@ -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<MessagePayloadModel> contents;
}

View File

@ -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<MessageContentModel> contents;
@Column
String body;
@Column(nullable = false)
MessageContentType type;
}

View File

@ -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 {

View File

@ -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();

View File

@ -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();

View File

@ -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();

View File

@ -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<Peer> getParticipants();

View File

@ -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 {

View File

@ -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.

View File

@ -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<Peer, TypingState> getTypingStates();

View File

@ -9,7 +9,7 @@ public class IMessage implements Message {
protected String sender;
protected String recipient;
protected Date timestamp;
protected List<MessagePayload> payloads;
protected List<PayloadContainer> payloads;
protected MessageDeliveryState deliveryState;
protected MessageMetadata metadata;
@ -54,12 +54,12 @@ public class IMessage implements Message {
}
@Override
public List<MessagePayload> getMessagePayloads() {
public List<PayloadContainer> getMessagePayloads() {
return payloads;
}
@Override
public void setMessagePayloads(List<MessagePayload> list) {
public void setMessagePayloads(List<PayloadContainer> list) {
this.payloads = list;
}

View File

@ -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<MessageContent> contents;
@Override
public long getId() {
return id;
}
@Override
public void setId(long id) {
this.id = id;
}
@Override
public List<MessageContent> getMessageContents() {
return contents;
}
@Override
public void setMessageContents(List<MessageContent> messageContents) {
this.contents = messageContents;
}
}

View File

@ -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<Payload> contents;
@Override
public long getId() {
return id;
}
@Override
public void setId(long id) {
this.id = id;
}
@Override
public List<Payload> getMessageContents() {
return contents;
}
@Override
public void setMessageContents(List<Payload> payloads) {
this.contents = payloads;
}
}

View File

@ -21,9 +21,9 @@ public interface Message {
void setTimestamp(Date timestamp);
List<MessagePayload> getMessagePayloads();
List<PayloadContainer> getMessagePayloads();
void setMessagePayloads(List<MessagePayload> messagePayloads);
void setMessagePayloads(List<PayloadContainer> payloadContainers);
MessageDeliveryState getDeliveryState();

View File

@ -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<MessageContent> getMessageContents();
void setMessageContents(List<MessageContent> messageContents);
}

View File

@ -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<Payload> getMessageContents();
void setMessageContents(List<Payload> payloads);
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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;