--- /dev/null
+package de.juplo.kafka.chat.backend.domain;
+
+import lombok.Getter;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.stream.Collectors;
+
+
+public class ShardNotOwnedException extends IllegalStateException
+{
+ @Getter
+ private final ChatHomeService chatHomeService;
+ @Getter
+ private final ChatRoomInfo chatRoomInfo;
+ @Getter
+ private final int shard;
+ @Getter
+ private final int[] ownedShards;
+
+
+ public ShardNotOwnedException(
+ ChatHomeService chatHomeService,
+ ChatRoomInfo chatRoomInfo,
+ int shard,
+ Collection<Integer> ownedShards)
+ {
+ this(
+ chatHomeService,
+ chatRoomInfo,
+ shard,
+ ShardNotOwnedException.toArray(ownedShards));
+ }
+
+ public ShardNotOwnedException(
+ ChatHomeService chatHomeService,
+ ChatRoomInfo chatRoomInfo,
+ int shard,
+ int[] ownedShards)
+ {
+ super(
+ chatHomeService +
+ " does not own the shard " +
+ shard +
+ " for ChatRoom " +
+ chatRoomInfo +
+ " owned shards: " +
+ Arrays
+ .stream(ownedShards)
+ .mapToObj(ownedShard -> Integer.toString(ownedShard))
+ .collect(Collectors.joining(", ")));
+ this.chatHomeService = chatHomeService;
+ this.chatRoomInfo = chatRoomInfo;
+ this.shard = shard;
+ this.ownedShards = ownedShards;
+ }
+
+
+ private static int[] toArray(Collection<Integer> collection)
+ {
+ int[] array = new int[collection.size()];
+ Iterator<Integer> iterator = collection.iterator();
+ for (int i = 0; iterator.hasNext(); i++)
+ array[i] = iterator.next();
+ return array;
+ }
+}
import lombok.Getter;
+import java.util.Arrays;
+import java.util.Optional;
import java.util.UUID;
+import java.util.stream.Collectors;
-public class UnknownChatroomException extends RuntimeException
+public class UnknownChatroomException extends IllegalStateException
{
@Getter
private final UUID chatroomId;
+ @Getter
+ private final Optional<Integer> shard;
+ @Getter
+ private final Optional<int[]> ownedShards;
public UnknownChatroomException(UUID chatroomId)
{
super("Chatroom does not exist: " + chatroomId);
this.chatroomId = chatroomId;
+ this.shard = Optional.empty();
+ this.ownedShards = Optional.empty();
+ }
+
+ public UnknownChatroomException(UUID chatroomId, int shard, int[] ownedShards)
+ {
+ super(
+ "Chatroom does not exist (here): " +
+ chatroomId +
+ " shard=" +
+ shard +
+ ", owned=" +
+ Arrays
+ .stream(ownedShards)
+ .mapToObj(ownedShard -> Integer.toString(ownedShard))
+ .collect(Collectors.joining(",")));
+ this.chatroomId = chatroomId;
+ this.shard = Optional.of(shard);
+ this.ownedShards = Optional.of(ownedShards);
}
}