diff --git a/app/build.gradle b/app/build.gradle index d5e0dd5..ff60256 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -73,7 +73,7 @@ check.configure { dependencies { // Depend on the core project for XMPP related stuff - implementation project(':core') + implementation project(':core-old') implementation "io.requery:requery-android:$requeryVersion" implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.41' diff --git a/core-old/.gitignore b/core-old/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/core-old/.gitignore @@ -0,0 +1 @@ +/build diff --git a/core-old/build.gradle b/core-old/build.gradle new file mode 100644 index 0000000..6ecb6fa --- /dev/null +++ b/core-old/build.gradle @@ -0,0 +1,45 @@ +apply plugin: 'java-library' + +// Add the generated folder to the source directories so that we can work with generated classes +// This is apparently necessary for use with requery. +sourceSets { + main.java.srcDirs += "${buildDir}/generated/sources/annotationProcessor/java/main/" +} + +dependencies { + + api project(':entity') // Entities + api project(':repository') // Repository + api project(":thread_utils") + + // Smack + // Not all of those are needed, but it may be a good idea to define those versions explicitly + api "org.igniterealtime.smack:smack-core:$smackCoreVersion" + api "org.igniterealtime.smack:smack-experimental:$smackExperimentalVersion" + api "org.igniterealtime.smack:smack-extensions:$smackExtensionsVersion" + api "org.igniterealtime.smack:smack-im:$smackImVersion" + api "org.igniterealtime.smack:smack-tcp:$smackTcpVersion" + + // api "org.igniterealtime.smack:smack-omemo:$smackOmemoVersion" + // api "org.igniterealtime.smack:smack-omemo-signal:$smackOmemoSignalVersion" + // api "org.igniterealtime.smack:smack-openpgp:$smackOpenpgpVersion" + // api "org.igniterealtime.smack:smack-resolver-minidns:$smackResolverMiniDnsVersion" + + + // RxJava2 + api "io.reactivex.rxjava2:rxjava:$rxJava2Version" + + // Dagger 2 for dependency injection + implementation "com.google.dagger:dagger:$daggerVersion" + annotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion" + + // Requery ORM + api "io.requery:requery:$requeryVersion" + annotationProcessor "io.requery:requery-processor:$requeryVersion" + + // JUnit for testing + testImplementation "junit:junit:$junitVersion" +} + +sourceCompatibility = "8" +targetCompatibility = "8" diff --git a/core/src/main/java/org/mercury_im/messenger/core/NotificationManager.java b/core-old/src/main/java/org/mercury_im/messenger/core/NotificationManager.java similarity index 100% rename from core/src/main/java/org/mercury_im/messenger/core/NotificationManager.java rename to core-old/src/main/java/org/mercury_im/messenger/core/NotificationManager.java diff --git a/core/src/main/java/org/mercury_im/messenger/core/centers/ConnectionCenter.java b/core-old/src/main/java/org/mercury_im/messenger/core/centers/ConnectionCenter.java similarity index 100% rename from core/src/main/java/org/mercury_im/messenger/core/centers/ConnectionCenter.java rename to core-old/src/main/java/org/mercury_im/messenger/core/centers/ConnectionCenter.java diff --git a/core/src/main/java/org/mercury_im/messenger/core/centers/ContactCenter.java b/core-old/src/main/java/org/mercury_im/messenger/core/centers/ContactCenter.java similarity index 100% rename from core/src/main/java/org/mercury_im/messenger/core/centers/ContactCenter.java rename to core-old/src/main/java/org/mercury_im/messenger/core/centers/ContactCenter.java diff --git a/core/src/main/java/org/mercury_im/messenger/core/centers/MessageCenter.java b/core-old/src/main/java/org/mercury_im/messenger/core/centers/MessageCenter.java similarity index 100% rename from core/src/main/java/org/mercury_im/messenger/core/centers/MessageCenter.java rename to core-old/src/main/java/org/mercury_im/messenger/core/centers/MessageCenter.java diff --git a/core/src/main/java/org/mercury_im/messenger/core/connection/ConnectionState.java b/core-old/src/main/java/org/mercury_im/messenger/core/connection/ConnectionState.java similarity index 100% rename from core/src/main/java/org/mercury_im/messenger/core/connection/ConnectionState.java rename to core-old/src/main/java/org/mercury_im/messenger/core/connection/ConnectionState.java diff --git a/core/src/main/java/org/mercury_im/messenger/core/connection/MercuryConfiguration.java b/core-old/src/main/java/org/mercury_im/messenger/core/connection/MercuryConfiguration.java similarity index 100% rename from core/src/main/java/org/mercury_im/messenger/core/connection/MercuryConfiguration.java rename to core-old/src/main/java/org/mercury_im/messenger/core/connection/MercuryConfiguration.java diff --git a/core/src/main/java/org/mercury_im/messenger/core/connection/MercuryConnection.java b/core-old/src/main/java/org/mercury_im/messenger/core/connection/MercuryConnection.java similarity index 100% rename from core/src/main/java/org/mercury_im/messenger/core/connection/MercuryConnection.java rename to core-old/src/main/java/org/mercury_im/messenger/core/connection/MercuryConnection.java diff --git a/core/src/main/java/org/mercury_im/messenger/core/di/CenterModule.java b/core-old/src/main/java/org/mercury_im/messenger/core/di/CenterModule.java similarity index 100% rename from core/src/main/java/org/mercury_im/messenger/core/di/CenterModule.java rename to core-old/src/main/java/org/mercury_im/messenger/core/di/CenterModule.java diff --git a/core/src/main/java/org/mercury_im/messenger/core/di/XmppComponent.java b/core-old/src/main/java/org/mercury_im/messenger/core/di/XmppComponent.java similarity index 100% rename from core/src/main/java/org/mercury_im/messenger/core/di/XmppComponent.java rename to core-old/src/main/java/org/mercury_im/messenger/core/di/XmppComponent.java diff --git a/core/src/main/java/org/mercury_im/messenger/core/stores/EntityCapsStore.java b/core-old/src/main/java/org/mercury_im/messenger/core/stores/EntityCapsStore.java similarity index 100% rename from core/src/main/java/org/mercury_im/messenger/core/stores/EntityCapsStore.java rename to core-old/src/main/java/org/mercury_im/messenger/core/stores/EntityCapsStore.java diff --git a/core/src/main/java/org/mercury_im/messenger/core/stores/PlainMessageStore.java b/core-old/src/main/java/org/mercury_im/messenger/core/stores/PlainMessageStore.java similarity index 100% rename from core/src/main/java/org/mercury_im/messenger/core/stores/PlainMessageStore.java rename to core-old/src/main/java/org/mercury_im/messenger/core/stores/PlainMessageStore.java diff --git a/core/src/main/java/org/mercury_im/messenger/core/stores/RosterStore.java b/core-old/src/main/java/org/mercury_im/messenger/core/stores/RosterStore.java similarity index 100% rename from core/src/main/java/org/mercury_im/messenger/core/stores/RosterStore.java rename to core-old/src/main/java/org/mercury_im/messenger/core/stores/RosterStore.java diff --git a/core/src/main/java/org/mercury_im/messenger/core/util/ContactNameUtil.java b/core-old/src/main/java/org/mercury_im/messenger/core/util/ContactNameUtil.java similarity index 100% rename from core/src/main/java/org/mercury_im/messenger/core/util/ContactNameUtil.java rename to core-old/src/main/java/org/mercury_im/messenger/core/util/ContactNameUtil.java diff --git a/core/build.gradle b/core/build.gradle index 6ecb6fa..a723522 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -1,42 +1,18 @@ apply plugin: 'java-library' -// Add the generated folder to the source directories so that we can work with generated classes -// This is apparently necessary for use with requery. -sourceSets { - main.java.srcDirs += "${buildDir}/generated/sources/annotationProcessor/java/main/" -} - dependencies { - api project(':entity') // Entities - api project(':repository') // Repository - api project(":thread_utils") - - // Smack - // Not all of those are needed, but it may be a good idea to define those versions explicitly - api "org.igniterealtime.smack:smack-core:$smackCoreVersion" - api "org.igniterealtime.smack:smack-experimental:$smackExperimentalVersion" - api "org.igniterealtime.smack:smack-extensions:$smackExtensionsVersion" - api "org.igniterealtime.smack:smack-im:$smackImVersion" - api "org.igniterealtime.smack:smack-tcp:$smackTcpVersion" - - // api "org.igniterealtime.smack:smack-omemo:$smackOmemoVersion" - // api "org.igniterealtime.smack:smack-omemo-signal:$smackOmemoSignalVersion" - // api "org.igniterealtime.smack:smack-openpgp:$smackOpenpgpVersion" - // api "org.igniterealtime.smack:smack-resolver-minidns:$smackResolverMiniDnsVersion" - + implementation project(':entity') + implementation project(':repository') + implementation project(":thread_utils") // RxJava2 - api "io.reactivex.rxjava2:rxjava:$rxJava2Version" + implementation "io.reactivex.rxjava2:rxjava:$rxJava2Version" // Dagger 2 for dependency injection implementation "com.google.dagger:dagger:$daggerVersion" annotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion" - // Requery ORM - api "io.requery:requery:$requeryVersion" - annotationProcessor "io.requery:requery-processor:$requeryVersion" - // JUnit for testing testImplementation "junit:junit:$junitVersion" } diff --git a/core/src/main/java/org/mercury_im/core/connection/IncomingDirectMessageListener.java b/core/src/main/java/org/mercury_im/core/connection/IncomingDirectMessageListener.java new file mode 100644 index 0000000..eabbea5 --- /dev/null +++ b/core/src/main/java/org/mercury_im/core/connection/IncomingDirectMessageListener.java @@ -0,0 +1,16 @@ +package org.mercury_im.core.connection; + +import org.mercury_im.messenger.core.entity.Account; +import org.mercury_im.messenger.core.entity.Address; +import org.mercury_im.messenger.core.entity.chat.DirectChat; +import org.mercury_im.messenger.core.entity.contact.Interlocutor; +import org.mercury_im.messenger.core.entity.message.AbstractMessage; + +public interface IncomingDirectMessageListener< + AC extends Account, + AD extends Address.UserAddress, + IL extends Interlocutor> { + + void onIncomingDirectMessage(AC account, DirectChat chat, AbstractMessage message); + +} diff --git a/core/src/main/java/org/mercury_im/core/connection/IncomingGroupChatMessageListener.java b/core/src/main/java/org/mercury_im/core/connection/IncomingGroupChatMessageListener.java new file mode 100644 index 0000000..5a73d66 --- /dev/null +++ b/core/src/main/java/org/mercury_im/core/connection/IncomingGroupChatMessageListener.java @@ -0,0 +1,19 @@ +package org.mercury_im.core.connection; + +import org.mercury_im.messenger.core.entity.Account; +import org.mercury_im.messenger.core.entity.Address; +import org.mercury_im.messenger.core.entity.chat.DirectChat; +import org.mercury_im.messenger.core.entity.chat.GroupChat; +import org.mercury_im.messenger.core.entity.contact.Interlocutor; +import org.mercury_im.messenger.core.entity.message.AbstractMessage; + +public interface IncomingGroupChatMessageListener< + AC extends Account, + AD extends Address.UserAddress, + RA extends Address.RoomAddress, + PA extends Address.RoomParticipantAddress, + IL extends Interlocutor> { + + void onIncomingDirectMessage(AC account, GroupChat chat, AbstractMessage message); + +} diff --git a/entity/src/main/java/org/mercury_im/messenger/core/entity/DirectChat.java b/entity/src/main/java/org/mercury_im/messenger/core/entity/DirectChat.java deleted file mode 100644 index 2e03482..0000000 --- a/entity/src/main/java/org/mercury_im/messenger/core/entity/DirectChat.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.mercury_im.messenger.core.entity; - -public interface DirectChat< - IL extends Interlocutor, - AC extends Account, - AD extends Address.UserAddress> - extends Chat { - - IL getInterlocutor(); - - void setInterlocutor(IL interlocutor); - -} diff --git a/entity/src/main/java/org/mercury_im/messenger/core/entity/GroupChat.java b/entity/src/main/java/org/mercury_im/messenger/core/entity/GroupChat.java deleted file mode 100644 index 21bfd0d..0000000 --- a/entity/src/main/java/org/mercury_im/messenger/core/entity/GroupChat.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.mercury_im.messenger.core.entity; - -public interface GroupChat< - AC extends Account, - AD extends Address.UserAddress, - RA extends Address.RoomAddress> - extends Chat { - - RA getRoomAddress(); - - void setRoomAddress(RA roomAddress); - - String getRoomName(); - - void setRoomName(String roomName); -} diff --git a/entity/src/main/java/org/mercury_im/messenger/core/entity/Interlocutor.java b/entity/src/main/java/org/mercury_im/messenger/core/entity/Interlocutor.java deleted file mode 100644 index 2e1072a..0000000 --- a/entity/src/main/java/org/mercury_im/messenger/core/entity/Interlocutor.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.mercury_im.messenger.core.entity; - -/** - * Defines a user on the network (eg. a contact, chat partner etc). - * - * @param Account Type - * @param UserAddress Type - */ -public interface Interlocutor< - AC extends Account, - AD extends Address.UserAddress> { - - long getId(); - - void setId(long id); - - AC getAccount(); - - void setAccount(AC account); - - AD getAddress(); - - void setAddress(AD address); - - String getName(); - - void setName(String name); -} diff --git a/entity/src/main/java/org/mercury_im/messenger/core/entity/MessageContent.java b/entity/src/main/java/org/mercury_im/messenger/core/entity/MessageContent.java deleted file mode 100644 index 2bb7133..0000000 --- a/entity/src/main/java/org/mercury_im/messenger/core/entity/MessageContent.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.mercury_im.messenger.core.entity; - -public interface MessageContent { - - String getBody(); - - void setBody(String body); -} diff --git a/entity/src/main/java/org/mercury_im/messenger/core/entity/AbstractDirectChat.java b/entity/src/main/java/org/mercury_im/messenger/core/entity/chat/AbstractDirectChat.java similarity index 58% rename from entity/src/main/java/org/mercury_im/messenger/core/entity/AbstractDirectChat.java rename to entity/src/main/java/org/mercury_im/messenger/core/entity/chat/AbstractDirectChat.java index 0bcea11..aa11194 100644 --- a/entity/src/main/java/org/mercury_im/messenger/core/entity/AbstractDirectChat.java +++ b/entity/src/main/java/org/mercury_im/messenger/core/entity/chat/AbstractDirectChat.java @@ -1,6 +1,10 @@ -package org.mercury_im.messenger.core.entity; +package org.mercury_im.messenger.core.entity.chat; -public class AbstractDirectChat< +import org.mercury_im.messenger.core.entity.Address; +import org.mercury_im.messenger.core.entity.Account; +import org.mercury_im.messenger.core.entity.contact.Interlocutor; + +public abstract class AbstractDirectChat< IL extends Interlocutor, AC extends Account, AD extends Address.UserAddress> @@ -9,6 +13,7 @@ public class AbstractDirectChat< protected long id; protected IL interlocutor; protected AC account; + protected ChatPreferences preferences; @Override public IL getInterlocutor() { @@ -39,4 +44,14 @@ public class AbstractDirectChat< public void setAccount(AC account) { this.account = account; } + + @Override + public ChatPreferences getChatPreferences() { + return preferences; + } + + @Override + public void setChatPreferences(ChatPreferences chatPreferences) { + this.preferences = chatPreferences; + } } diff --git a/entity/src/main/java/org/mercury_im/messenger/core/entity/AbstractGroupChat.java b/entity/src/main/java/org/mercury_im/messenger/core/entity/chat/AbstractGroupChat.java similarity index 66% rename from entity/src/main/java/org/mercury_im/messenger/core/entity/AbstractGroupChat.java rename to entity/src/main/java/org/mercury_im/messenger/core/entity/chat/AbstractGroupChat.java index e6c99af..13d6d79 100644 --- a/entity/src/main/java/org/mercury_im/messenger/core/entity/AbstractGroupChat.java +++ b/entity/src/main/java/org/mercury_im/messenger/core/entity/chat/AbstractGroupChat.java @@ -1,6 +1,9 @@ -package org.mercury_im.messenger.core.entity; +package org.mercury_im.messenger.core.entity.chat; -public class AbstractGroupChat< +import org.mercury_im.messenger.core.entity.Address; +import org.mercury_im.messenger.core.entity.Account; + +public abstract class AbstractGroupChat< AC extends Account, AD extends Address.UserAddress, RA extends Address.RoomAddress> @@ -10,6 +13,7 @@ public class AbstractGroupChat< private AC account; private RA roomAddress; private String roomName; + protected ChatPreferences preferences; @Override public RA getRoomAddress() { @@ -50,4 +54,16 @@ public class AbstractGroupChat< public void setAccount(AC account) { this.account = account; } + + + @Override + public ChatPreferences getChatPreferences() { + return preferences; + } + + @Override + public void setChatPreferences(ChatPreferences chatPreferences) { + this.preferences = preferences; + } + } diff --git a/entity/src/main/java/org/mercury_im/messenger/core/entity/Chat.java b/entity/src/main/java/org/mercury_im/messenger/core/entity/chat/Chat.java similarity index 66% rename from entity/src/main/java/org/mercury_im/messenger/core/entity/Chat.java rename to entity/src/main/java/org/mercury_im/messenger/core/entity/chat/Chat.java index d5a858c..175891a 100644 --- a/entity/src/main/java/org/mercury_im/messenger/core/entity/Chat.java +++ b/entity/src/main/java/org/mercury_im/messenger/core/entity/chat/Chat.java @@ -1,4 +1,7 @@ -package org.mercury_im.messenger.core.entity; +package org.mercury_im.messenger.core.entity.chat; + +import org.mercury_im.messenger.core.entity.Address; +import org.mercury_im.messenger.core.entity.Account; public interface Chat< AC extends Account, diff --git a/entity/src/main/java/org/mercury_im/messenger/core/entity/ChatPreferences.java b/entity/src/main/java/org/mercury_im/messenger/core/entity/chat/ChatPreferences.java similarity index 94% rename from entity/src/main/java/org/mercury_im/messenger/core/entity/ChatPreferences.java rename to entity/src/main/java/org/mercury_im/messenger/core/entity/chat/ChatPreferences.java index af7db4b..c364525 100644 --- a/entity/src/main/java/org/mercury_im/messenger/core/entity/ChatPreferences.java +++ b/entity/src/main/java/org/mercury_im/messenger/core/entity/chat/ChatPreferences.java @@ -1,4 +1,4 @@ -package org.mercury_im.messenger.core.entity; +package org.mercury_im.messenger.core.entity.chat; public interface ChatPreferences { diff --git a/entity/src/main/java/org/mercury_im/messenger/core/entity/chat/DirectChat.java b/entity/src/main/java/org/mercury_im/messenger/core/entity/chat/DirectChat.java new file mode 100644 index 0000000..088b4b7 --- /dev/null +++ b/entity/src/main/java/org/mercury_im/messenger/core/entity/chat/DirectChat.java @@ -0,0 +1,17 @@ +package org.mercury_im.messenger.core.entity.chat; + +import org.mercury_im.messenger.core.entity.Address; +import org.mercury_im.messenger.core.entity.Account; +import org.mercury_im.messenger.core.entity.contact.Interlocutor; + +public interface DirectChat< + IL extends Interlocutor, + AC extends Account, + AD extends Address.UserAddress> + extends Chat { + + IL getInterlocutor(); + + void setInterlocutor(IL interlocutor); + +} diff --git a/entity/src/main/java/org/mercury_im/messenger/core/entity/chat/GroupChat.java b/entity/src/main/java/org/mercury_im/messenger/core/entity/chat/GroupChat.java new file mode 100644 index 0000000..dcf8806 --- /dev/null +++ b/entity/src/main/java/org/mercury_im/messenger/core/entity/chat/GroupChat.java @@ -0,0 +1,28 @@ +package org.mercury_im.messenger.core.entity.chat; + +import org.mercury_im.messenger.core.entity.Address; +import org.mercury_im.messenger.core.entity.Account; +import org.mercury_im.messenger.core.entity.contact.Interlocutor; + +import java.util.Set; + +public interface GroupChat< + AC extends Account, + AD extends Address.UserAddress, + RA extends Address.RoomAddress, + PA extends Address.RoomParticipantAddress, + IL extends Interlocutor> + extends Chat { + + Set getParticipants(); + + void setParticipants(Set participants); + + RA getRoomAddress(); + + void setRoomAddress(RA roomAddress); + + String getRoomName(); + + void setRoomName(String roomName); +} diff --git a/entity/src/main/java/org/mercury_im/messenger/core/entity/AbstractInterlocutor.java b/entity/src/main/java/org/mercury_im/messenger/core/entity/contact/AbstractInterlocutor.java similarity index 65% rename from entity/src/main/java/org/mercury_im/messenger/core/entity/AbstractInterlocutor.java rename to entity/src/main/java/org/mercury_im/messenger/core/entity/contact/AbstractInterlocutor.java index b10ea15..22fe69b 100644 --- a/entity/src/main/java/org/mercury_im/messenger/core/entity/AbstractInterlocutor.java +++ b/entity/src/main/java/org/mercury_im/messenger/core/entity/contact/AbstractInterlocutor.java @@ -1,13 +1,17 @@ -package org.mercury_im.messenger.core.entity; +package org.mercury_im.messenger.core.entity.contact; -public class AbstractInterlocutor< +import org.mercury_im.messenger.core.entity.Account; +import org.mercury_im.messenger.core.entity.Address; + +public abstract class AbstractInterlocutor< AC extends Account, + IA extends Address, AD extends Address.UserAddress> - implements Interlocutor { + implements Interlocutor { protected long id; protected AC account; - protected AD address; + protected IA address; protected String name; @Override @@ -31,12 +35,12 @@ public class AbstractInterlocutor< } @Override - public AD getAddress() { + public IA getAddress() { return address; } @Override - public void setAddress(AD address) { + public void setAddress(IA address) { this.address = address; } diff --git a/entity/src/main/java/org/mercury_im/messenger/core/entity/Contact.java b/entity/src/main/java/org/mercury_im/messenger/core/entity/contact/Contact.java similarity index 81% rename from entity/src/main/java/org/mercury_im/messenger/core/entity/Contact.java rename to entity/src/main/java/org/mercury_im/messenger/core/entity/contact/Contact.java index d28db10..deff2e9 100644 --- a/entity/src/main/java/org/mercury_im/messenger/core/entity/Contact.java +++ b/entity/src/main/java/org/mercury_im/messenger/core/entity/contact/Contact.java @@ -1,9 +1,12 @@ -package org.mercury_im.messenger.core.entity; +package org.mercury_im.messenger.core.entity.contact; + +import org.mercury_im.messenger.core.entity.Account; +import org.mercury_im.messenger.core.entity.Address; public interface Contact< AC extends Account, AD extends Address.UserAddress> - extends Interlocutor { + extends Interlocutor { SubscriptionMode getSubscriptionMode(); diff --git a/entity/src/main/java/org/mercury_im/messenger/core/entity/contact/Interlocutor.java b/entity/src/main/java/org/mercury_im/messenger/core/entity/contact/Interlocutor.java new file mode 100644 index 0000000..ae2aea7 --- /dev/null +++ b/entity/src/main/java/org/mercury_im/messenger/core/entity/contact/Interlocutor.java @@ -0,0 +1,34 @@ +package org.mercury_im.messenger.core.entity.contact; + +import org.mercury_im.messenger.core.entity.Account; +import org.mercury_im.messenger.core.entity.Address; + +/** + * Defines a user on the network (eg. a contact, chat partner, group chat member etc). + * Basically anyone that may send you a message is an Interlocutor. + * + * @param Account Type + * @param Address type for the Interlocutor + * @param UserAddress type for the account + */ +public interface Interlocutor< + AC extends Account, + IA extends Address, + AD extends Address.UserAddress> { + + long getId(); + + void setId(long id); + + AC getAccount(); + + void setAccount(AC account); + + IA getAddress(); + + void setAddress(IA address); + + String getName(); + + void setName(String name); +} diff --git a/entity/src/main/java/org/mercury_im/messenger/core/entity/AbstractMessage.java b/entity/src/main/java/org/mercury_im/messenger/core/entity/message/AbstractMessage.java similarity index 73% rename from entity/src/main/java/org/mercury_im/messenger/core/entity/AbstractMessage.java rename to entity/src/main/java/org/mercury_im/messenger/core/entity/message/AbstractMessage.java index 7111c47..d492ce5 100644 --- a/entity/src/main/java/org/mercury_im/messenger/core/entity/AbstractMessage.java +++ b/entity/src/main/java/org/mercury_im/messenger/core/entity/message/AbstractMessage.java @@ -1,14 +1,20 @@ -package org.mercury_im.messenger.core.entity; +package org.mercury_im.messenger.core.entity.message; + +import org.mercury_im.messenger.core.entity.Address; import java.util.Date; +import java.util.List; -public class AbstractMessage implements Message { +public abstract class AbstractMessage< + AD extends Address, + MM extends MessageMetadata> + implements Message { protected long id; protected AD sender; protected AD recipient; protected Date timestamp; - protected String body; + protected List payloads; protected MessageDeliveryState deliveryState; protected MM metadata; @@ -53,13 +59,13 @@ public class AbstractMessage imp } @Override - public String getBody() { - return body; + public List getMessagePayloads() { + return payloads; } @Override - public void setBody(String body) { - this.body = body; + public void setMessagePayloads(List list) { + this.payloads = list; } @Override diff --git a/entity/src/main/java/org/mercury_im/messenger/core/entity/Message.java b/entity/src/main/java/org/mercury_im/messenger/core/entity/message/Message.java similarity index 67% rename from entity/src/main/java/org/mercury_im/messenger/core/entity/Message.java rename to entity/src/main/java/org/mercury_im/messenger/core/entity/message/Message.java index 0184db8..8db0112 100644 --- a/entity/src/main/java/org/mercury_im/messenger/core/entity/Message.java +++ b/entity/src/main/java/org/mercury_im/messenger/core/entity/message/Message.java @@ -1,6 +1,9 @@ -package org.mercury_im.messenger.core.entity; +package org.mercury_im.messenger.core.entity.message; + +import org.mercury_im.messenger.core.entity.Address; import java.util.Date; +import java.util.List; public interface Message { @@ -20,9 +23,9 @@ public interface Message { void setTimestamp(Date timestamp); - String getBody(); + List getMessagePayloads(); - void setBody(String body); + void setMessagePayloads(List messagePayloads); MessageDeliveryState getDeliveryState(); diff --git a/entity/src/main/java/org/mercury_im/messenger/core/entity/message/MessageContent.java b/entity/src/main/java/org/mercury_im/messenger/core/entity/message/MessageContent.java new file mode 100644 index 0000000..ad462c5 --- /dev/null +++ b/entity/src/main/java/org/mercury_im/messenger/core/entity/message/MessageContent.java @@ -0,0 +1,12 @@ +package org.mercury_im.messenger.core.entity.message; + +public interface MessageContent { + + interface Body extends MessageContent { + + String getBody(); + + void setBody(String body); + + } +} diff --git a/entity/src/main/java/org/mercury_im/messenger/core/entity/MessageDeliveryState.java b/entity/src/main/java/org/mercury_im/messenger/core/entity/message/MessageDeliveryState.java similarity index 72% rename from entity/src/main/java/org/mercury_im/messenger/core/entity/MessageDeliveryState.java rename to entity/src/main/java/org/mercury_im/messenger/core/entity/message/MessageDeliveryState.java index 4b9a30e..dfeb33d 100644 --- a/entity/src/main/java/org/mercury_im/messenger/core/entity/MessageDeliveryState.java +++ b/entity/src/main/java/org/mercury_im/messenger/core/entity/message/MessageDeliveryState.java @@ -1,4 +1,4 @@ -package org.mercury_im.messenger.core.entity; +package org.mercury_im.messenger.core.entity.message; public enum MessageDeliveryState { pending_delivery, diff --git a/entity/src/main/java/org/mercury_im/messenger/core/entity/MessageMetadata.java b/entity/src/main/java/org/mercury_im/messenger/core/entity/message/MessageMetadata.java similarity index 80% rename from entity/src/main/java/org/mercury_im/messenger/core/entity/MessageMetadata.java rename to entity/src/main/java/org/mercury_im/messenger/core/entity/message/MessageMetadata.java index 877b642..3f8b225 100644 --- a/entity/src/main/java/org/mercury_im/messenger/core/entity/MessageMetadata.java +++ b/entity/src/main/java/org/mercury_im/messenger/core/entity/message/MessageMetadata.java @@ -1,4 +1,4 @@ -package org.mercury_im.messenger.core.entity; +package org.mercury_im.messenger.core.entity.message; /** * Interface to allow additional, protocol specific metadata to be attached to the message. diff --git a/entity/src/main/java/org/mercury_im/messenger/core/entity/message/MessagePayload.java b/entity/src/main/java/org/mercury_im/messenger/core/entity/message/MessagePayload.java new file mode 100644 index 0000000..125086b --- /dev/null +++ b/entity/src/main/java/org/mercury_im/messenger/core/entity/message/MessagePayload.java @@ -0,0 +1,11 @@ +package org.mercury_im.messenger.core.entity.message; + +import java.util.List; + +public interface MessagePayload { + + List getMessageContents(); + + void setMessageContents(List messageContents); + +} diff --git a/entity/src/main/java/org/mercury_im/messenger/core/entity/message/TextMessageContent.java b/entity/src/main/java/org/mercury_im/messenger/core/entity/message/TextMessageContent.java new file mode 100644 index 0000000..f013524 --- /dev/null +++ b/entity/src/main/java/org/mercury_im/messenger/core/entity/message/TextMessageContent.java @@ -0,0 +1,16 @@ +package org.mercury_im.messenger.core.entity.message; + +public class TextMessageContent implements MessageContent.Body { + + private String body; + + @Override + public String getBody() { + return body; + } + + @Override + public void setBody(String body) { + this.body = body; + } +} diff --git a/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/XmppDirectChat.java b/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/XmppDirectChat.java deleted file mode 100644 index 08f905c..0000000 --- a/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/XmppDirectChat.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.mercury_im.messenger.xmpp.entity; - -import org.mercury_im.messenger.core.entity.AbstractDirectChat; - -public class XmppDirectChat extends AbstractDirectChat { - -} diff --git a/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/XmppGroupChat.java b/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/XmppGroupChat.java deleted file mode 100644 index 74a8690..0000000 --- a/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/XmppGroupChat.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.mercury_im.messenger.xmpp.entity; - -import org.mercury_im.messenger.core.entity.AbstractGroupChat; - -public class XmppGroupChat extends AbstractGroupChat { - -} diff --git a/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/XmppInterlocutor.java b/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/XmppInterlocutor.java deleted file mode 100644 index aae1fb5..0000000 --- a/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/XmppInterlocutor.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.mercury_im.messenger.xmpp.entity; - -import org.mercury_im.messenger.core.entity.AbstractInterlocutor; - -public class XmppInterlocutor extends AbstractInterlocutor { - -} diff --git a/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/XmppMessage.java b/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/XmppMessage.java deleted file mode 100644 index 5da2232..0000000 --- a/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/XmppMessage.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.mercury_im.messenger.xmpp.entity; - -import org.mercury_im.messenger.core.entity.AbstractMessage; - -public class XmppMessage extends AbstractMessage { - -} diff --git a/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/XmppMessageMetadata.java b/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/XmppMessageMetadata.java deleted file mode 100644 index 6362abe..0000000 --- a/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/XmppMessageMetadata.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.mercury_im.messenger.xmpp.entity; - -import org.mercury_im.messenger.core.entity.MessageMetadata; - -public class XmppMessageMetadata implements MessageMetadata { - -} diff --git a/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/chat/XmppDirectChat.java b/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/chat/XmppDirectChat.java new file mode 100644 index 0000000..07d12aa --- /dev/null +++ b/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/chat/XmppDirectChat.java @@ -0,0 +1,10 @@ +package org.mercury_im.messenger.xmpp.entity.chat; + +import org.mercury_im.messenger.core.entity.chat.AbstractDirectChat; +import org.mercury_im.messenger.xmpp.entity.XmppAccount; +import org.mercury_im.messenger.xmpp.entity.XmppAddress; +import org.mercury_im.messenger.xmpp.entity.contact.XmppDirectInterlocutor; + +public class XmppDirectChat extends AbstractDirectChat { + +} diff --git a/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/chat/XmppMuc.java b/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/chat/XmppMuc.java new file mode 100644 index 0000000..a726c01 --- /dev/null +++ b/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/chat/XmppMuc.java @@ -0,0 +1,9 @@ +package org.mercury_im.messenger.xmpp.entity.chat; + +import org.mercury_im.messenger.core.entity.chat.AbstractGroupChat; +import org.mercury_im.messenger.xmpp.entity.XmppAccount; +import org.mercury_im.messenger.xmpp.entity.XmppAddress; + +public class XmppMuc extends AbstractGroupChat { + +} diff --git a/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/contact/XmppContact.java b/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/contact/XmppContact.java new file mode 100644 index 0000000..35db795 --- /dev/null +++ b/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/contact/XmppContact.java @@ -0,0 +1,12 @@ +package org.mercury_im.messenger.xmpp.entity.contact; + +import org.mercury_im.messenger.core.entity.contact.AbstractInterlocutor; +import org.mercury_im.messenger.xmpp.entity.XmppAccount; +import org.mercury_im.messenger.xmpp.entity.XmppAddress; + +public class XmppContact extends AbstractInterlocutor< + XmppAccount, + XmppAddress.XmppUserAddress, + XmppAddress.XmppUserAddress> { + +} diff --git a/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/contact/XmppDirectInterlocutor.java b/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/contact/XmppDirectInterlocutor.java new file mode 100644 index 0000000..b38df70 --- /dev/null +++ b/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/contact/XmppDirectInterlocutor.java @@ -0,0 +1,12 @@ +package org.mercury_im.messenger.xmpp.entity.contact; + +import org.mercury_im.messenger.core.entity.contact.AbstractInterlocutor; +import org.mercury_im.messenger.xmpp.entity.XmppAccount; +import org.mercury_im.messenger.xmpp.entity.XmppAddress; + +public class XmppDirectInterlocutor extends AbstractInterlocutor< + XmppAccount, + XmppAddress.XmppUserAddress, + XmppAddress.XmppUserAddress> { + +} diff --git a/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/contact/XmppMucParticipant.java b/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/contact/XmppMucParticipant.java new file mode 100644 index 0000000..b85f9ae --- /dev/null +++ b/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/contact/XmppMucParticipant.java @@ -0,0 +1,12 @@ +package org.mercury_im.messenger.xmpp.entity.contact; + +import org.mercury_im.messenger.core.entity.contact.AbstractInterlocutor; +import org.mercury_im.messenger.xmpp.entity.XmppAccount; +import org.mercury_im.messenger.xmpp.entity.XmppAddress; + +public class XmppMucParticipant extends AbstractInterlocutor< + XmppAccount, + XmppAddress.XmppRoomParticipantAddress, + XmppAddress.XmppUserAddress> { + +} diff --git a/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/message/XmppMessage.java b/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/message/XmppMessage.java new file mode 100644 index 0000000..df185eb --- /dev/null +++ b/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/message/XmppMessage.java @@ -0,0 +1,32 @@ +package org.mercury_im.messenger.xmpp.entity.message; + +import org.mercury_im.messenger.core.entity.message.AbstractMessage; +import org.mercury_im.messenger.xmpp.entity.XmppAddress; + +public final class XmppMessage extends AbstractMessage< + XmppAddress, + XmppMessageMetadata> { + + private XmppMessage() { + + } + + public class DirectMessage extends AbstractMessage< + XmppAddress.XmppUserAddress, + XmppMessageMetadata> { + + } + + public class MucMessage extends AbstractMessage< + XmppAddress.XmppRoomParticipantAddress, + XmppMessageMetadata> { + + } + + // Maybe? + public class MixMessage extends AbstractMessage< + XmppAddress.XmppRoomParticipantAddress, + XmppMessageMetadata> { + + } +} diff --git a/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/message/XmppMessageMetadata.java b/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/message/XmppMessageMetadata.java new file mode 100644 index 0000000..b607e28 --- /dev/null +++ b/entity_xmpp/src/main/java/org/mercury_im/messenger/xmpp/entity/message/XmppMessageMetadata.java @@ -0,0 +1,7 @@ +package org.mercury_im.messenger.xmpp.entity.message; + +import org.mercury_im.messenger.core.entity.message.MessageMetadata; + +public class XmppMessageMetadata implements MessageMetadata { + +} diff --git a/repository/src/main/java/org/mercury_im/messenger/core/repository/ContactRepository.java b/repository/src/main/java/org/mercury_im/messenger/core/repository/ContactRepository.java index ce8f651..73c4d98 100644 --- a/repository/src/main/java/org/mercury_im/messenger/core/repository/ContactRepository.java +++ b/repository/src/main/java/org/mercury_im/messenger/core/repository/ContactRepository.java @@ -2,7 +2,7 @@ package org.mercury_im.messenger.core.repository; import org.mercury_im.messenger.core.entity.Account; import org.mercury_im.messenger.core.entity.Address; -import org.mercury_im.messenger.core.entity.Contact; +import org.mercury_im.messenger.core.entity.contact.Contact; import org.mercury_im.messenger.core.util.Optional; import java.util.List; diff --git a/repository/src/main/java/org/mercury_im/messenger/core/repository/DirectChatRepository.java b/repository/src/main/java/org/mercury_im/messenger/core/repository/DirectChatRepository.java index 0aeefa3..2266b56 100644 --- a/repository/src/main/java/org/mercury_im/messenger/core/repository/DirectChatRepository.java +++ b/repository/src/main/java/org/mercury_im/messenger/core/repository/DirectChatRepository.java @@ -2,10 +2,11 @@ package org.mercury_im.messenger.core.repository; import org.mercury_im.messenger.core.entity.Account; import org.mercury_im.messenger.core.entity.Address; -import org.mercury_im.messenger.core.entity.DirectChat; -import org.mercury_im.messenger.core.entity.Interlocutor; -import org.mercury_im.messenger.core.entity.Message; -import org.mercury_im.messenger.core.entity.MessageMetadata; +import org.mercury_im.messenger.core.entity.chat.DirectChat; +import org.mercury_im.messenger.core.entity.contact.Interlocutor; +import org.mercury_im.messenger.core.entity.message.Message; +import org.mercury_im.messenger.core.entity.message.MessageMetadata; +import org.mercury_im.messenger.core.entity.message.MessagePayload; import org.mercury_im.messenger.core.util.Optional; import java.util.List; @@ -20,8 +21,9 @@ public interface DirectChatRepository< IL extends Interlocutor, AC extends Account, AD extends Address.UserAddress, - M extends Message, - MM extends MessageMetadata> { + M extends Message, + MM extends MessageMetadata, + MP extends MessagePayload> { Single insertDirectChat(DC chat); diff --git a/repository/src/main/java/org/mercury_im/messenger/core/repository/GroupChatRepository.java b/repository/src/main/java/org/mercury_im/messenger/core/repository/GroupChatRepository.java index 5a512dc..460a00c 100644 --- a/repository/src/main/java/org/mercury_im/messenger/core/repository/GroupChatRepository.java +++ b/repository/src/main/java/org/mercury_im/messenger/core/repository/GroupChatRepository.java @@ -2,9 +2,10 @@ package org.mercury_im.messenger.core.repository; import org.mercury_im.messenger.core.entity.Account; import org.mercury_im.messenger.core.entity.Address; -import org.mercury_im.messenger.core.entity.GroupChat; -import org.mercury_im.messenger.core.entity.Message; -import org.mercury_im.messenger.core.entity.MessageMetadata; +import org.mercury_im.messenger.core.entity.chat.GroupChat; +import org.mercury_im.messenger.core.entity.message.Message; +import org.mercury_im.messenger.core.entity.message.MessageMetadata; +import org.mercury_im.messenger.core.entity.message.MessagePayload; import org.mercury_im.messenger.core.util.Optional; import java.util.List; @@ -19,8 +20,9 @@ public interface GroupChatRepository< AC extends Account, AD extends Address.UserAddress, RA extends Address.RoomAddress, - M extends Message, - MM extends MessageMetadata> { + M extends Message, + MM extends MessageMetadata, + MP extends MessagePayload> { Single insertGroupChat(GC chat); diff --git a/settings.gradle b/settings.gradle index ac12fbe..55efc78 100644 --- a/settings.gradle +++ b/settings.gradle @@ -2,9 +2,11 @@ include ':entity', ':entity_xmpp', ':repository', ':repository_xmpp', + ':core', + ':transport', ':transport_xmpp', ':app', ':thread_utils', - ':core' + ':core-old' includeBuild 'libs/Smack' diff --git a/transport/.gitignore b/transport/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/transport/.gitignore @@ -0,0 +1 @@ +/build diff --git a/transport/build.gradle b/transport/build.gradle new file mode 100644 index 0000000..a723522 --- /dev/null +++ b/transport/build.gradle @@ -0,0 +1,21 @@ +apply plugin: 'java-library' + +dependencies { + + implementation project(':entity') + implementation project(':repository') + implementation project(":thread_utils") + + // RxJava2 + implementation "io.reactivex.rxjava2:rxjava:$rxJava2Version" + + // Dagger 2 for dependency injection + implementation "com.google.dagger:dagger:$daggerVersion" + annotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion" + + // JUnit for testing + testImplementation "junit:junit:$junitVersion" +} + +sourceCompatibility = "8" +targetCompatibility = "8" diff --git a/transport/src/main/java/org/mercury_im/core/Messenger.java b/transport/src/main/java/org/mercury_im/core/Messenger.java new file mode 100644 index 0000000..6ad89fd --- /dev/null +++ b/transport/src/main/java/org/mercury_im/core/Messenger.java @@ -0,0 +1,4 @@ +package org.mercury_im.core; + +public class Messenger { +} diff --git a/transport/src/main/java/org/mercury_im/core/connection/ConnectionMethod.java b/transport/src/main/java/org/mercury_im/core/connection/ConnectionMethod.java new file mode 100644 index 0000000..96dbdcf --- /dev/null +++ b/transport/src/main/java/org/mercury_im/core/connection/ConnectionMethod.java @@ -0,0 +1,14 @@ +package org.mercury_im.core.connection; + +import org.mercury_im.messenger.core.entity.Account; +import org.mercury_im.messenger.core.entity.Address; + +public interface ConnectionMethod< + AC extends Account, + AD extends Address.UserAddress> { + + AC getAccount(); + + void setAccount(AC account); + +} diff --git a/transport/src/main/java/org/mercury_im/core/connection/exception/ConnectionFailedException.java b/transport/src/main/java/org/mercury_im/core/connection/exception/ConnectionFailedException.java new file mode 100644 index 0000000..1c64385 --- /dev/null +++ b/transport/src/main/java/org/mercury_im/core/connection/exception/ConnectionFailedException.java @@ -0,0 +1,6 @@ +package org.mercury_im.core.connection.exception; + +public class ConnectionFailedException extends Exception { + + private static final long serialVersionUID = 1L; +}