diff --git a/MyLocalChat/src/main/java/app/Main.java b/MyLocalChat/src/main/java/app/Main.java index 6e06727..aabc42a 100644 --- a/MyLocalChat/src/main/java/app/Main.java +++ b/MyLocalChat/src/main/java/app/Main.java @@ -1,14 +1,16 @@ package app; -import java.util.List; - -import domain.*; import fassade.ChatService; +import ui.Chat; public class Main { - public static void main(String[] args) { - - } + public static void main(String[] args) { + ChatService service = new ChatService(); + + // Zwei Fenster erstellen + Chat omarChat = new Chat("Omar", "Obai", service, 550, 100); + Chat obaiChat = new Chat("Obai", "Omar", service, 100, 100); + } } diff --git a/MyLocalChat/src/main/java/domain/Message.java b/MyLocalChat/src/main/java/domain/Message.java index c592e84..1aaf9f8 100644 --- a/MyLocalChat/src/main/java/domain/Message.java +++ b/MyLocalChat/src/main/java/domain/Message.java @@ -1,55 +1,71 @@ package domain; import java.time.LocalDateTime; - +import java.time.format.DateTimeFormatter; public class Message { - private User sender; - private String content; - private LocalDateTime timestamp; - //private MessageType type; - - public Message(User sender, String content) { - super(); - this.sender = sender; - this.content = content; - this.timestamp = LocalDateTime.now(); - } + private User sender; + private String content; + private LocalDateTime timestamp; + private MessageType type; + + private static final DateTimeFormatter TIME_FORMATTER = + DateTimeFormatter.ofPattern("HH:mm"); + + + public Message(User sender, String content) { + this.sender = sender; + this.content = content; + this.timestamp = LocalDateTime.now(); + this.type = MessageType.TEXT; + } + + public Message(User sender, String content, MessageType type) { + this(sender, content); + this.type = type; + } + + public String toTimeString() { + return String.format("[%s] %s: %s", + timestamp.format(TIME_FORMATTER), + sender.getUsername(), + content); + } + + @Override + public String toString() { + return toTimeString(); + } + + public User getSender() { + return sender; + } - - public User getSender() { - return sender; - } + public void setSender(User sender) { + this.sender = sender; + } - public void setSender(User sender) { - this.sender = sender; - } + public String getContent() { + return content; + } - public String getContent() { - return content; - } + public void setContent(String content) { + this.content = content; + } - public void setContent(String content) { - this.content = content; - } + public LocalDateTime getTimestamp() { + return timestamp; + } - public LocalDateTime getTimestamp() { - return timestamp; - } + public void setTimestamp(LocalDateTime timestamp) { + this.timestamp = timestamp; + } - public void setTimestamp(LocalDateTime timestamp) { - this.timestamp = timestamp; - } - - @Override - public String toString() { - return "Message [sender=" + sender.getUsername() + ", content=" + content + ", timestamp=" - + timestamp + "]"; - } - - - - - -} + public MessageType getType() { + return type; + } + public void setType(MessageType type) { + this.type = type; + } +} \ No newline at end of file diff --git a/MyLocalChat/src/main/java/domain/MessageType.java b/MyLocalChat/src/main/java/domain/MessageType.java index 40608cd..fd3e129 100644 --- a/MyLocalChat/src/main/java/domain/MessageType.java +++ b/MyLocalChat/src/main/java/domain/MessageType.java @@ -1,5 +1,9 @@ package domain; public enum MessageType { - TEXT,LINK; + TEXT, + IMAGE, + FILE, + LINK, + SYSTEM } diff --git a/MyLocalChat/src/main/java/fassade/ChatService.java b/MyLocalChat/src/main/java/fassade/ChatService.java index 9d6d5a8..85c7b24 100644 --- a/MyLocalChat/src/main/java/fassade/ChatService.java +++ b/MyLocalChat/src/main/java/fassade/ChatService.java @@ -1,5 +1,6 @@ package fassade; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -18,21 +19,20 @@ public class ChatService { usersById = new HashMap<>(); } - public boolean createUser(String userName) { + public void createUser(String userName) { if (users.containsKey(userName)) throw new IllegalArgumentException("User existiert bereits: " + userName); User tempUser = new User(userName); users.put(userName, tempUser); usersById.put(tempUser.getUserId(), tempUser); - return true; } - public User getUser(String userName) { + private User getUser(String userName) { return users.get(userName); } - public User getUser(int userId) { + private User getUser(int userId) { return usersById.get(userId); } @@ -43,11 +43,10 @@ public class ChatService { if (user1 == null || user2 == null) throw new IllegalArgumentException("User existiert nicht"); - // Prüfen ob Chat bereits existiert for (ChatRoom room : chatrooms.values()) { if ((room.getUser1().equals(user1) && room.getUser2().equals(user2)) || (room.getUser1().equals(user2) && room.getUser2().equals(user1))) { - return room.getRoomId(); // Existierenden Chat zurückgeben + return room.getRoomId(); } } @@ -78,7 +77,7 @@ public class ChatService { room.addMessage(message); } - public List showMessages(int roomId) { + public List showMessage(int roomId) { ChatRoom room = chatrooms.get(roomId); if (room == null) throw new IllegalArgumentException("Chatroom existiert nicht: " + roomId); @@ -186,9 +185,9 @@ public class ChatService { public String getGruppenRoomInfo(int groupId) { GruppenRoom room = gruppenRooms.get(groupId); - if (room == null) { + if (room == null) throw new IllegalArgumentException("Gruppenraum existiert nicht: " + groupId); - } + return room.toString(); } diff --git a/MyLocalChat/src/main/java/ui/Chat.java b/MyLocalChat/src/main/java/ui/Chat.java index e969008..7431889 100644 --- a/MyLocalChat/src/main/java/ui/Chat.java +++ b/MyLocalChat/src/main/java/ui/Chat.java @@ -1,25 +1,89 @@ package ui; -import java.awt.EventQueue; - -import javax.swing.JFrame; -import javax.swing.JPanel; -import javax.swing.border.EmptyBorder; +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import fassade.ChatService; public class Chat extends JFrame { - - private static final long serialVersionUID = 1L; - private JPanel contentPane; - - - public Chat() { - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - setBounds(100, 100, 650, 410); - contentPane = new JPanel(); - contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); - setContentPane(contentPane); - contentPane.setLayout(null); - - } - -} + private ChatService service; + private String username; + private int roomId; + + private JTextArea chatArea; + private JTextField messageField; + private JButton sendButton; + + public Chat(String username, String otherUser, ChatService service, int x, int y) { + this.service = service; + this.username = username; + + // User erstellen + service.createUser(username); + service.createUser(otherUser); + + // Chatroom erstellen + this.roomId = service.createChatRoom(username, otherUser); + + setupGUI(); + setLocation(x, y); + setVisible(true); + } + + private void setupGUI() { + setTitle("Chat - " + username); + setSize(400, 500); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setLayout(new BorderLayout()); + + // Chat-Anzeige + chatArea = new JTextArea(); + chatArea.setEditable(false); + JScrollPane scrollPane = new JScrollPane(chatArea); + add(scrollPane, BorderLayout.CENTER); + + // Eingabe-Bereich + JPanel inputPanel = new JPanel(new BorderLayout()); + messageField = new JTextField(); + sendButton = new JButton("Senden"); + + // Send-Button Action + sendButton.addActionListener(e -> sendMessage()); + + // Enter-Taste zum Senden + messageField.addActionListener(e -> sendMessage()); + + inputPanel.add(messageField, BorderLayout.CENTER); + inputPanel.add(sendButton, BorderLayout.EAST); + inputPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); + + add(inputPanel, BorderLayout.SOUTH); + + // Initiale Nachricht + chatArea.append("Chat gestartet mit " + username + "\n"); + } + + private void sendMessage() { + String message = messageField.getText().trim(); + if (!message.isEmpty()) { + try { + service.sendMessage(roomId, username, message); + messageField.setText(""); + refreshChat(); + } catch (Exception e) { + JOptionPane.showMessageDialog(this, "Fehler: " + e.getMessage()); + } + } + } + + private void refreshChat() { + try { + chatArea.setText(""); + for (String message : service.showMessage(roomId)) { + chatArea.append(message + "\n"); + } + } catch (Exception e) { + chatArea.append("Fehler beim Laden: " + e.getMessage() + "\n"); + } + } +} \ No newline at end of file