From 811537dec89e5125db705ac73a563c450dd42940 Mon Sep 17 00:00:00 2001 From: Arnaud Vergnet Date: Wed, 2 Dec 2020 10:54:43 +0100 Subject: [PATCH] feat: use Message class in chat and improve modularity --- .../fr/insa/clavardator/chat/Message.java | 5 ++ .../clavardator/ui/chat/ChatController.java | 54 ++++++++++--------- .../ui/chat/ChatFooterController.java | 35 ++++++++++++ .../ui/chat/ChatHeaderController.java | 30 +++++++++++ .../ui/chat/MessageListItemCell.java | 12 +++-- .../fr/insa/clavardator/ui/chat/chat.fxml | 49 ++--------------- .../insa/clavardator/ui/chat/chatFooter.fxml | 26 +++++++++ .../insa/clavardator/ui/chat/chatHeader.fxml | 38 +++++++++++++ 8 files changed, 175 insertions(+), 74 deletions(-) create mode 100644 src/main/java/fr/insa/clavardator/ui/chat/ChatFooterController.java create mode 100644 src/main/java/fr/insa/clavardator/ui/chat/ChatHeaderController.java create mode 100644 src/main/resources/fr/insa/clavardator/ui/chat/chatFooter.fxml create mode 100644 src/main/resources/fr/insa/clavardator/ui/chat/chatHeader.fxml diff --git a/src/main/java/fr/insa/clavardator/chat/Message.java b/src/main/java/fr/insa/clavardator/chat/Message.java index 12d148a..54ecaa9 100644 --- a/src/main/java/fr/insa/clavardator/chat/Message.java +++ b/src/main/java/fr/insa/clavardator/chat/Message.java @@ -1,5 +1,6 @@ package fr.insa.clavardator.chat; +import fr.insa.clavardator.users.CurrentUser; import fr.insa.clavardator.users.User; import java.io.Serializable; @@ -22,4 +23,8 @@ public class Message implements Serializable { public String getText() { return text; } + + public User getSender() { + return sender; + } } diff --git a/src/main/java/fr/insa/clavardator/ui/chat/ChatController.java b/src/main/java/fr/insa/clavardator/ui/chat/ChatController.java index a083912..c9479da 100644 --- a/src/main/java/fr/insa/clavardator/ui/chat/ChatController.java +++ b/src/main/java/fr/insa/clavardator/ui/chat/ChatController.java @@ -1,7 +1,10 @@ package fr.insa.clavardator.ui.chat; +import fr.insa.clavardator.chat.Message; import fr.insa.clavardator.ui.ButtonPressEvent; import fr.insa.clavardator.ui.NoSelectionModel; +import fr.insa.clavardator.users.CurrentUser; +import fr.insa.clavardator.users.PeerUser; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; @@ -9,54 +12,57 @@ import javafx.fxml.Initializable; import javafx.scene.control.ListView; import java.net.URL; -import java.util.ArrayList; -import java.util.List; import java.util.ResourceBundle; public class ChatController implements Initializable { @FXML - private ListView messageList; + private ListView messageList; + @FXML + private ChatFooterController chatFooterController; + @FXML + private ChatHeaderController chatHeaderController; - private List attachmentListeners; - private List sendListeners; - private List editListeners; + private CurrentUser currentUser; + private PeerUser remoteUser; public void addAttachmentListener(ButtonPressEvent listener) { - attachmentListeners.add(listener); + chatFooterController.addAttachmentListener(listener); } public void addSendListener(ButtonPressEvent listener) { - sendListeners.add(listener); + chatFooterController.addSendListener(listener); } public void addEditListener(ButtonPressEvent listener) { - editListeners.add(listener); + chatHeaderController.addEditListener(listener); } - public void onAttachmentPress() { - attachmentListeners.forEach(ButtonPressEvent::onPress); + + public void setCurrentUser(CurrentUser currentUser) { + this.currentUser = currentUser; } - public void onSendPress() { - sendListeners.forEach(ButtonPressEvent::onPress); + public void setRemoteUser(PeerUser remoteUser) { + this.remoteUser = remoteUser; + loadMessageList(); } - public void onEditPress() { - editListeners.forEach(ButtonPressEvent::onPress); + private void loadMessageList() { + ObservableList messages = FXCollections.observableArrayList( + new Message(remoteUser, currentUser, "Messsssage 1"), + new Message(remoteUser, currentUser, "Messsssage 2"), + new Message(currentUser, remoteUser, "Messsssage 3"), + new Message(remoteUser, currentUser, "Messsssage 4") + ); + messageList.setItems(messages); + messageList.scrollTo(messageList.getItems().size() - 1); } @Override public void initialize(URL url, ResourceBundle rb) { - attachmentListeners = new ArrayList<>(); - sendListeners = new ArrayList<>(); - editListeners = new ArrayList<>(); - - ObservableList messages = FXCollections.observableArrayList( - "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "test", "no", "no", "test", "no", "no", "test", "no", "test"); - messageList.setItems(messages); - messageList.scrollTo(messageList.getItems().size() - 1); - messageList.setSelectionModel(new NoSelectionModel()); + messageList.setItems(null); + messageList.setSelectionModel(new NoSelectionModel()); messageList.setCellFactory(listView -> new MessageListItemCell()); } diff --git a/src/main/java/fr/insa/clavardator/ui/chat/ChatFooterController.java b/src/main/java/fr/insa/clavardator/ui/chat/ChatFooterController.java new file mode 100644 index 0000000..0e3dc65 --- /dev/null +++ b/src/main/java/fr/insa/clavardator/ui/chat/ChatFooterController.java @@ -0,0 +1,35 @@ +package fr.insa.clavardator.ui.chat; + +import fr.insa.clavardator.ui.ButtonPressEvent; +import javafx.fxml.Initializable; + +import java.net.URL; +import java.util.ArrayList; +import java.util.List; +import java.util.ResourceBundle; + +public class ChatFooterController implements Initializable { + + private List attachmentListeners; + private List sendListeners; + + public void addAttachmentListener(ButtonPressEvent listener) { + attachmentListeners.add(listener); + } + public void addSendListener(ButtonPressEvent listener) { + sendListeners.add(listener); + } + + public void onAttachmentPress() { + attachmentListeners.forEach(ButtonPressEvent::onPress); + } + public void onSendPress() { + sendListeners.forEach(ButtonPressEvent::onPress); + } + + @Override + public void initialize(URL location, ResourceBundle resources) { + attachmentListeners = new ArrayList<>(); + sendListeners = new ArrayList<>(); + } +} diff --git a/src/main/java/fr/insa/clavardator/ui/chat/ChatHeaderController.java b/src/main/java/fr/insa/clavardator/ui/chat/ChatHeaderController.java new file mode 100644 index 0000000..4894eb1 --- /dev/null +++ b/src/main/java/fr/insa/clavardator/ui/chat/ChatHeaderController.java @@ -0,0 +1,30 @@ +package fr.insa.clavardator.ui.chat; + +import fr.insa.clavardator.ui.ButtonPressEvent; +import javafx.fxml.Initializable; + +import java.net.URL; +import java.util.ArrayList; +import java.util.List; +import java.util.ResourceBundle; + +public class ChatHeaderController implements Initializable { + + private List editListeners; + + public void addEditListener(ButtonPressEvent listener) { + editListeners.add(listener); + } + + public void onEditPress() { + editListeners.forEach(ButtonPressEvent::onPress); + } + + public void onAboutPress() { + + } + @Override + public void initialize(URL location, ResourceBundle resources) { + editListeners = new ArrayList<>(); + } +} diff --git a/src/main/java/fr/insa/clavardator/ui/chat/MessageListItemCell.java b/src/main/java/fr/insa/clavardator/ui/chat/MessageListItemCell.java index da00861..344d05e 100644 --- a/src/main/java/fr/insa/clavardator/ui/chat/MessageListItemCell.java +++ b/src/main/java/fr/insa/clavardator/ui/chat/MessageListItemCell.java @@ -1,22 +1,26 @@ package fr.insa.clavardator.ui.chat; +import fr.insa.clavardator.chat.Message; +import fr.insa.clavardator.users.CurrentUser; +import fr.insa.clavardator.users.User; import javafx.fxml.FXMLLoader; import javafx.scene.control.ListCell; import java.io.IOException; -public class MessageListItemCell extends ListCell { +public class MessageListItemCell extends ListCell { public MessageListItemCell() { setStyle("-fx-padding: 0px"); } @Override - protected void updateItem(String item, boolean empty) { + protected void updateItem(Message item, boolean empty) { super.updateItem(item, empty); if (item != null) { FXMLLoader cellLoader; - if (item.equals("test")) { + final User sender = item.getSender(); + if (sender instanceof CurrentUser) { cellLoader = new FXMLLoader(getClass().getResource("messageListItemSelf.fxml")); } else { cellLoader = new FXMLLoader(getClass().getResource("messageListItemOther.fxml")); @@ -24,7 +28,7 @@ public class MessageListItemCell extends ListCell { try { setGraphic(cellLoader.load()); final MessageListItemController userListItemController = cellLoader.getController(); - userListItemController.setMessage(item); + userListItemController.setMessage(item.getText()); } catch (IOException e) { e.printStackTrace(); } diff --git a/src/main/resources/fr/insa/clavardator/ui/chat/chat.fxml b/src/main/resources/fr/insa/clavardator/ui/chat/chat.fxml index ffaa190..e379348 100644 --- a/src/main/resources/fr/insa/clavardator/ui/chat/chat.fxml +++ b/src/main/resources/fr/insa/clavardator/ui/chat/chat.fxml @@ -1,58 +1,15 @@ - - - - - + - - - - - - - - - - - + - - - - - - - - - - - - - - - - + diff --git a/src/main/resources/fr/insa/clavardator/ui/chat/chatFooter.fxml b/src/main/resources/fr/insa/clavardator/ui/chat/chatFooter.fxml new file mode 100644 index 0000000..5482087 --- /dev/null +++ b/src/main/resources/fr/insa/clavardator/ui/chat/chatFooter.fxml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/fr/insa/clavardator/ui/chat/chatHeader.fxml b/src/main/resources/fr/insa/clavardator/ui/chat/chatHeader.fxml new file mode 100644 index 0000000..308018f --- /dev/null +++ b/src/main/resources/fr/insa/clavardator/ui/chat/chatHeader.fxml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + +