Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 0 additions & 6 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,6 @@ dependencies {

testImplementation platform('org.junit:junit-bom:6.0.1')
testImplementation 'org.junit.jupiter:junit-jupiter'

compileOnly 'org.projectlombok:lombok:1.18.42'
annotationProcessor 'org.projectlombok:lombok:1.18.42'

testCompileOnly 'org.projectlombok:lombok:1.18.42'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.42'
}

test {
Expand Down
18 changes: 12 additions & 6 deletions src/main/java/org/synyx/matrix/bot/MatrixState.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package org.synyx.matrix.bot;

import lombok.Getter;
import org.synyx.matrix.bot.domain.MatrixRoom;
import org.synyx.matrix.bot.domain.MatrixRoomAlias;
import org.synyx.matrix.bot.domain.MatrixUserId;
Expand All @@ -11,13 +10,8 @@

public class MatrixState {

@Getter
private final MatrixUserId ownUserId;

@Getter
private final List<MatrixRoom> invitedRooms;

@Getter
private final List<MatrixRoom> joinedRooms;

public MatrixState(MatrixUserId ownUserId) {
Expand All @@ -27,6 +21,18 @@ public MatrixState(MatrixUserId ownUserId) {
this.joinedRooms = new ArrayList<>();
}

public MatrixUserId getOwnUserId() {
return ownUserId;
}

public List<MatrixRoom> getInvitedRooms() {
return invitedRooms;
}

public List<MatrixRoom> getJoinedRooms() {
return joinedRooms;
}

public Optional<MatrixRoom> findJoinedRoomByCanonicalAlias(MatrixRoomAlias alias) {

return joinedRooms.stream()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
package org.synyx.matrix.bot.domain;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;

import java.util.Optional;

@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class MatrixEmoteMessage implements MatrixMessage {

private final MatrixEventId eventId;
private final String body;
private final MatrixUserId sender;

private MatrixEmoteMessage(MatrixEventId eventId, String body, MatrixUserId sender) {
this.eventId = eventId;
this.body = body;
this.sender = sender;
}

public static Optional<MatrixEmoteMessage> from(
MatrixEventId eventId,
String body,
Expand Down
35 changes: 27 additions & 8 deletions src/main/java/org/synyx/matrix/bot/domain/MatrixEventId.java
Original file line number Diff line number Diff line change
@@ -1,25 +1,23 @@
package org.synyx.matrix.bot.domain;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;

import java.util.Objects;
import java.util.Optional;
import java.util.regex.Pattern;

@EqualsAndHashCode
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class MatrixEventId {

/*
https://spec.matrix.org/v1.14/appendices/#event-ids
*/
private static final Pattern EVENT_ID_PATTERN = Pattern.compile("^\\$(.+)$");

@Getter
private final String opaqueId;

private MatrixEventId(String opaqueId) {

this.opaqueId = opaqueId;
}

public static Optional<MatrixEventId> from(String value) {

final var matcher = EVENT_ID_PATTERN.matcher(value);
Expand All @@ -32,11 +30,32 @@ public static Optional<MatrixEventId> from(String value) {
return Optional.of(new MatrixEventId(opaqueId));
}

public String getOpaqueId() {

return opaqueId;
}

public String getFormatted() {

return "$%s".formatted(opaqueId);
}

@Override
public boolean equals(Object o) {

if (o == null || getClass() != o.getClass()) {
return false;
}
MatrixEventId that = (MatrixEventId) o;
return Objects.equals(opaqueId, that.opaqueId);
}

@Override
public int hashCode() {

return Objects.hashCode(opaqueId);
}

@Override
public String toString() {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
package org.synyx.matrix.bot.domain;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;

import java.util.Optional;

@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class MatrixNoticeMessage implements MatrixMessage {

private final MatrixEventId eventId;
private final String body;
private final MatrixUserId sender;

private MatrixNoticeMessage(MatrixEventId eventId, String body, MatrixUserId sender) {

this.eventId = eventId;
this.body = body;
this.sender = sender;
}

public static Optional<MatrixNoticeMessage> from(
MatrixEventId eventId,
String body,
Expand Down
27 changes: 20 additions & 7 deletions src/main/java/org/synyx/matrix/bot/domain/MatrixRoom.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
package org.synyx.matrix.bot.domain;

import lombok.Getter;
import lombok.Setter;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
Expand All @@ -12,24 +9,20 @@ public class MatrixRoom {
/**
* The id of the room that uniquely identifies it.
*/
@Getter
private final MatrixRoomId id;

/**
* The alias of the room that is considered the canonical one.
* This could be for display purposes or as suggestion to users which alias to use to advertise and access the room.
*/
@Setter
private MatrixRoomAlias canonicalAlias;

/**
* A human-readable name for the room, designated to be displayed to the end-user.
* The room name is not unique, as multiple rooms can have the same room name set.
*/
@Setter
private String name;

@Getter
private final List<MatrixUser> roomUsers;

private MatrixRoom(MatrixRoomId id) {
Expand All @@ -38,6 +31,26 @@ private MatrixRoom(MatrixRoomId id) {
this.roomUsers = new ArrayList<>();
}

public MatrixRoomId getId() {

return id;
}

public void setCanonicalAlias(MatrixRoomAlias canonicalAlias) {

this.canonicalAlias = canonicalAlias;
}

public void setName(String name) {

this.name = name;
}

public List<MatrixUser> getRoomUsers() {

return roomUsers;
}

public static Optional<MatrixRoom> from(MatrixRoomId id) {

if (id == null) {
Expand Down
42 changes: 33 additions & 9 deletions src/main/java/org/synyx/matrix/bot/domain/MatrixRoomAlias.java
Original file line number Diff line number Diff line change
@@ -1,27 +1,25 @@
package org.synyx.matrix.bot.domain;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;

import java.util.Objects;
import java.util.Optional;
import java.util.regex.Pattern;

@EqualsAndHashCode
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class MatrixRoomAlias {

/*
https://spec.matrix.org/v1.14/appendices/#room-aliases
*/
private static final Pattern ROOM_ALIAS_PATTERN = Pattern.compile("^#([^:\\x00]+):(.+)$");

@Getter
private final String localPart;
@Getter
private final String domain;

private MatrixRoomAlias(String localPart, String domain) {

this.localPart = localPart;
this.domain = domain;
}

public static Optional<MatrixRoomAlias> from(String value) {

final var matcher = ROOM_ALIAS_PATTERN.matcher(value);
Expand All @@ -40,11 +38,37 @@ public static Optional<MatrixRoomAlias> build(String localPart, String domain) {
return from("#%s:%s".formatted(localPart, domain));
}

public String getLocalPart() {

return localPart;
}

public String getDomain() {

return domain;
}

public String getFormatted() {

return "#%s:%s".formatted(localPart, domain);
}

@Override
public boolean equals(Object o) {

if (o == null || getClass() != o.getClass()) {
return false;
}
MatrixRoomAlias that = (MatrixRoomAlias) o;
return Objects.equals(localPart, that.localPart) && Objects.equals(domain, that.domain);
}

@Override
public int hashCode() {

return Objects.hash(localPart, domain);
}

@Override
public String toString() {

Expand Down
42 changes: 33 additions & 9 deletions src/main/java/org/synyx/matrix/bot/domain/MatrixRoomId.java
Original file line number Diff line number Diff line change
@@ -1,27 +1,25 @@
package org.synyx.matrix.bot.domain;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;

import java.util.Objects;
import java.util.Optional;
import java.util.regex.Pattern;

@EqualsAndHashCode
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class MatrixRoomId {

/*
https://spec.matrix.org/v1.14/appendices/#room-ids
*/
private static final Pattern ROOM_ID_PATTERN = Pattern.compile("^!([^:\\x00]+):(.+)$");

@Getter
private final String opaqueId;
@Getter
private final String domain;

private MatrixRoomId(String opaqueId, String domain) {

this.opaqueId = opaqueId;
this.domain = domain;
}

public static Optional<MatrixRoomId> from(String value) {

final var matcher = ROOM_ID_PATTERN.matcher(value);
Expand All @@ -35,11 +33,37 @@ public static Optional<MatrixRoomId> from(String value) {
return Optional.of(new MatrixRoomId(opaqueId, domain));
}

public String getOpaqueId() {

return opaqueId;
}

public String getDomain() {

return domain;
}

public String getFormatted() {

return "!%s:%s".formatted(opaqueId, domain);
}

@Override
public boolean equals(Object o) {

if (o == null || getClass() != o.getClass()) {
return false;
}
MatrixRoomId that = (MatrixRoomId) o;
return Objects.equals(opaqueId, that.opaqueId) && Objects.equals(domain, that.domain);
}

@Override
public int hashCode() {

return Objects.hash(opaqueId, domain);
}

@Override
public String toString() {

Expand Down
Loading