From 37ebc77d71c678b4b75039eeebeac7a4f4f61188 Mon Sep 17 00:00:00 2001 From: kske Date: Mon, 30 Sep 2019 09:53:16 +0200 Subject: [PATCH] Moved main method to ChatWindow, made message sending asynchronous --- src/main/java/envoy/EnvoyClient.java | 47 ------- src/main/java/envoy/client/EnvoyClient.java | 103 ++++++-------- src/main/java/envoy/client/ui/ChatWindow.java | 133 ++++++++---------- 3 files changed, 104 insertions(+), 179 deletions(-) delete mode 100644 src/main/java/envoy/EnvoyClient.java diff --git a/src/main/java/envoy/EnvoyClient.java b/src/main/java/envoy/EnvoyClient.java deleted file mode 100644 index 1ba3dc1..0000000 --- a/src/main/java/envoy/EnvoyClient.java +++ /dev/null @@ -1,47 +0,0 @@ -package envoy; - -import java.time.Instant; - -import javax.ws.rs.client.Client; -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.JAXBException; -import javax.xml.datatype.DatatypeConfigurationException; -import javax.xml.datatype.DatatypeFactory; - -import envoy.schema.Message; -import envoy.schema.ObjectFactory; - -/** - * Project: envoy-client
- * File: EnvoyClient.java
- * Created: 28 Sep 2019
- * Author: Kai S. K. Engelbart - */ -public class EnvoyClient { - - public static void main(String[] args) throws DatatypeConfigurationException, JAXBException { - ObjectFactory factory = new ObjectFactory(); - - Message.MetaData metaData = factory.createMessageMetaData(); - metaData.setSender("Kai"); - metaData.setRecipient("Maxi"); - metaData.setState(false); - metaData.setDate(DatatypeFactory.newInstance().newXMLGregorianCalendar(Instant.now().toString())); - - Message.Content content = factory.createMessageContent(); - content.setType("text"); - content.setText("Hello, World"); - - Message message = factory.createMessage(); - message.setMetaData(metaData); - message.getContent().add(content); - - 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")); - response.close(); - } -} diff --git a/src/main/java/envoy/client/EnvoyClient.java b/src/main/java/envoy/client/EnvoyClient.java index ecb58b2..a7f4e6d 100644 --- a/src/main/java/envoy/client/EnvoyClient.java +++ b/src/main/java/envoy/client/EnvoyClient.java @@ -1,8 +1,5 @@ package envoy.client; -import java.awt.EventQueue; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.time.Instant; import javax.ws.rs.client.Client; @@ -10,11 +7,9 @@ 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.JAXBException; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; -import envoy.client.ui.ChatWindow; import envoy.schema.Message; import envoy.schema.ObjectFactory; @@ -22,68 +17,54 @@ import envoy.schema.ObjectFactory; * Project: envoy-client
* File: EnvoyClient.java
* Created: 28 Sep 2019
- * Author: Kai S. K. Engelbart and Maximilian Käfer + * Author: Kai S. K. Engelbart & Maximilian Käfer */ public class EnvoyClient { - public static String content1 = ""; - - - /** - * Calls Class ChatWidow - */ - public static void main(String[] args) throws DatatypeConfigurationException, JAXBException { - EventQueue.invokeLater(new Runnable() { - public void run() { - try { - ChatWindow frame = new ChatWindow(); - frame.setVisible(true); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - - /** - * specifies data
- * sends xml to server
- * gets response from server (currently 204) - */ - public static void sendMessage() throws DatatypeConfigurationException, JAXBException { - - ObjectFactory factory = new ObjectFactory(); - - Message.MetaData metaData = factory.createMessageMetaData(); - metaData.setSender("Kai"); - metaData.setRecipient("Maxi"); - metaData.setState(false); - metaData.setDate(DatatypeFactory.newInstance().newXMLGregorianCalendar(Instant.now().toString())); + private DatatypeFactory datatypeFactory; - Message.Content content = factory.createMessageContent(); - content.setType("text"); - content.setText(content1); - - Message message = factory.createMessage(); - message.setMetaData(metaData); - message.getContent().add(content); - - 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")); - System.out.println("Response code: " + response.getStatus()); - response.close(); - - - + public EnvoyClient() { + try { + datatypeFactory = DatatypeFactory.newInstance(); + } catch (DatatypeConfigurationException e) { + e.printStackTrace(); + } } - + /** - * sets content of xml to content from ChatWindow + * Sends a message with text content to the server.
+ * Because sending a request is a blocking operation, it is executed + * asynchronously. + * + * @param sender Name of the sender + * @param recipient Name of the recipient + * @param textContent Content (text) of the message */ - public void setContent (String content2) { - content1 = content2; + public void sendMessage(String sender, String recipient, String textContent) { + new Thread(() -> { + ObjectFactory factory = new ObjectFactory(); + + Message.MetaData metaData = factory.createMessageMetaData(); + metaData.setSender(sender); + metaData.setRecipient(recipient); + metaData.setState(false); + metaData.setDate(datatypeFactory.newXMLGregorianCalendar(Instant.now().toString())); + + Message.Content content = factory.createMessageContent(); + content.setType("text"); + content.setText(textContent); + + Message message = factory.createMessage(); + message.setMetaData(metaData); + message.getContent().add(content); + + 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")); + System.out.println("Response code: " + response.getStatus()); + response.close(); + client.close(); + }).start(); } - -} +} \ 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 dad7788..10fa35a 100644 --- a/src/main/java/envoy/client/ui/ChatWindow.java +++ b/src/main/java/envoy/client/ui/ChatWindow.java @@ -1,108 +1,99 @@ package envoy.client.ui; -import java.awt.BorderLayout; +import java.awt.Color; import java.awt.EventQueue; - -import javax.swing.JFrame; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTextArea; -import javax.swing.JTextPane; -import javax.swing.border.EmptyBorder; -import javax.xml.bind.JAXBException; -import javax.xml.datatype.DatatypeConfigurationException; - -import envoy.client.EnvoyClient; - +import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import javax.swing.JButton; -import java.awt.GridBagConstraints; -import java.awt.Color; +import javax.swing.JFrame; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JTextArea; +import javax.swing.border.EmptyBorder; + +import envoy.client.EnvoyClient; /** * Project: envoy-client
* File: ChatWindow.java
* Created: 28 Sep 2019
- * Author: Maximilian Käfer + * Author: Maximilian Käfer & Kai S. K. Engelbart */ - public class ChatWindow extends JFrame { - private JPanel contentPane; - EnvoyClient envoyClient = new EnvoyClient(); + private static final long serialVersionUID = 6865098428255463649L; + + private JPanel contentPane = new JPanel(); + private EnvoyClient envoyClient = new EnvoyClient(); public ChatWindow() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 600, 800); - contentPane = new JPanel(); + setTitle("Envoy"); + setLocationRelativeTo(null); + contentPane.setBackground(new Color(220, 220, 220)); - contentPane.setForeground(new Color(0, 0, 0)); + contentPane.setForeground(Color.white); 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); - - - // Message enter field ---------------------------------------------------------------------------- - JTextArea messageEnterTextfield = new JTextArea(); - messageEnterTextfield.setLineWrap(true); - - GridBagConstraints gbc_moveSelectionMessageEnterTextfield = new GridBagConstraints(); - gbc_moveSelectionMessageEnterTextfield.fill = GridBagConstraints.BOTH; - gbc_moveSelectionMessageEnterTextfield.gridx = 1; - gbc_moveSelectionMessageEnterTextfield.gridy = 2; - - //gbc_moveSelectionMessageEnterTextfield.gridwidth = 10; - - gbc_moveSelectionMessageEnterTextfield.insets = new Insets(10, 10, 10, 10); - - contentPane.add(messageEnterTextfield, gbc_moveSelectionMessageEnterTextfield); - - // Post Button ----------------------------------------------------------------------------------- + // Message enter field + JTextArea messageEnterTextfield = new JTextArea(); + messageEnterTextfield.setLineWrap(true); + + GridBagConstraints gbc_moveSelectionMessageEnterTextfield = new GridBagConstraints(); + 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 JButton postButton = new JButton("Post"); postButton.setForeground(new Color(255, 255, 255)); postButton.setBackground(new Color(0, 100, 0)); GridBagConstraints gbc_moveSelectionPostButton = new GridBagConstraints(); - + 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(new ActionListener() { - public void actionPerformed(ActionEvent e) { - try { - if(messageEnterTextfield.getText().isEmpty() == false) { - envoyClient.setContent(messageEnterTextfield.getText()); - envoyClient.sendMessage(); - } - - } catch (DatatypeConfigurationException | JAXBException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } - - } - }); - - - - - + + postButton.addActionListener((evt) -> { + if (!messageEnterTextfield.getText().isEmpty()) try { + envoyClient.sendMessage("Kai", "Maxi", messageEnterTextfield.getText()); + } catch (Exception e) { + JOptionPane.showMessageDialog(this, + "An exception occured while sending a message. See the log for more details.", + "Exception occured", + JOptionPane.ERROR_MESSAGE); + e.printStackTrace(); + } + }); } -} + public static void main(String[] args) { + EventQueue.invokeLater(() -> { + try { + ChatWindow frame = new ChatWindow(); + frame.setVisible(true); + } catch (Exception e) { + e.printStackTrace(); + } + }); + } +} \ No newline at end of file