Merge branch 'develop' into f/config
This commit is contained in:
		@@ -1,113 +1,123 @@
 | 
			
		||||
package envoy.client;
 | 
			
		||||
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.time.Instant;
 | 
			
		||||
import java.util.Properties;
 | 
			
		||||
 | 
			
		||||
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.JAXBContext;
 | 
			
		||||
import javax.xml.bind.JAXBException;
 | 
			
		||||
import javax.xml.bind.Marshaller;
 | 
			
		||||
import javax.xml.datatype.DatatypeConfigurationException;
 | 
			
		||||
import javax.xml.datatype.DatatypeFactory;
 | 
			
		||||
 | 
			
		||||
import envoy.schema.Message;
 | 
			
		||||
import envoy.schema.ObjectFactory;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Project: <strong>envoy-client</strong><br>
 | 
			
		||||
 * File: <strong>EnvoyClient.java</strong><br>
 | 
			
		||||
 * Created: <strong>28 Sep 2019</strong><br>
 | 
			
		||||
 * Author: <strong>Kai S. K. Engelbart & Maximilian Käfer</strong>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
public class EnvoyClient {
 | 
			
		||||
 | 
			
		||||
	private DatatypeFactory datatypeFactory;
 | 
			
		||||
 | 
			
		||||
	private static final Properties serverProps = new Properties();
 | 
			
		||||
 | 
			
		||||
	static {
 | 
			
		||||
		ClassLoader loader = Thread.currentThread().getContextClassLoader();
 | 
			
		||||
		try {
 | 
			
		||||
			serverProps.load(loader.getResourceAsStream("server.properties"));
 | 
			
		||||
 | 
			
		||||
		} catch (IOException e) {
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public EnvoyClient() {
 | 
			
		||||
		try {
 | 
			
		||||
			datatypeFactory = DatatypeFactory.newInstance();
 | 
			
		||||
		} catch (DatatypeConfigurationException e) {
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Sends a message with text content to the server.<br>
 | 
			
		||||
	 * 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 sendMessage(Message message) {
 | 
			
		||||
		new Thread(() -> {
 | 
			
		||||
			// 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
 | 
			
		||||
			String		url			= String.format("%s:%s/envoy-server/rest/message/send",
 | 
			
		||||
					serverProps.getProperty("server"),
 | 
			
		||||
					serverProps.getProperty("port"));
 | 
			
		||||
			Client		client		= ClientBuilder.newClient();
 | 
			
		||||
			WebTarget	target		= client.target(url);
 | 
			
		||||
			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();
 | 
			
		||||
		metaData.setSender(senderID);
 | 
			
		||||
		metaData.setRecipient(recipientID);
 | 
			
		||||
		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);
 | 
			
		||||
 | 
			
		||||
		return message;
 | 
			
		||||
	}
 | 
			
		||||
package envoy.client;
 | 
			
		||||
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.time.Instant;
 | 
			
		||||
import java.util.Properties;
 | 
			
		||||
 | 
			
		||||
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.JAXBContext;
 | 
			
		||||
import javax.xml.bind.JAXBException;
 | 
			
		||||
import javax.xml.bind.Marshaller;
 | 
			
		||||
import javax.xml.datatype.DatatypeConfigurationException;
 | 
			
		||||
import javax.xml.datatype.DatatypeFactory;
 | 
			
		||||
 | 
			
		||||
import envoy.schema.Message;
 | 
			
		||||
import envoy.schema.Messages;
 | 
			
		||||
import envoy.schema.ObjectFactory;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Project: <strong>envoy-client</strong><br>
 | 
			
		||||
 * File: <strong>EnvoyClient.java</strong><br>
 | 
			
		||||
 * Created: <strong>28 Sep 2019</strong><br>
 | 
			
		||||
 * Author: <strong>Kai S. K. Engelbart & Maximilian Käfer</strong>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
public class EnvoyClient {
 | 
			
		||||
 | 
			
		||||
	private ObjectFactory	objectFactory	= new ObjectFactory();
 | 
			
		||||
	private DatatypeFactory	datatypeFactory;
 | 
			
		||||
 | 
			
		||||
	private static final Properties serverProps = new Properties();
 | 
			
		||||
 | 
			
		||||
	static {
 | 
			
		||||
		ClassLoader loader = Thread.currentThread().getContextClassLoader();
 | 
			
		||||
		try {
 | 
			
		||||
			serverProps.load(loader.getResourceAsStream("server.properties"));
 | 
			
		||||
 | 
			
		||||
		} catch (IOException e) {
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public EnvoyClient() {
 | 
			
		||||
		try {
 | 
			
		||||
			datatypeFactory = DatatypeFactory.newInstance();
 | 
			
		||||
		} catch (DatatypeConfigurationException e) {
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Sends a message with text content to the server.<br>
 | 
			
		||||
	 * 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 sendMessage(Message message) {
 | 
			
		||||
		new Thread(() -> {
 | 
			
		||||
			// Wrap single message into messages list
 | 
			
		||||
			Messages messages = wrapMessage(message);
 | 
			
		||||
 | 
			
		||||
			// 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(messages, System.out);
 | 
			
		||||
			} catch (JAXBException e) {
 | 
			
		||||
				e.printStackTrace();
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// Send message
 | 
			
		||||
			String		url			= String.format("%s:%s/envoy-server/rest/message/send",
 | 
			
		||||
					serverProps.getProperty("server"),
 | 
			
		||||
					serverProps.getProperty("port"));
 | 
			
		||||
			Client		client		= ClientBuilder.newClient();
 | 
			
		||||
			WebTarget	target		= client.target(url);
 | 
			
		||||
			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) {
 | 
			
		||||
		Message.MetaData metaData = objectFactory.createMessageMetaData();
 | 
			
		||||
		metaData.setSender(senderID);
 | 
			
		||||
		metaData.setRecipient(recipientID);
 | 
			
		||||
		metaData.setState(false);
 | 
			
		||||
		metaData.setDate(datatypeFactory.newXMLGregorianCalendar(Instant.now().toString()));
 | 
			
		||||
 | 
			
		||||
		Message.Content content = objectFactory.createMessageContent();
 | 
			
		||||
		content.setType("text");
 | 
			
		||||
		content.setText(textContent);
 | 
			
		||||
 | 
			
		||||
		Message message = objectFactory.createMessage();
 | 
			
		||||
		message.setMetaData(metaData);
 | 
			
		||||
		message.getContent().add(content);
 | 
			
		||||
 | 
			
		||||
		return message;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public Messages wrapMessage(Message... messages) {
 | 
			
		||||
		Messages wrapper = objectFactory.createMessages();
 | 
			
		||||
		wrapper.getMessage().addAll(Arrays.asList(messages));
 | 
			
		||||
		return wrapper;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user