package me.moodcat.backend.rooms;
import java.util.Collection;
import java.util.concurrent.atomic.AtomicInteger;
import me.moodcat.database.entities.ChatMessage;
import me.moodcat.database.entities.Room;
/**
* The ChatMessageIdGenerator generates ids for chat messages in a room.
*/
public class ChatMessageIdGenerator {
private static final int START_CHAT_MESSAGE_INDEX = 0;
private final AtomicInteger messageIndex;
/**
* Create a new {@code ChatMessageIdGenerator}.
*
* @param room
* Room to generate.
*/
public ChatMessageIdGenerator(final Room room) {
this.messageIndex = getAtomicInteger(room.getChatMessages());
}
private static AtomicInteger getAtomicInteger(final Collection<ChatMessage> messages) {
assert messages != null : "Messages should not be null";
return new AtomicInteger(messages.stream()
.mapToInt(ChatMessage::getId)
.max().orElse(START_CHAT_MESSAGE_INDEX));
}
/**
* Generate a new id.
*
* @return the newly generated id.
*/
public int generateId() {
return this.messageIndex.incrementAndGet();
}
}