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.R;
import org.mercury_im.messenger.entity.message.Message; 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 org.mercury_im.messenger.ui.util.MessageBackgroundDrawable;
import java.util.ArrayList; import java.util.ArrayList;
@ -55,7 +55,7 @@ public class MessagesRecyclerViewAdapter extends RecyclerView.Adapter<MessagesRe
// } else { // } else {
// holder.body.setBackgroundResource(background.getOutgoingDrawable()); // 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(); 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; package org.mercury_im.messenger.data.mapping;
import org.mercury_im.messenger.data.enums.MessageContentType; import org.mercury_im.messenger.data.model.MessagePayloadModel;
import org.mercury_im.messenger.data.model.MessageContentModel; import org.mercury_im.messenger.entity.message.content.Payload;
import org.mercury_im.messenger.entity.message.content.MessageContent; import org.mercury_im.messenger.entity.message.content.TextPayload;
import org.mercury_im.messenger.entity.message.content.TextMessageContent;
import static org.mercury_im.messenger.data.enums.MessageContentType.body; 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 @Override
public MessageContentModel entityToModel(MessageContent entity, MessageContentModel model) { public MessagePayloadModel entityToModel(Payload entity, MessagePayloadModel model) {
if (entity == null) { if (entity == null) {
return null; return null;
} }
if (model == null) { if (model == null) {
model = new MessageContentModel(); model = new MessagePayloadModel();
} }
if (entity instanceof TextMessageContent) { if (entity instanceof TextPayload) {
model.setType(body); model.setType(body);
model.setBody(((TextMessageContent) entity).getBody()); model.setBody(((TextPayload) entity).getBody());
} }
// else if (...) // else if (...)
return model; return model;
} }
@Override @Override
public MessageContent modelToEntity(MessageContentModel model, MessageContent entity) { public Payload modelToEntity(MessagePayloadModel model, Payload entity) {
if (model == null) { if (model == null) {
model = new MessageContentModel(); model = new MessagePayloadModel();
} }
switch (model.getType()) { switch (model.getType()) {
case body: case body:
if (entity == null) { if (entity == null) {
TextMessageContent body = new TextMessageContent(); TextPayload body = new TextPayload();
body.setId(model.getId()); body.setId(model.getId());
body.setBody(model.getBody()); body.setBody(model.getBody());
entity = body; entity = body;

View file

@ -1,10 +1,10 @@
package org.mercury_im.messenger.data.mapping; package org.mercury_im.messenger.data.mapping;
import org.mercury_im.messenger.data.model.MessageModel; 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.IMessage;
import org.mercury_im.messenger.entity.message.Message; 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; import javax.inject.Inject;
@ -30,8 +30,8 @@ public class MessageMapping implements Mapping<Message, MessageModel> {
model.setTimestamp(entity.getTimestamp()); model.setTimestamp(entity.getTimestamp());
model.getPayloads().clear(); model.getPayloads().clear();
for (MessagePayload payload : entity.getMessagePayloads()) { for (PayloadContainer payload : entity.getMessagePayloads()) {
MessagePayloadModel payloadModel = messagePayloadMapping.entityToModel(payload, new MessagePayloadModel()); MessagePayloadContainerModel payloadModel = messagePayloadMapping.entityToModel(payload, new MessagePayloadContainerModel());
payloadModel.setMessage(model); payloadModel.setMessage(model);
model.getPayloads().add(payloadModel); model.getPayloads().add(payloadModel);
} }

View file

@ -1,17 +1,17 @@
package org.mercury_im.messenger.data.mapping; 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.data.model.MessagePayloadModel;
import org.mercury_im.messenger.entity.message.IMessagePayload; import org.mercury_im.messenger.data.model.MessagePayloadContainerModel;
import org.mercury_im.messenger.entity.message.MessagePayload; import org.mercury_im.messenger.entity.message.IPayloadContainer;
import org.mercury_im.messenger.entity.message.content.MessageContent; import org.mercury_im.messenger.entity.message.PayloadContainer;
import org.mercury_im.messenger.entity.message.content.Payload;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
public class MessagePayloadMapping implements Mapping<MessagePayload, MessagePayloadModel> { public class MessagePayloadMapping implements Mapping<PayloadContainer, MessagePayloadContainerModel> {
private final MessageContentMapping messageContentMapping; private final MessageContentMapping messageContentMapping;
@ -21,17 +21,17 @@ public class MessagePayloadMapping implements Mapping<MessagePayload, MessagePay
} }
@Override @Override
public MessagePayloadModel entityToModel(MessagePayload entity, MessagePayloadModel model) { public MessagePayloadContainerModel entityToModel(PayloadContainer entity, MessagePayloadContainerModel model) {
if (entity == null) { if (entity == null) {
return null; return null;
} }
if (model == null) { if (model == null) {
model = new MessagePayloadModel(); model = new MessagePayloadContainerModel();
} }
model.getContents().clear(); model.getContents().clear();
for (MessageContent contentEntity : entity.getMessageContents()) { for (Payload contentEntity : entity.getMessageContents()) {
MessageContentModel contentModel = messageContentMapping.entityToModel(contentEntity, new MessageContentModel()); MessagePayloadModel contentModel = messageContentMapping.entityToModel(contentEntity, new MessagePayloadModel());
contentModel.setPayload(model); contentModel.setPayload(model);
model.getContents().add(contentModel); model.getContents().add(contentModel);
} }
@ -40,19 +40,19 @@ public class MessagePayloadMapping implements Mapping<MessagePayload, MessagePay
} }
@Override @Override
public MessagePayload modelToEntity(MessagePayloadModel model, MessagePayload entity) { public PayloadContainer modelToEntity(MessagePayloadContainerModel model, PayloadContainer entity) {
if (model == null) { if (model == null) {
return null; return null;
} }
if (entity == null) { if (entity == null) {
entity = new IMessagePayload(); entity = new IPayloadContainer();
} }
entity.setId(model.getId()); entity.setId(model.getId());
List<MessageContent> contents = new ArrayList<>(model.getContents().size()); List<Payload> contents = new ArrayList<>(model.getContents().size());
for (MessageContentModel contentModel : model.getContents()) { for (MessagePayloadModel contentModel : model.getContents()) {
MessageContent contentEntity = messageContentMapping.modelToEntity(contentModel, null); Payload contentEntity = messageContentMapping.modelToEntity(contentModel, null);
contents.add(contentEntity); contents.add(contentEntity);
} }
entity.setMessageContents(contents); 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; Date timestamp;
@OneToMany @OneToMany
Set<MessagePayloadModel> payloads; Set<MessagePayloadContainerModel> payloads;
@Column(nullable = false) @Column(nullable = false)
String legacyId; 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; 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.Entity;
import io.requery.Generated; import io.requery.Generated;
import io.requery.Key; import io.requery.Key;
import io.requery.ManyToOne; import io.requery.ManyToOne;
import io.requery.OneToMany;
import io.requery.Table; import io.requery.Table;
@Entity @Entity
@Table(name = "message_payloads") @Table(name = "msg_payloads")
public abstract class AbstractMessagePayloadModel { public abstract class AbstractMessagePayloadModel {
@Key @Generated @Key @Generated
long id; long id;
@ManyToOne @ManyToOne
MessageModel message; MessagePayloadContainerModel payload;
@OneToMany @Column
Set<MessageContentModel> contents; String body;
@Column(nullable = false)
MessageContentType type;
} }

View file

@ -2,6 +2,8 @@ package org.mercury_im.messenger.entity;
/** /**
* User Account entity. * User Account entity.
*
* An implementation of this entity can be found as {@link IAccount}.
*/ */
public interface Account { public interface Account {

View file

@ -2,6 +2,11 @@ package org.mercury_im.messenger.entity.chat;
import org.mercury_im.messenger.entity.Account; 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 { public interface Chat {
long getId(); long getId();

View file

@ -1,5 +1,10 @@
package org.mercury_im.messenger.entity.chat; 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 { public interface ChatPreferences {
NotificationPreferences getNotificationPreference(); NotificationPreferences getNotificationPreference();

View file

@ -2,6 +2,11 @@ package org.mercury_im.messenger.entity.chat;
import org.mercury_im.messenger.entity.contact.Peer; 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 { public interface DirectChat extends Chat {
Peer getPeer(); Peer getPeer();

View file

@ -4,6 +4,11 @@ import org.mercury_im.messenger.entity.contact.Peer;
import java.util.Set; 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 { public interface GroupChat extends Chat {
Set<Peer> getParticipants(); 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). * 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. * Basically anyone that may send you a message is a Peer.
*
* An implementation can be found as {@link IPeer}.
*/ */
public interface Peer { public interface Peer {

View file

@ -1,5 +1,8 @@
package org.mercury_im.messenger.entity.contact; package org.mercury_im.messenger.entity.contact;
/**
* Enum describing the relationship between the user and another entity.
*/
public enum SubscriptionMode { public enum SubscriptionMode {
/** /**
* No subscription between us an them. * No subscription between us an them.

View file

@ -4,6 +4,11 @@ import org.mercury_im.messenger.entity.contact.Peer;
import java.util.Map; import java.util.Map;
/**
* Event of someone typing in a chat.
*
* An implementation can be found as {@link ITypingEvent}.
*/
public interface TypingEvent { public interface TypingEvent {
Map<Peer, TypingState> getTypingStates(); Map<Peer, TypingState> getTypingStates();

View file

@ -9,7 +9,7 @@ public class IMessage implements Message {
protected String sender; protected String sender;
protected String recipient; protected String recipient;
protected Date timestamp; protected Date timestamp;
protected List<MessagePayload> payloads; protected List<PayloadContainer> payloads;
protected MessageDeliveryState deliveryState; protected MessageDeliveryState deliveryState;
protected MessageMetadata metadata; protected MessageMetadata metadata;
@ -54,12 +54,12 @@ public class IMessage implements Message {
} }
@Override @Override
public List<MessagePayload> getMessagePayloads() { public List<PayloadContainer> getMessagePayloads() {
return payloads; return payloads;
} }
@Override @Override
public void setMessagePayloads(List<MessagePayload> list) { public void setMessagePayloads(List<PayloadContainer> list) {
this.payloads = 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); void setTimestamp(Date timestamp);
List<MessagePayload> getMessagePayloads(); List<PayloadContainer> getMessagePayloads();
void setMessagePayloads(List<MessagePayload> messagePayloads); void setMessagePayloads(List<PayloadContainer> payloadContainers);
MessageDeliveryState getDeliveryState(); 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; package org.mercury_im.messenger.entity.message.content;
public class TextMessageContent implements MessageContent.Body { public class TextPayload implements Payload.Body {
private long id; private long id;
private String body; private String body;