Refactoring and commenting
This commit is contained in:
parent
40a14abe02
commit
1767a24fde
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -28,7 +28,7 @@ public abstract class AbstractMessageModel implements Persistable {
|
|||
Date timestamp;
|
||||
|
||||
@OneToMany
|
||||
Set<MessagePayloadModel> payloads;
|
||||
Set<MessagePayloadContainerModel> payloads;
|
||||
|
||||
@Column(nullable = false)
|
||||
String legacyId;
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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 {
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
||||
}
|
|
@ -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);
|
||||
|
||||
|
||||
}
|
|
@ -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);
|
||||
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
||||
}
|
||||
}
|
|
@ -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;
|
Loading…
Reference in New Issue