package com.flexpoker.core.chat; import java.security.Principal; import java.util.UUID; import javax.inject.Inject; import org.springframework.stereotype.Component; import com.flexpoker.core.api.chat.SendChatMessageCommand; import com.flexpoker.core.api.chat.SendGameChatMessageCommand; import com.flexpoker.core.api.chat.SendGlobalChatMessageCommand; import com.flexpoker.core.api.chat.SendPersonalChatMessageCommand; import com.flexpoker.core.api.chat.SendTableChatMessageCommand; import com.flexpoker.model.chat.incoming.ChatMessage; import com.flexpoker.model.chat.outgoing.GameChatMessage; import com.flexpoker.model.chat.outgoing.GlobalChatMessage; import com.flexpoker.model.chat.outgoing.PersonalChatMessage; import com.flexpoker.model.chat.outgoing.TableChatMessage; @Component public class SendChatMessageRouterCommand implements SendChatMessageCommand { private final SendGlobalChatMessageCommand sendGlobalChatMessageCommand; private final SendGameChatMessageCommand sendGameChatMessageCommand; private final SendTableChatMessageCommand sendTableChatMessageCommand; private final SendPersonalChatMessageCommand sendPersonalChatMessageCommand; @Inject public SendChatMessageRouterCommand( SendGlobalChatMessageCommand sendGlobalChatMessageCommand, SendGameChatMessageCommand sendGameChatMessageCommand, SendTableChatMessageCommand sendTableChatMessageCommand, SendPersonalChatMessageCommand sendPersonalChatMessageCommand) { this.sendGlobalChatMessageCommand = sendGlobalChatMessageCommand; this.sendGameChatMessageCommand = sendGameChatMessageCommand; this.sendTableChatMessageCommand = sendTableChatMessageCommand; this.sendPersonalChatMessageCommand = sendPersonalChatMessageCommand; } @Override public void execute(ChatMessage chatMessage, Principal principal) { if (chatMessage.getReceiverUsernames() == null && chatMessage.getGameId() == null && chatMessage.getTableId() == null && chatMessage.getMessage() != null) { sendGlobalChatMessageCommand.execute(new GlobalChatMessage(chatMessage.getMessage(), principal.getName(), false)); } else if (chatMessage.getReceiverUsernames() == null && chatMessage.getGameId() != null && chatMessage.getTableId() == null && chatMessage.getMessage() != null) { GameChatMessage gameChatMessage = new GameChatMessage(chatMessage.getMessage(), principal.getName(), false, UUID.fromString(chatMessage.getGameId())); sendGameChatMessageCommand.execute(gameChatMessage); } else if (chatMessage.getReceiverUsernames() == null && chatMessage.getGameId() != null && chatMessage.getTableId() != null && chatMessage.getMessage() != null) { sendTableChatMessageCommand.execute(new TableChatMessage( chatMessage.getMessage(), principal.getName(), false, UUID.fromString(chatMessage.getGameId()), UUID.fromString(chatMessage.getTableId()))); } else if (chatMessage.getReceiverUsernames() != null && chatMessage.getMessage() != null) { sendPersonalChatMessageCommand.execute(new PersonalChatMessage(chatMessage.getMessage(), principal.getName(), false, chatMessage.getReceiverUsernames())); } else { throw new IllegalArgumentException("Message does not fit one of the prescribed types. chatMessage: " + chatMessage); } } }