Merge pull request #4 from informatik-ag-ngl/f/standalone_server_integration
Integrated Envoy Server Standalone
This commit is contained in:
		
							
								
								
									
										12
									
								
								.classpath
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								.classpath
									
									
									
									
									
								
							@@ -24,18 +24,6 @@
 | 
				
			|||||||
			<attribute name="org.eclipse.jst.component.nondependency" value=""/>
 | 
								<attribute name="org.eclipse.jst.component.nondependency" value=""/>
 | 
				
			||||||
		</attributes>
 | 
							</attributes>
 | 
				
			||||||
	</classpathentry>
 | 
						</classpathentry>
 | 
				
			||||||
	<classpathentry kind="src" output="target/classes" path="target/generated-sources/jaxb">
 | 
					 | 
				
			||||||
		<attributes>
 | 
					 | 
				
			||||||
			<attribute name="ignore_optional_problems" value="true"/>
 | 
					 | 
				
			||||||
			<attribute name="maven.pomderived" value="true"/>
 | 
					 | 
				
			||||||
			<attribute name="optional" value="true"/>
 | 
					 | 
				
			||||||
		</attributes>
 | 
					 | 
				
			||||||
	</classpathentry>
 | 
					 | 
				
			||||||
	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/xjb">
 | 
					 | 
				
			||||||
		<attributes>
 | 
					 | 
				
			||||||
			<attribute name="maven.pomderived" value="true"/>
 | 
					 | 
				
			||||||
		</attributes>
 | 
					 | 
				
			||||||
	</classpathentry>
 | 
					 | 
				
			||||||
	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
 | 
						<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
 | 
				
			||||||
		<attributes>
 | 
							<attributes>
 | 
				
			||||||
			<attribute name="maven.pomderived" value="true"/>
 | 
								<attribute name="maven.pomderived" value="true"/>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,6 @@
 | 
				
			|||||||
eclipse.preferences.version=1
 | 
					eclipse.preferences.version=1
 | 
				
			||||||
encoding//src/main/java=UTF-8
 | 
					encoding//src/main/java=UTF-8
 | 
				
			||||||
encoding//src/main/resources=UTF-8
 | 
					encoding//src/main/resources=UTF-8
 | 
				
			||||||
encoding//src/main/xjb=UTF-8
 | 
					 | 
				
			||||||
encoding//src/test/java=UTF-8
 | 
					encoding//src/test/java=UTF-8
 | 
				
			||||||
encoding//src/test/resources=UTF-8
 | 
					encoding//src/test/resources=UTF-8
 | 
				
			||||||
encoding//target/generated-sources/jaxb=UTF-8
 | 
					 | 
				
			||||||
encoding/<project>=UTF-8
 | 
					encoding/<project>=UTF-8
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,13 +1,15 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
 | 
					<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    <wb-module deploy-name="envoy-common">
 | 
					    <wb-module deploy-name="envoy-common">
 | 
				
			||||||
                        
 | 
					                        
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        <wb-resource deploy-path="/" source-path="/src/main/java"/>
 | 
					        <wb-resource deploy-path="/" source-path="/src/main/java"/>
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
        <wb-resource deploy-path="/" source-path="/target/generated-sources/jaxb"/>
 | 
					 | 
				
			||||||
        <wb-resource deploy-path="/" source-path="/src/main/xjb"/>
 | 
					 | 
				
			||||||
        <wb-resource deploy-path="/" source-path="/src/main/resources"/>
 | 
					        <wb-resource deploy-path="/" source-path="/src/main/resources"/>
 | 
				
			||||||
                    
 | 
					                    
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    </wb-module>
 | 
					    </wb-module>
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</project-modules>
 | 
					</project-modules>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										39
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								pom.xml
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
				
			|||||||
	<modelVersion>4.0.0</modelVersion>
 | 
						<modelVersion>4.0.0</modelVersion>
 | 
				
			||||||
	<groupId>informatik-ag-ngl</groupId>
 | 
						<groupId>informatik-ag-ngl</groupId>
 | 
				
			||||||
	<artifactId>envoy-common</artifactId>
 | 
						<artifactId>envoy-common</artifactId>
 | 
				
			||||||
	<version>0.0.1-SNAPSHOT</version>
 | 
						<version>0.2-alpha</version>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<name>Envoy Common</name>
 | 
						<name>Envoy Common</name>
 | 
				
			||||||
	<url>https://github.com/informatik-ag-ngl/envoy-common</url>
 | 
						<url>https://github.com/informatik-ag-ngl/envoy-common</url>
 | 
				
			||||||
