diff --git a/src/main/java/envoy/client/EnvoyClient.java b/src/main/java/envoy/client/EnvoyClient.java index 9316504..a6f5fb9 100644 --- a/src/main/java/envoy/client/EnvoyClient.java +++ b/src/main/java/envoy/client/EnvoyClient.java @@ -7,10 +7,12 @@ import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Entity; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.Response; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; -import envoy.client.ui.ChatWindow; import envoy.schema.Message; import envoy.schema.ObjectFactory; @@ -43,21 +45,39 @@ public class EnvoyClient { * @param textContent Content (text) of the message */ public void sendMessage(Message message) { - //System.out.println(message.getContent().get(0).getText()); new Thread(() -> { - Client client = ClientBuilder.newClient(); - WebTarget target = client.target("http://localhost:8080/envoy-server/rest/message/send"); - Response response = target.request().post(Entity.entity(message, "application/xml")); + // Print message XML to console + JAXBContext jc; + try { + jc = JAXBContext.newInstance("envoy.schema"); + Marshaller m = jc.createMarshaller(); + m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); + m.marshal(message, System.out); + } catch (JAXBException e) { + e.printStackTrace(); + } + + // Send message + Client client = ClientBuilder.newClient(); + WebTarget target = client.target("http://kske.feste-ip.net:43315/envoy-server/rest/message/send"); + Response response = target.request().post(Entity.entity(message, "application/xml")); System.out.println("Response code: " + response.getStatus()); response.close(); client.close(); }).start(); } - - + + /** + * Creates a {@link Message} object serializable to XML. + * + * @param senderID The ID of the sender + * @param recipientID The ID of the recipient + * @param textContent The content (text) of the message + * @return Prepared {@link Message} object + */ public Message createMessage(String senderID, String recipientID, String textContent) { - ObjectFactory factory = new ObjectFactory(); - Message.MetaData metaData = factory.createMessageMetaData(); + ObjectFactory factory = new ObjectFactory(); + Message.MetaData metaData = factory.createMessageMetaData(); metaData.setSender(senderID); metaData.setRecipient(recipientID); metaData.setState(false); @@ -70,8 +90,7 @@ public class EnvoyClient { Message message = factory.createMessage(); message.setMetaData(metaData); message.getContent().add(content); - - + return message; } } \ No newline at end of file diff --git a/src/main/java/envoy/client/ui/ChatWindow.java b/src/main/java/envoy/client/ui/ChatWindow.java index dde872c..8fb801e 100644 --- a/src/main/java/envoy/client/ui/ChatWindow.java +++ b/src/main/java/envoy/client/ui/ChatWindow.java @@ -1,14 +1,12 @@ package envoy.client.ui; import java.awt.Color; -import java.awt.Component; +import java.awt.ComponentOrientation; import java.awt.EventQueue; import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; -import java.util.Iterator; -import java.util.List; import javax.swing.DefaultListModel; import javax.swing.JButton; @@ -18,39 +16,26 @@ import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; -import javax.swing.ListModel; -import javax.swing.border.Border; import javax.swing.border.EmptyBorder; -import javax.swing.border.LineBorder; -import javax.swing.border.MatteBorder; import envoy.client.EnvoyClient; import envoy.schema.Message; -import javax.swing.ListSelectionModel; -import javax.swing.UIManager; - -import java.awt.Rectangle; -import java.awt.geom.RoundRectangle2D; -import java.awt.ComponentOrientation; -import java.awt.Point; -import java.awt.Dimension; -import javax.swing.border.BevelBorder; - /** * Project: envoy-client
* File: ChatWindow.java
* Created: 28 Sep 2019
- * Author: Maximilian Käfer & Kai S. K. Engelbart & Leon Hofmeister + * Author: Maximilian Käfer & Kai S. K. Engelbart */ public class ChatWindow extends JFrame { private static final long serialVersionUID = 6865098428255463649L; - private JPanel contentPane = new JPanel(); - private EnvoyClient envoyClient = new EnvoyClient(); + private JPanel contentPane = new JPanel(); + private EnvoyClient envoyClient = new EnvoyClient(); public DefaultListModel listModel = new DefaultListModel<>(); + public ChatWindow() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 600, 800); @@ -62,81 +47,62 @@ public class ChatWindow extends JFrame { contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); GridBagLayout gbl_contentPane = new GridBagLayout(); - gbl_contentPane.columnWidths = new int[] { 1, 1, 1 }; - gbl_contentPane.rowHeights = new int[] { 1, 1, 1 }; - gbl_contentPane.columnWeights = new double[] { 0.3, 1.0, 0.1 }; - gbl_contentPane.rowWeights = new double[] { 0.05, 1, 0.07 }; + gbl_contentPane.columnWidths = new int[] { 1, 1, 1 }; + gbl_contentPane.rowHeights = new int[] { 1, 1, 1 }; + gbl_contentPane.columnWeights = new double[] { 0.3, 1.0, 0.1 }; + gbl_contentPane.rowWeights = new double[] { 0.05, 1, 0.07 }; contentPane.setLayout(gbl_contentPane); - - // Chat------------------ - List testMessages = List.of(envoyClient.createMessage("UserA", "UserB", "Das ist eine Testnachricht."), envoyClient.createMessage("UserB", "UserA", "Das ist die Antwort auf die Testnachricht.")); - JList elementList = new JList<>(); elementList.setFocusTraversalKeysEnabled(false); - + elementList.setSelectionForeground(new Color(255, 255, 255)); elementList.setSelectionBackground(new Color(102, 0, 153)); elementList.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT); elementList.setForeground(new Color(255, 255, 255)); elementList.setBackground(new Color(51, 51, 51)); - - - + elementList.setModel(listModel); - elementList.setFont( new Font("Arial", Font.PLAIN, 17)); + elementList.setFont(new Font("Arial", Font.PLAIN, 17)); elementList.setFixedCellHeight(60); elementList.setBorder(new EmptyBorder(5, 5, 5, 5)); - - - //Only temporary for the predefined messages in the List - for (int i = 0; i < testMessages.size(); i++) { - listModel.addElement("" + "

" + getSenderElement(testMessages.get(i)) + " " + "
" + "

" + getFirstContentElement(testMessages.get(i)) + ""); - } - - - + JScrollPane scrollPane = new JScrollPane(); scrollPane.setForeground(new Color(0, 0, 0)); scrollPane.setBackground(new Color(51, 51, 51)); scrollPane.setViewportView(elementList); scrollPane.setBorder(null); - + GridBagConstraints gbc_scrollPane = new GridBagConstraints(); - gbc_scrollPane.fill = GridBagConstraints.BOTH; - gbc_scrollPane.gridwidth = 2; - gbc_scrollPane.gridx = 1; - gbc_scrollPane.gridy = 1; - + gbc_scrollPane.fill = GridBagConstraints.BOTH; + gbc_scrollPane.gridwidth = 2; + gbc_scrollPane.gridx = 1; + gbc_scrollPane.gridy = 1; gbc_scrollPane.insets = new Insets(10, 10, 10, 10); - + contentPane.add(scrollPane, gbc_scrollPane); - - - // Message enter field----------------- + + // Message enter field JTextArea messageEnterTextfield = new JTextArea(); messageEnterTextfield.setCaretColor(new Color(255, 255, 255)); messageEnterTextfield.setForeground(new Color(255, 255, 255)); messageEnterTextfield.setBackground(new Color(51, 51, 51)); messageEnterTextfield.setLineWrap(true); messageEnterTextfield.setBorder(null); - messageEnterTextfield.setFont( new Font("Arial", Font.PLAIN, 17)); + messageEnterTextfield.setFont(new Font("Arial", Font.PLAIN, 17)); messageEnterTextfield.setBorder(new EmptyBorder(5, 5, 5, 5)); GridBagConstraints gbc_moveSelectionMessageEnterTextfield = new GridBagConstraints(); - gbc_moveSelectionMessageEnterTextfield.fill = GridBagConstraints.BOTH; - gbc_moveSelectionMessageEnterTextfield.gridx = 1; - gbc_moveSelectionMessageEnterTextfield.gridy = 2; + gbc_moveSelectionMessageEnterTextfield.fill = GridBagConstraints.BOTH; + gbc_moveSelectionMessageEnterTextfield.gridx = 1; + gbc_moveSelectionMessageEnterTextfield.gridy = 2; gbc_moveSelectionMessageEnterTextfield.insets = new Insets(10, 10, 10, 10); contentPane.add(messageEnterTextfield, gbc_moveSelectionMessageEnterTextfield); - - - - // Post Button----------------- + // Post Button JButton postButton = new JButton("Post"); postButton.setForeground(new Color(255, 255, 255)); postButton.setBackground(new Color(102, 51, 153)); @@ -144,19 +110,19 @@ public class ChatWindow extends JFrame { GridBagConstraints gbc_moveSelectionPostButton = new GridBagConstraints(); - gbc_moveSelectionPostButton.fill = GridBagConstraints.BOTH; - gbc_moveSelectionPostButton.gridx = 2; - gbc_moveSelectionPostButton.gridy = 2; + gbc_moveSelectionPostButton.fill = GridBagConstraints.BOTH; + gbc_moveSelectionPostButton.gridx = 2; + gbc_moveSelectionPostButton.gridy = 2; gbc_moveSelectionPostButton.insets = new Insets(10, 10, 10, 10); - contentPane.add(postButton, gbc_moveSelectionPostButton); postButton.addActionListener((evt) -> { if (!messageEnterTextfield.getText().isEmpty()) try { - envoyClient.sendMessage(envoyClient.createMessage("Kai", "Maxi", messageEnterTextfield.getText())); - addMessageToChat("Du", messageEnterTextfield.getText()); + final Message message = envoyClient.createMessage("Kai", "Maxi", messageEnterTextfield.getText()); + envoyClient.sendMessage(message); + appendMessageToChat(message); messageEnterTextfield.setText(""); } catch (Exception e) { JOptionPane.showMessageDialog(this, @@ -167,35 +133,28 @@ public class ChatWindow extends JFrame { } }); } - + /** - * gets the Sender from the Message - * @param message - * @return + * Extracts the first text content from a message. + * + * @param message The message from which to return the text content + * @return The first content of type 'text' */ - public String getSenderElement (Message message) { - return message.getMetaData().getSender(); - } - - /** - * gets the First Content Element(text) from the Message - * @param message - * @return - */ - public String getFirstContentElement (Message message) { + public String getFirstTextContent(Message message) { return message.getContent().get(0).getText(); } - + /** - * adds the Sender and the First Content Element(text) of the new Message to the listModel - * @param message - * @return + * Appends a message with sender and message content to the message list. + * + * @param message The message to append */ - public void addMessageToChat(String Sender, String Content) { - listModel.addElement("" + "

" + Sender + " " + "
" + "

" + Content + ""); + private void appendMessageToChat(Message message) { + listModel.addElement("" + "

" + message.getMetaData().getSender() + + " " + "
" + "

" + getFirstTextContent(message) + + ""); } - - + public static void main(String[] args) { EventQueue.invokeLater(() -> { try {