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