@@ -16,44 +16,7 @@
 | 
				
			|||||||
		<maven.compiler.target>1.8</maven.compiler.target>
 | 
							<maven.compiler.target>1.8</maven.compiler.target>
 | 
				
			||||||
	</properties>
 | 
						</properties>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<dependencies>
 | 
					 | 
				
			||||||
		<dependency>
 | 
					 | 
				
			||||||
			<groupId>org.codehaus.mojo</groupId>
 | 
					 | 
				
			||||||
			<artifactId>jaxb2-maven-plugin</artifactId>
 | 
					 | 
				
			||||||
			<version>2.5.0</version>
 | 
					 | 
				
			||||||
		</dependency>
 | 
					 | 
				
			||||||
	</dependencies>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	<build>
 | 
						<build>
 | 
				
			||||||
		<finalName>envoy-common</finalName>
 | 
							<finalName>envoy-common</finalName>
 | 
				
			||||||
		<resources>
 | 
					 | 
				
			||||||
			<resource>
 | 
					 | 
				
			||||||
				<directory>src/main/resources</directory>
 | 
					 | 
				
			||||||
			</resource>
 | 
					 | 
				
			||||||
			<resource>
 | 
					 | 
				
			||||||
				<directory>src/main/xjb</directory>
 | 
					 | 
				
			||||||
			</resource>
 | 
					 | 
				
			||||||
		</resources>
 | 
					 | 
				
			||||||
		<plugins>
 | 
					 | 
				
			||||||
			<plugin>
 | 
					 | 
				
			||||||
				<groupId>org.codehaus.mojo</groupId>
 | 
					 | 
				
			||||||
				<artifactId>jaxb2-maven-plugin</artifactId>
 | 
					 | 
				
			||||||
				<version>2.5.0</version>
 | 
					 | 
				
			||||||
				<executions>
 | 
					 | 
				
			||||||
					<execution>
 | 
					 | 
				
			||||||
						<id>xjc</id>
 | 
					 | 
				
			||||||
						<goals>
 | 
					 | 
				
			||||||
							<goal>xjc</goal>
 | 
					 | 
				
			||||||
						</goals>
 | 
					 | 
				
			||||||
					</execution>
 | 
					 | 
				
			||||||
				</executions>
 | 
					 | 
				
			||||||
				<configuration>
 | 
					 | 
				
			||||||
					<packageName>envoy.schema</packageName>
 | 
					 | 
				
			||||||
					<sources>
 | 
					 | 
				
			||||||
						<source>src/main/resources</source>
 | 
					 | 
				
			||||||
					</sources>
 | 
					 | 
				
			||||||
				</configuration>
 | 
					 | 
				
			||||||
			</plugin>
 | 
					 | 
				
			||||||
		</plugins>
 | 
					 | 
				
			||||||
	</build>
 | 
						</build>
 | 
				
			||||||
</project>
 | 
					</project>
 | 
				
			||||||
							
								
								
									
										72
									
								
								src/main/java/envoy/data/LoginCredentials.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								src/main/java/envoy/data/LoginCredentials.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,72 @@
 | 
				
			|||||||
 | 
					package envoy.data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.Serializable;
 | 
				
			||||||
 | 
					import java.security.MessageDigest;
 | 
				
			||||||
 | 
					import java.security.NoSuchAlgorithmException;
 | 
				
			||||||
 | 
					import java.util.Formatter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Project: <strong>envoy-common</strong><br>
 | 
				
			||||||
 | 
					 * File: <strong>LoginCredentials.java</strong><br>
 | 
				
			||||||
 | 
					 * Created: <strong>29.12.2019</strong><br>
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * @author Kai S. K. Engelbart
 | 
				
			||||||
 | 
					 * @since Envoy Common v0.2-alpha
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class LoginCredentials implements Serializable {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private final String	name;
 | 
				
			||||||
 | 
						private final byte[]	passwordHash;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private static final long serialVersionUID = -7395245059059523314L;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Creates an in stance of {@link LoginCredentials}.
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param name     the name of the user
 | 
				
			||||||
 | 
						 * @param password the password of the user (will be converted to a hash)
 | 
				
			||||||
 | 
						 * @throws NoSuchAlgorithmException
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public LoginCredentials(String name, char[] password) throws NoSuchAlgorithmException {
 | 
				
			||||||
 | 
							this.name		= name;
 | 
				
			||||||
 | 
							passwordHash	= getSha256(toByteArray(password));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public String toString() {
 | 
				
			||||||
 | 
							Formatter form = new Formatter();
 | 
				
			||||||
 | 
							form.format("LoginCredentials[name=%s,passwordHash=", name);
 | 
				
			||||||
 | 
							for (int i = 0; i < passwordHash.length; i++)
 | 
				
			||||||
 | 
								form.format("%02x", passwordHash[i]);
 | 
				
			||||||
 | 
							form.format("]");
 | 
				
			||||||
 | 
							String str = form.toString();
 | 
				
			||||||
 | 
							form.close();
 | 
				
			||||||
 | 
							return str;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private byte[] toByteArray(char[] chars) {
 | 
				
			||||||
 | 
							byte[] bytes = new byte[chars.length * 2];
 | 
				
			||||||
 | 
							for (int i = 0; i < chars.length; ++i) {
 | 
				
			||||||
 | 
								bytes[i * 2]		= (byte) (chars[i] >> 8);
 | 
				
			||||||
 | 
								bytes[i * 2 + 1]	= (byte) (chars[i]);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return bytes;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private byte[] getSha256(byte[] input) throws NoSuchAlgorithmException {
 | 
				
			||||||
 | 
							MessageDigest md = MessageDigest.getInstance("SHA-256");
 | 
				
			||||||
 | 
							return md.digest(input);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @return the name of the user performing the login
 | 
				
			||||||
 | 
						 * @since Envoy Common v0.2-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public String getName() { return name; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @return the password hash of the user performing the login
 | 
				
			||||||
 | 
						 * @since Envoy Common v0.2-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public byte[] getPasswordHash() { return passwordHash; }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										97
									
								
								src/main/java/envoy/data/Message.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								src/main/java/envoy/data/Message.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,97 @@
 | 
				
			|||||||
 | 
					package envoy.data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.Serializable;
 | 
				
			||||||
 | 
					import java.util.Date;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Represents a unique message with a unique, numeric ID. Further metadata
 | 
				
			||||||
 | 
					 * includes the sender and recipient {@link User}s, as well as the creation
 | 
				
			||||||
 | 
					 * date and the current {@link MessageStatus}.<br>
 | 
				
			||||||
 | 
					 * <br>
 | 
				
			||||||
 | 
					 * Project: <strong>envoy-common</strong><br>
 | 
				
			||||||
 | 
					 * File: <strong>Message.java</strong><br>
 | 
				
			||||||
 | 
					 * Created: <strong>28.12.2019</strong><br>
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * @author Kai S. K. Engelbart
 | 
				
			||||||
 | 
					 * @since Envoy Common v0.2-alpha
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public abstract class Message implements Serializable {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private final long	id;
 | 
				
			||||||
 | 
						private final User	sender, recipient;
 | 
				
			||||||
 | 
						private final Date	date;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private MessageStatus status;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private static final long serialVersionUID = -4393477412979594435L;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Initializes a {@link Message} from the client's perspective. The current date
 | 
				
			||||||
 | 
						 * is used as the message date and the status is set to
 | 
				
			||||||
 | 
						 * {@link MessageStatus#WAITING}.
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param id        unique ID
 | 
				
			||||||
 | 
						 * @param sender    the user who sends the message
 | 
				
			||||||
 | 
						 * @param recipient the user who receives the message
 | 
				
			||||||
 | 
						 * @since Envoy Common v0.2-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public Message(long id, User sender, User recipient) {
 | 
				
			||||||
 | 
							this.id			= id;
 | 
				
			||||||
 | 
							this.sender		= sender;
 | 
				
			||||||
 | 
							this.recipient	= recipient;
 | 
				
			||||||
 | 
							date			= new Date();
 | 
				
			||||||
 | 
							status			= MessageStatus.WAITING;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @return the ID of this message
 | 
				
			||||||
 | 
						 * @since Envoy Common v0.2-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public long getId() { return id; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @return the sender of this message
 | 
				
			||||||
 | 
						 * @since Envoy Common v0.2-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public User getSender() { return sender; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @return the recipient of this message
 | 
				
			||||||
 | 
						 * @since Envoy Common v0.2-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public User getRecipient() { return recipient; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @return the date at which this message was created
 | 
				
			||||||
 | 
						 * @since Envoy Common v0.2-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public Date getDate() { return date; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @return the current status of this message
 | 
				
			||||||
 | 
						 * @since Envoy Common v0.2-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public MessageStatus getStatus() { return status; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Changes the current {@link MessageStatus} to the next logical status.<br>
 | 
				
			||||||
 | 
						 * <br>
 | 
				
			||||||
 | 
						 * The underlying order is as follows:
 | 
				
			||||||
 | 
						 * <ol>
 | 
				
			||||||
 | 
						 * <li>{@link MessageStatus#WAITING}
 | 
				
			||||||
 | 
						 * <li>{@link MessageStatus#SENT}
 | 
				
			||||||
 | 
						 * <li>{@link MessageStatus#RECEIVED}
 | 
				
			||||||
 | 
						 * <li>{@link MessageStatus#READ}
 | 
				
			||||||
 | 
						 * </ol>
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @since Envoy Common v0.2-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public void nextStatus() {
 | 
				
			||||||
 | 
							if (status == MessageStatus.READ) throw new IllegalStateException("Message status READ is already reached");
 | 
				
			||||||
 | 
							status = MessageStatus.values()[status.ordinal() + 1];
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public static enum MessageStatus {
 | 
				
			||||||
 | 
							WAITING, SENT, RECEIVED, READ
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										54
									
								
								src/main/java/envoy/data/TextMessage.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								src/main/java/envoy/data/TextMessage.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
				
			|||||||
 | 
					package envoy.data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.text.SimpleDateFormat;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Represents a {@link Message} with content that is comprised of text.<br>
 | 
				
			||||||
 | 
					 * <br>
 | 
				
			||||||
 | 
					 * Project: <strong>envoy-common</strong><br>
 | 
				
			||||||
 | 
					 * File: <strong>TextMessage.java</strong><br>
 | 
				
			||||||
 | 
					 * Created: <strong>28.12.2019</strong><br>
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * @author Kai S. K. Engelbart
 | 
				
			||||||
 | 
					 * @since Envoy Common v0.2-alpha
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class TextMessage extends Message {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private final String content;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private static final long serialVersionUID = 1538164720632899917L;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Initializes a {@link TextMessage} from the client's perspective. The current
 | 
				
			||||||
 | 
						 * date
 | 
				
			||||||
 | 
						 * is used as the message date and the status is set to
 | 
				
			||||||
 | 
						 * {@link envoy.data.Message.MessageStatus#WAITING}.
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param id        unique ID
 | 
				
			||||||
 | 
						 * @param sender    the user who sends the message
 | 
				
			||||||
 | 
						 * @param recipient the user who receives the message
 | 
				
			||||||
 | 
						 * @param content   the content of the message
 | 
				
			||||||
 | 
						 * @since Envoy Common v0.2-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public TextMessage(long id, User sender, User recipient, String content) {
 | 
				
			||||||
 | 
							super(id, sender, recipient);
 | 
				
			||||||
 | 
							this.content = content;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public String toString() {
 | 
				
			||||||
 | 
							return String.format("TextMessage[id=%d,sender=%s,recipient=%s,date=%s,status=%s,content=%s]",
 | 
				
			||||||
 | 
									getId(),
 | 
				
			||||||
 | 
									getSender(),
 | 
				
			||||||
 | 
									getRecipient(),
 | 
				
			||||||
 | 
									new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(getDate()),
 | 
				
			||||||
 | 
									getStatus(),
 | 
				
			||||||
 | 
									content);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @return the content of this {@link TextMessage}
 | 
				
			||||||
 | 
						 * @since Envoy Common v0.2-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public String getContent() { return content; }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										71
									
								
								src/main/java/envoy/data/User.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								src/main/java/envoy/data/User.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,71 @@
 | 
				
			|||||||
 | 
					package envoy.data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.Serializable;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Represents a unique user with a unique, numeric ID, a name and a current
 | 
				
			||||||
 | 
					 * {@link UserStatus}.<br>
 | 
				
			||||||
 | 
					 * <br>
 | 
				
			||||||
 | 
					 * Project: <strong>envoy-common</strong><br>
 | 
				
			||||||
 | 
					 * File: <strong>User.java</strong><br>
 | 
				
			||||||
 | 
					 * Created: <strong>28.12.2019</strong><br>
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * @author Kai S. K. Engelbart
 | 
				
			||||||
 | 
					 * @since Envoy Common v0.2-alpha
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class User implements Serializable {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private final long		id;
 | 
				
			||||||
 | 
						private final String	name;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private UserStatus status;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private static final long serialVersionUID = 3530947374856708236L;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Initializes a {@link User}. The {@link UserStatus} is set to
 | 
				
			||||||
 | 
						 * {@link UserStatus#OFFLINE}.
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param id   unique ID
 | 
				
			||||||
 | 
						 * @param name user name
 | 
				
			||||||
 | 
						 * @since Envoy Client v0.2-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public User(long id, String name) {
 | 
				
			||||||
 | 
							this.id		= id;
 | 
				
			||||||
 | 
							this.name	= name;
 | 
				
			||||||
 | 
							status		= UserStatus.OFFLINE;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public String toString() { return String.format("User[id=%d,name=%s,status=%s]", id, name, status); }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @return the ID of this {@link User}
 | 
				
			||||||
 | 
						 * @since Envoy Client v0.2-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public long getId() { return id; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @return the name of this {@link User}
 | 
				
			||||||
 | 
						 * @since Envoy Client v0.2-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public String getName() { return name; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @return the current status of this user
 | 
				
			||||||
 | 
						 * @since Envoy Client v0.2-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public UserStatus getStatus() { return status; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Sets the current status of this user
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param status the status to set
 | 
				
			||||||
 | 
						 * @since Envoy Client v0.2-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public void setStatus(UserStatus status) { this.status = status; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public static enum UserStatus {
 | 
				
			||||||
 | 
							ONLINE, AWAY, BUSY, OFFLINE;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										19
									
								
								src/main/java/envoy/event/Event.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/main/java/envoy/event/Event.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					package envoy.event;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Project: <strong>envoy-common</strong><br>
 | 
				
			||||||
 | 
					 * File: <strong>Event.java</strong><br>
 | 
				
			||||||
 | 
					 * Created: <strong>04.12.2019</strong><br>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author Kai S. K. Engelbart
 | 
				
			||||||
 | 
					 * @param <T> the type of the Event
 | 
				
			||||||
 | 
					 * @since Envoy v0.2-alpha
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public interface Event<T> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @return the data associated with this event
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						T get();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										81
									
								
								src/main/java/envoy/event/EventBus.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								src/main/java/envoy/event/EventBus.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,81 @@
 | 
				
			|||||||
 | 
					package envoy.event;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					import java.util.HashMap;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * This class handles events by allowing {@link EventHandler} object to register
 | 
				
			||||||
 | 
					 * themselves and then be notified about certain events dispatched by the event
 | 
				
			||||||
 | 
					 * bus.<br>
 | 
				
			||||||
 | 
					 * <br>
 | 
				
			||||||
 | 
					 * The event bus is a singleton and can be used across the entire application to
 | 
				
			||||||
 | 
					 * guarantee the propagation of events.<br>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Project: <strong>envoy-common</strong><br>
 | 
				
			||||||
 | 
					 * File: <strong>EventBus.java</strong><br>
 | 
				
			||||||
 | 
					 * Created: <strong>04.12.2019</strong><br>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author Kai S. K. Engelbart
 | 
				
			||||||
 | 
					 * @since Envoy v0.2-alpha
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class EventBus {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Contains all {@link EventHandler} instances registered at this
 | 
				
			||||||
 | 
						 * {@link EventBus} as values mapped to by their supported {@link Event}
 | 
				
			||||||
 | 
						 * classes.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						private Map<Class<? extends Event<?>>, List<EventHandler>> handlers = new HashMap<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * The singleton instance of this {@link EventBus} that is used across the
 | 
				
			||||||
 | 
						 * entire application.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						private static EventBus eventBus = new EventBus();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * This constructor is not accessible from outside this class because a
 | 
				
			||||||
 | 
						 * singleton instance of it is provided by the {@link EventBus#getInstance()}
 | 
				
			||||||
 | 
						 * method.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						private EventBus() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @return the singleton instance of the {@link EventBus}
 | 
				
			||||||
 | 
						 * @since Envoy v0.2-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public static EventBus getInstance() { return eventBus; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Registers an {@link EventHandler} to be notified when a
 | 
				
			||||||
 | 
						 * {@link Event} of a certain type is dispatched.
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 * @param eventClass the class which the {@link EventHandler} is subscribed to
 | 
				
			||||||
 | 
						 * @param handler    the {@link EventHandler} to register
 | 
				
			||||||
 | 
						 * @since Envoy v0.2-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public void register(Class<? extends Event<?>> eventClass, EventHandler handler) {
 | 
				
			||||||
 | 
							if (!handlers.containsKey(eventClass)) handlers.put(eventClass, new ArrayList<>());
 | 
				
			||||||
 | 
							handlers.get(eventClass).add(handler);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Dispatches a {@link Event} to every {@link EventHandler} subscribed to it.
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 * @param event the {@link Event} to dispatch
 | 
				
			||||||
 | 
						 * @since Envoy v0.2-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public void dispatch(Event<?> event) {
 | 
				
			||||||
 | 
							handlers.keySet().stream().filter(event.getClass()::isAssignableFrom).map(handlers::get).flatMap(List::stream).forEach(h -> h.handle(event));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * @return a map of all {@link EventHandler} instances currently registered at
 | 
				
			||||||
 | 
						 *         this {@link EventBus} with the {@link Event} classes they are
 | 
				
			||||||
 | 
						 *         subscribed to as keys
 | 
				
			||||||
 | 
						 * @since Envoy v0.2-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public Map<Class<? extends Event<?>>, List<EventHandler>> getHandlers() { return handlers; }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										18
									
								
								src/main/java/envoy/event/EventHandler.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/main/java/envoy/event/EventHandler.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					package envoy.event;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Project: <strong>envoy-common</strong><br>
 | 
				
			||||||
 | 
					 * File: <strong>EventHandler.java</strong><br>
 | 
				
			||||||
 | 
					 * Created: <strong>04.12.2019</strong><br>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author Kai S. K. Engelbart
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public interface EventHandler {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Consumes an event dispatched by the event bus.
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 * @param event The event dispatched by the event bus, only of supported type
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						void handle(Event<?> event);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										27
									
								
								src/main/java/envoy/event/MessageEvent.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/main/java/envoy/event/MessageEvent.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					package envoy.event;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import envoy.data.Message;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Project: <strong>envoy-common</strong><br>
 | 
				
			||||||
 | 
					 * File: <strong>MessageCreationEvent.java</strong><br>
 | 
				
			||||||
 | 
					 * Created: <strong>4 Dec 2019</strong><br>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author Kai S. K. Engelbart
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class MessageEvent implements Event<Message> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						protected final Message message;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Initializes a {@link MessageEvent} conveying information about a
 | 
				
			||||||
 | 
						 * {@link Message} object.
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 * @param message the {@link Message} object to attach to this event
 | 
				
			||||||
 | 
						 * @since Envoy v0.2-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public MessageEvent(Message message) { this.message = message; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public Message get() { return message; }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,22 +0,0 @@
 | 
				
			|||||||
package envoy.schema;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import javax.xml.bind.annotation.XmlEnum;
 | 
					 | 
				
			||||||
import javax.xml.bind.annotation.XmlType;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * Project: <strong>envoy-common</strong><br>
 | 
					 | 
				
			||||||
 * File: <strong>MessageState.java</strong><br>
 | 
					 | 
				
			||||||
 * Created: <strong>11 Oct 2019</strong><br>
 | 
					 | 
				
			||||||
 * 
 | 
					 | 
				
			||||||
 * @author Kai S. K. Engelbart
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
@XmlType(name = "")
 | 
					 | 
				
			||||||
@XmlEnum
 | 
					 | 
				
			||||||
public enum MessageState {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	Waiting, Sent, Received, Read;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	public String value() { return name(); }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	public static MessageState fromValue(String v) { return valueOf(v); }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,22 +0,0 @@
 | 
				
			|||||||
package envoy.schema;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import javax.xml.bind.annotation.XmlEnum;
 | 
					 | 
				
			||||||
import javax.xml.bind.annotation.XmlType;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * Project: <strong>envoy-common</strong><br>
 | 
					 | 
				
			||||||
 * File: <strong>UserStatus.java</strong><br>
 | 
					 | 
				
			||||||
 * Created: <strong>27 Oct 2019</strong><br>
 | 
					 | 
				
			||||||
 * 
 | 
					 | 
				
			||||||
 * @author Maximilian Käfer
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
@XmlType(name = "")
 | 
					 | 
				
			||||||
@XmlEnum
 | 
					 | 
				
			||||||
public enum UserStatus {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	Online, DoNotDisturb, AFK, Offline;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	public String value() { return name(); }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	public static UserStatus fromValue(String v) { return valueOf(v); }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										94
									
								
								src/main/java/envoy/util/SerializationUtils.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								src/main/java/envoy/util/SerializationUtils.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,94 @@
 | 
				
			|||||||
 | 
					package envoy.util;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.ByteArrayOutputStream;
 | 
				
			||||||
 | 
					import java.io.File;
 | 
				
			||||||
 | 
					import java.io.FileInputStream;
 | 
				
			||||||
 | 
					import java.io.FileOutputStream;
 | 
				
			||||||
 | 
					import java.io.IOException;
 | 
				
			||||||
 | 
					import java.io.InputStream;
 | 
				
			||||||
 | 
					import java.io.ObjectInputStream;
 | 
				
			||||||
 | 
					import java.io.ObjectOutputStream;
 | 
				
			||||||
 | 
					import java.io.OutputStream;
 | 
				
			||||||
 | 
					import java.io.Serializable;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import envoy.exception.EnvoyException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Project: <strong>envoy-client</strong><br>
 | 
				
			||||||
 | 
					 * File: <strong>SerializationUtils.java</strong><br>
 | 
				
			||||||
 | 
					 * Created: <strong>23.12.2019</strong><br>
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * @author Kai S. K. Engelbart
 | 
				
			||||||
 | 
					 * @since Envoy Common v0.2-alpha
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class SerializationUtils {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private SerializationUtils() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Deserializes an arbitrary {@link Serializable} object from a file.
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param <T>             the type of the object to deserialize
 | 
				
			||||||
 | 
						 * @param file            the file deserialize from
 | 
				
			||||||
 | 
						 * @param serializedClass the class of the object to deserialize
 | 
				
			||||||
 | 
						 * @return the deserialized object
 | 
				
			||||||
 | 
						 * @throws EnvoyException if an error occurred during deserialization
 | 
				
			||||||
 | 
						 * @since Envoy Common v0.2-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public static <T extends Serializable> T read(File file, Class<T> serializedClass) throws IOException, ClassNotFoundException {
 | 
				
			||||||
 | 
							if (file == null) throw new NullPointerException("File is null");
 | 
				
			||||||
 | 
							return read(new FileInputStream(file), serializedClass);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public static <T extends Serializable> T read(InputStream in, Class<T> serializedClass) throws IOException, ClassNotFoundException {
 | 
				
			||||||
 | 
							try (ObjectInputStream oin = new ObjectInputStream(in)) {
 | 
				
			||||||
 | 
								return serializedClass.cast(oin.readObject());
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Serializes an arbitrary object to a file.
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param file the file to serialize to
 | 
				
			||||||
 | 
						 * @param obj  the object to serialize
 | 
				
			||||||
 | 
						 * @throws IOException if an error occurred during serialization
 | 
				
			||||||
 | 
						 * @since Envoy Common v0.2-alpha
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public static void write(File file, Object obj) throws IOException {
 | 
				
			||||||
 | 
							if (file == null) throw new NullPointerException("File is null");
 | 
				
			||||||
 | 
							if (obj == null) throw new NullPointerException("Object to serialize is null");
 | 
				
			||||||
 | 
							if (!file.exists()) {
 | 
				
			||||||
 | 
								file.getParentFile().mkdirs();
 | 
				
			||||||
 | 
								file.createNewFile();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file))) {
 | 
				
			||||||
 | 
								out.writeObject(obj);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Serializes an object and writes it into an output stream preceded by 4 bytes
 | 
				
			||||||
 | 
						 * containing the number of serialized bytes.
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param obj the object to serialize
 | 
				
			||||||
 | 
						 * @param out the output stream to serialize to
 | 
				
			||||||
 | 
						 * @throws IOException if an error occurred during serialization
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public static void writeBytesWithLength(Object obj, OutputStream out) throws IOException {
 | 
				
			||||||
 | 
							// Serialize object to byte array
 | 
				
			||||||
 | 
							ByteArrayOutputStream baos = new ByteArrayOutputStream();
 | 
				
			||||||
 | 
							try (ObjectOutputStream oout = new ObjectOutputStream(baos)) {
 | 
				
			||||||
 | 
								oout.writeObject(obj);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							byte[] objBytes = baos.toByteArray();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Get length of byte array in bytes
 | 
				
			||||||
 | 
							byte[] objLen = intToBytes(objBytes.length);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Write length and byte array
 | 
				
			||||||
 | 
							out.write(objLen);
 | 
				
			||||||
 | 
							out.write(objBytes);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private static byte[] intToBytes(int n) { return new byte[] { (byte) (n >>> 24), (byte) (n >>> 16), (byte) (n >>> 8), (byte) n }; }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,70 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0"?>
 | 
					 | 
				
			||||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
 | 
					 | 
				
			||||||
	targetNamespace="https://github.com/informatik-ag-ngl"
 | 
					 | 
				
			||||||
	xmlns="https://github.com/informatik-ag-ngl"
 | 
					 | 
				
			||||||
	elementFormDefault="qualified">
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	<xs:element name="Sync">
 | 
					 | 
				
			||||||
		<xs:complexType>
 | 
					 | 
				
			||||||
			<xs:sequence>
 | 
					 | 
				
			||||||
				<xs:element name="Message" type="Message" minOccurs="0"
 | 
					 | 
				
			||||||
					maxOccurs="unbounded" />
 | 
					 | 
				
			||||||
				<xs:element name="User" type="User" minOccurs="0"
 | 
					 | 
				
			||||||
					maxOccurs="unbounded" />
 | 
					 | 
				
			||||||
			</xs:sequence>
 | 
					 | 
				
			||||||
		</xs:complexType>
 | 
					 | 
				
			||||||
	</xs:element>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	<xs:complexType name="Message">
 | 
					 | 
				
			||||||
		<xs:sequence>
 | 
					 | 
				
			||||||
			<xs:element name="Metadata">
 | 
					 | 
				
			||||||
				<xs:complexType>
 | 
					 | 
				
			||||||
					<xs:sequence>
 | 
					 | 
				
			||||||
						<xs:element name="Sender" type="xs:long" />
 | 
					 | 
				
			||||||
						<xs:element name="Recipient" type="xs:long" />
 | 
					 | 
				
			||||||
						<xs:element name="Date" type="xs:dateTime" />
 | 
					 | 
				
			||||||
						<xs:element name="MessageId" type="xs:long" />
 | 
					 | 
				
			||||||
						<xs:element name="State">
 | 
					 | 
				
			||||||
							<xs:simpleType>
 | 
					 | 
				
			||||||
								<xs:restriction base="xs:string">
 | 
					 | 
				
			||||||
									<xs:enumeration value="Waiting" />
 | 
					 | 
				
			||||||
									<xs:enumeration value="Sent" />
 | 
					 | 
				
			||||||
									<xs:enumeration value="Received" />
 | 
					 | 
				
			||||||
									<xs:enumeration value="Read" />
 | 
					 | 
				
			||||||
								</xs:restriction>
 | 
					 | 
				
			||||||
							</xs:simpleType>
 | 
					 | 
				
			||||||
						</xs:element>
 | 
					 | 
				
			||||||
					</xs:sequence>
 | 
					 | 
				
			||||||
				</xs:complexType>
 | 
					 | 
				
			||||||
			</xs:element>
 | 
					 | 
				
			||||||
			<xs:element name="Content" maxOccurs="unbounded">
 | 
					 | 
				
			||||||
				<xs:complexType>
 | 
					 | 
				
			||||||
					<xs:sequence>
 | 
					 | 
				
			||||||
						<xs:element name="text" type="xs:string" />
 | 
					 | 
				
			||||||
					</xs:sequence>
 | 
					 | 
				
			||||||
					<xs:attribute name="type" type="xs:string" />
 | 
					 | 
				
			||||||
				</xs:complexType>
 | 
					 | 
				
			||||||
			</xs:element>
 | 
					 | 
				
			||||||
		</xs:sequence>
 | 
					 | 
				
			||||||
	</xs:complexType>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	<xs:complexType name="User">
 | 
					 | 
				
			||||||
		<xs:sequence>
 | 
					 | 
				
			||||||
			<xs:element name="Name" type="xs:string" />
 | 
					 | 
				
			||||||
			<xs:element name="ID" type="xs:long" />
 | 
					 | 
				
			||||||
			<xs:element name="Status">
 | 
					 | 
				
			||||||
				<xs:simpleType>
 | 
					 | 
				
			||||||
					<xs:restriction base="xs:string">
 | 
					 | 
				
			||||||
						<xs:enumeration value="Online" />
 | 
					 | 
				
			||||||
						<xs:enumeration value="DoNotDisturb" />
 | 
					 | 
				
			||||||
						<xs:enumeration value="AFK" />
 | 
					 | 
				
			||||||
						<xs:enumeration value="Offline" />
 | 
					 | 
				
			||||||
					</xs:restriction>
 | 
					 | 
				
			||||||
				</xs:simpleType>
 | 
					 | 
				
			||||||
			</xs:element>
 | 
					 | 
				
			||||||
		</xs:sequence>
 | 
					 | 
				
			||||||
	</xs:complexType>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
</xs:schema>
 | 
					 | 
				
			||||||
@@ -1,33 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					 | 
				
			||||||
<!DOCTYPE xml>
 | 
					 | 
				
			||||||
<jaxb:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema"
 | 
					 | 
				
			||||||
	xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
 | 
					 | 
				
			||||||
	xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
 | 
					 | 
				
			||||||
	jaxb:extensionBindingPrefixes="xjc" version="2.1">
 | 
					 | 
				
			||||||
	<jaxb:globalBindings generateIsSetMethod="true"
 | 
					 | 
				
			||||||
		fixedAttributeAsConstantProperty="true">
 | 
					 | 
				
			||||||
		<xjc:serializable />
 | 
					 | 
				
			||||||
	</jaxb:globalBindings>
 | 
					 | 
				
			||||||
	<jaxb:bindings
 | 
					 | 
				
			||||||
		schemaLocation="../resources/sync_schema.xsd">
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		<jaxb:bindings node="//xs:element[@name='Message']">
 | 
					 | 
				
			||||||
			<jaxb:property name="Messages"/>
 | 
					 | 
				
			||||||
		</jaxb:bindings>
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		<jaxb:bindings node="//xs:element[@name='User']">
 | 
					 | 
				
			||||||
			<jaxb:property name="Users"/>
 | 
					 | 
				
			||||||
		</jaxb:bindings>
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		<jaxb:bindings
 | 
					 | 
				
			||||||
			node="//xs:element[@name='State']/xs:simpleType">
 | 
					 | 
				
			||||||
			<jaxb:typesafeEnumClass name="MessageState" />
 | 
					 | 
				
			||||||
		</jaxb:bindings>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		<jaxb:bindings
 | 
					 | 
				
			||||||
			node="//xs:element[@name='Status']/xs:simpleType">
 | 
					 | 
				
			||||||
			<jaxb:typesafeEnumClass name="UserStatus" />
 | 
					 | 
				
			||||||
		</jaxb:bindings>
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
	</jaxb:bindings>
 | 
					 | 
				
			||||||
</jaxb:bindings>
 | 
					 | 
				
			||||||
		Reference in New Issue
	
	Block a user