Started integration of new server architecture
* Removed JAX-RS dependency from POM * Changed version in POM to 0.3-alpha The errors that appear throughout LocalDB and Client are caused by the architecture change and will be removed in future commits.
This commit is contained in:
		
							
								
								
									
										14
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								pom.xml
									
									
									
									
									
								
							| @@ -5,7 +5,7 @@ | ||||
|  | ||||
| 	<groupId>informatik-ag-ngl</groupId> | ||||
| 	<artifactId>envoy-client</artifactId> | ||||
| 	<version>0.0.1-SNAPSHOT</version> | ||||
| 	<version>0.3-alpha</version> | ||||
|  | ||||
| 	<name>Envoy Client</name> | ||||
| 	<url>https://github.com/informatik-ag-ngl/envoy-client</url> | ||||
| @@ -18,20 +18,10 @@ | ||||
| 	</properties> | ||||
|  | ||||
| 	<dependencies> | ||||
| 		<dependency> | ||||
| 			<groupId>org.jboss.resteasy</groupId> | ||||
| 			<artifactId>resteasy-client</artifactId> | ||||
| 			<version>4.1.1.Final</version> | ||||
| 		</dependency> | ||||
| 		<dependency> | ||||
| 			<groupId>org.jboss.resteasy</groupId> | ||||
| 			<artifactId>resteasy-jaxb-provider</artifactId> | ||||
| 			<version>4.3.1.Final</version> | ||||
| 		</dependency> | ||||
| 		<dependency> | ||||
| 			<groupId>informatik-ag-ngl</groupId> | ||||
| 			<artifactId>envoy-common</artifactId> | ||||
| 			<version>0.0.1-SNAPSHOT</version> | ||||
| 			<version>0.2-alpha</version> | ||||
| 		</dependency> | ||||
| 	</dependencies> | ||||
|  | ||||
|   | ||||
| @@ -4,8 +4,8 @@ import java.io.Serializable; | ||||
|  | ||||
| import javax.swing.DefaultListModel; | ||||
|  | ||||
| import envoy.schema.Message; | ||||
| import envoy.schema.User; | ||||
| import envoy.data.Message; | ||||
| import envoy.data.User; | ||||
|  | ||||
| /** | ||||
|  * Represents a chat between two {@link User}s <br> | ||||
|   | ||||
| @@ -14,10 +14,8 @@ import javax.xml.bind.JAXBException; | ||||
| import javax.xml.bind.Marshaller; | ||||
|  | ||||
| import envoy.client.util.EnvoyLog; | ||||
| import envoy.data.User; | ||||
| import envoy.exception.EnvoyException; | ||||
| import envoy.schema.ObjectFactory; | ||||
| import envoy.schema.Sync; | ||||
| import envoy.schema.User; | ||||
|  | ||||
| /** | ||||
|  * Project: <strong>envoy-client</strong><br> | ||||
| @@ -31,7 +29,6 @@ import envoy.schema.User; | ||||
|  */ | ||||
| public class Client { | ||||
|  | ||||
| 	private ObjectFactory	objectFactory	= new ObjectFactory(); | ||||
| 	private Config			config; | ||||
| 	private User			sender, recipient; | ||||
| 	private boolean			online			= false; | ||||
|   | ||||
| @@ -2,10 +2,10 @@ package envoy.client; | ||||
|  | ||||
| import java.io.File; | ||||
| import java.io.IOException; | ||||
| import java.time.Instant; | ||||
| import java.util.*; | ||||
| import java.util.logging.Logger; | ||||
|  | ||||
| import javax.naming.spi.ObjectFactory; | ||||
| import javax.xml.datatype.DatatypeConfigurationException; | ||||
| import javax.xml.datatype.DatatypeFactory; | ||||
|  | ||||
| @@ -13,9 +13,9 @@ import envoy.client.event.EventBus; | ||||
| import envoy.client.event.MessageCreationEvent; | ||||
| import envoy.client.util.EnvoyLog; | ||||
| import envoy.client.util.SerializationUtils; | ||||
| import envoy.data.Message; | ||||
| import envoy.data.User; | ||||
| import envoy.exception.EnvoyException; | ||||
| import envoy.schema.*; | ||||
| import envoy.schema.Message.Metadata.MessageState; | ||||
|  | ||||
| /** | ||||
|  * Project: <strong>envoy-client</strong><br> | ||||
| @@ -73,7 +73,7 @@ public class LocalDB { | ||||
| 	 */ | ||||
| 	public void initializeDBFile() { | ||||
| 		if (user == null) throw new NullPointerException("Client user is null"); | ||||
| 		localDBFile = new File(localDBDir, user.getID() + ".db"); | ||||
| 		localDBFile = new File(localDBDir, user.getId() + ".db"); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| @@ -107,32 +107,6 @@ public class LocalDB { | ||||
| 	 */ | ||||
| 	public void loadChats() throws EnvoyException { chats = SerializationUtils.read(localDBFile, ArrayList.class); } | ||||
|  | ||||
| 	/** | ||||
| 	 * Creates a {@link Message} object serializable to XML. | ||||
| 	 * | ||||
| 	 * @param textContent The content (text) of the message | ||||
| 	 * @param recipientID The recipient of the message | ||||
| 	 * @return prepared {@link Message} object | ||||
| 	 * @since Envoy v0.1-alpha | ||||
| 	 */ | ||||
| 	public Message createMessage(String textContent, long recipientID) { | ||||
| 		Message.Metadata metaData = objectFactory.createMessageMetadata(); | ||||
| 		metaData.setSender(user.getID()); | ||||
| 		metaData.setRecipient(recipientID); | ||||
| 		metaData.setState(MessageState.WAITING); | ||||
| 		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; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Creates a {@link Sync} object filled with the changes that occurred to the | ||||
| 	 * local database since the last synchronization. | ||||
| @@ -181,7 +155,7 @@ public class LocalDB { | ||||
| 						} else { | ||||
| 							// Update Messages in localDB to state RECEIVED | ||||
| 							for (Chat chat : getChats()) | ||||
| 								if (chat.getRecipient().getID() == returnSync.getMessages().get(i).getMetadata().getRecipient()) | ||||
| 								if (chat.getRecipient().getId() == returnSync.getMessages().get(i).getMetadata().getRecipient()) | ||||
| 									for (int j = 0; j < chat.getModel().getSize(); j++) | ||||
| 									if (chat.getModel().get(j).getMetadata().getMessageId() == returnSync.getMessages() | ||||
| 										.get(i) | ||||
| @@ -195,8 +169,8 @@ public class LocalDB { | ||||
| 						logger.info("Message with ID: " + returnSync.getMessages().get(i).getMetadata().getMessageId() | ||||
| 								+ "was initialized to be set to READ in localDB."); | ||||
| 						for (Chat chat : getChats()) | ||||
| 							if (chat.getRecipient().getID() == returnSync.getMessages().get(i).getMetadata().getRecipient()) { | ||||
| 								logger.info("Chat with: " + chat.getRecipient().getID() + "was selected."); | ||||
| 							if (chat.getRecipient().getId() == returnSync.getMessages().get(i).getMetadata().getRecipient()) { | ||||
| 								logger.info("Chat with: " + chat.getRecipient().getId() + "was selected."); | ||||
| 								for (int k = 0; k < chat.getModel().getSize(); k++) | ||||
| 									if (chat.getModel().get(k).getMetadata().getMessageId() == returnSync.getMessages() | ||||
| 										.get(i) | ||||
| @@ -215,7 +189,7 @@ public class LocalDB { | ||||
| 		// Updating UserStatus of all users in LocalDB | ||||
| 		for (User user : returnSync.getUsers()) | ||||
| 			for (Chat chat : getChats()) | ||||
| 				if (user.getID() == chat.getRecipient().getID()) chat.getRecipient().setStatus(user.getStatus()); | ||||
| 				if (user.getId() == chat.getRecipient().getId()) chat.getRecipient().setStatus(user.getStatus()); | ||||
|  | ||||
| 		sync.getMessages().clear(); | ||||
| 		sync.getUsers().clear(); | ||||
| @@ -230,7 +204,7 @@ public class LocalDB { | ||||
| 	public void addUnreadMessagesToLocalDB() { | ||||
| 		for (Message message : unreadMessagesSync.getMessages()) | ||||
| 			for (Chat chat : getChats()) | ||||
| 				if (message.getMetadata().getSender() == chat.getRecipient().getID()) { | ||||
| 				if (message.getMetadata().getSender() == chat.getRecipient().getId()) { | ||||
| 					chat.appendMessage(message); | ||||
| 					break; | ||||
| 				} | ||||
| @@ -247,7 +221,7 @@ public class LocalDB { | ||||
| 	 */ | ||||
| 	public void setMessagesToRead(Chat currentChat) { | ||||
| 		for (int i = currentChat.getModel().size() - 1; i >= 0; --i) | ||||
| 			if (currentChat.getModel().get(i).getMetadata().getRecipient() != currentChat.getRecipient().getID()) | ||||
| 			if (currentChat.getModel().get(i).getMetadata().getRecipient() != currentChat.getRecipient().getId()) | ||||
| 				if (currentChat.getModel().get(i).getMetadata().getState() == MessageState.RECEIVED) { | ||||
| 					currentChat.getModel().get(i).getMetadata().setState(MessageState.READ); | ||||
| 					readMessages.getMessages().add(currentChat.getModel().get(i)); | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| package envoy.client.event; | ||||
|  | ||||
| import envoy.schema.Message; | ||||
| import envoy.data.Message; | ||||
|  | ||||
| /** | ||||
|  * Project: <strong>envoy-client</strong><br> | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| package envoy.client.event; | ||||
|  | ||||
| import envoy.schema.Message; | ||||
| import envoy.data.Message; | ||||
|  | ||||
| /** | ||||
|  * Project: <strong>envoy-client</strong><br> | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| package envoy.client.event; | ||||
|  | ||||
| import envoy.schema.Message; | ||||
| import envoy.data.Message; | ||||
|  | ||||
| /** | ||||
|  * Project: <strong>envoy-client</strong><br> | ||||
|   | ||||
| @@ -14,8 +14,9 @@ import envoy.client.event.EventBus; | ||||
| import envoy.client.event.ThemeChangeEvent; | ||||
| import envoy.client.ui.settings.SettingsScreen; | ||||
| import envoy.client.util.EnvoyLog; | ||||
| import envoy.schema.Message; | ||||
| import envoy.schema.User; | ||||
| import envoy.data.Message; | ||||
| import envoy.data.TextMessage; | ||||
| import envoy.data.User; | ||||
|  | ||||
| /** | ||||
|  * Project: <strong>envoy-client</strong><br> | ||||
| @@ -164,7 +165,7 @@ public class ChatWindow extends JFrame { | ||||
| 				final JList<User>	selectedUserList	= (JList<User>) listSelectionEvent.getSource(); | ||||
| 				final User			user				= selectedUserList.getSelectedValue(); | ||||
|  | ||||
| 				currentChat = localDB.getChats().stream().filter(chat -> chat.getRecipient().getID() == user.getID()).findFirst().get(); | ||||
| 				currentChat = localDB.getChats().stream().filter(chat -> chat.getRecipient().getId() == user.getId()).findFirst().get(); | ||||
|  | ||||
| 				// Set all unread messages in the chat to read | ||||
| 				readCurrentChat(); | ||||
| @@ -246,7 +247,7 @@ public class ChatWindow extends JFrame { | ||||
| 		if (!messageEnterTextArea.getText().isEmpty()) try { | ||||
|  | ||||
| 			// Create and send message object | ||||
| 			final Message message = localDB.createMessage(messageEnterTextArea.getText(), currentChat.getRecipient().getID()); | ||||
| 			final Message message = new TextMessage(0, localDB.getUser(), currentChat.getRecipient(), messageEnterTextArea.getText()); | ||||
| 			currentChat.appendMessage(message); | ||||
| 			messageList.setModel(currentChat.getModel()); | ||||
|  | ||||
| @@ -275,7 +276,7 @@ public class ChatWindow extends JFrame { | ||||
| 				userListModel.addElement(user); | ||||
|  | ||||
| 				// Check if user exists in local DB | ||||
| 				if (localDB.getChats().stream().filter(c -> c.getRecipient().getID() == user.getID()).count() == 0) | ||||
| 				if (localDB.getChats().stream().filter(c -> c.getRecipient().getId() == user.getId()).count() == 0) | ||||
| 					localDB.getChats().add(new Chat(user)); | ||||
| 			}); | ||||
| 			SwingUtilities.invokeLater(() -> userList.setModel(userListModel)); | ||||
| @@ -296,7 +297,7 @@ public class ChatWindow extends JFrame { | ||||
|  | ||||
| 				// Synchronize | ||||
| 				try { | ||||
| 					localDB.applySync(client.sendSync(client.getSender().getID(), localDB.fillSync(client.getSender().getID()))); | ||||
| 					localDB.applySync(client.sendSync(client.getSender().getId(), localDB.fillSync(client.getSender().getId()))); | ||||
| 				} catch (Exception e) { | ||||
| 					logger.log(Level.SEVERE, "Could not perform sync", e); | ||||
| 				} | ||||
| @@ -317,7 +318,7 @@ public class ChatWindow extends JFrame { | ||||
| 	private void updateUserStates() { | ||||
| 		for (int i = 0; i < userList.getModel().getSize(); i++) | ||||
| 			for (int j = 0; j < localDB.getChats().size(); j++) | ||||
| 				if (userList.getModel().getElementAt(i).getID() == localDB.getChats().get(j).getRecipient().getID()) | ||||
| 				if (userList.getModel().getElementAt(i).getId() == localDB.getChats().get(j).getRecipient().getId()) | ||||
| 					userList.getModel().getElementAt(i).setStatus(localDB.getChats().get(j).getRecipient().getStatus()); | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -8,7 +8,8 @@ import javax.swing.JList; | ||||
| import javax.swing.ListCellRenderer; | ||||
|  | ||||
| import envoy.client.Settings; | ||||
| import envoy.schema.Message; | ||||
| import envoy.data.Message; | ||||
| import envoy.data.TextMessage; | ||||
|  | ||||
| /** | ||||
|  * Defines how a message is displayed.<br> | ||||
| @@ -37,19 +38,18 @@ public class MessageListRenderer extends JLabel implements ListCellRenderer<Mess | ||||
|  | ||||
| 		setOpaque(true); | ||||
|  | ||||
| 		final String	text	= value.getContent().get(0).getText(); | ||||
| 		final String	state	= value.getMetadata().getState().toString(); | ||||
| 		final String	date	= value.getMetadata().getDate() == null ? "" | ||||
| 				: new SimpleDateFormat("dd.MM.yyyy HH:mm ").format(value.getMetadata().getDate().toGregorianCalendar().getTime()); | ||||
| 		// TODO: Handle other message types | ||||
| 		final TextMessage message = (TextMessage) value; | ||||
|  | ||||
| 		final String	text	= message.getContent(); | ||||
| 		final String	state	= message.getStatus().toString(); | ||||
| 		final String	date	= new SimpleDateFormat("dd.MM.yyyy HH.mm").format(message.getDate()); | ||||
|  | ||||
| 		// Getting the MessageColor in the Chat of the current theme | ||||
| 		String textColor = null; | ||||
|  | ||||
| 		textColor = Settings.getInstance().getThemes().get(Settings.getInstance().getCurrentTheme()).getMessageColorChat().toHex(); | ||||
| 		String textColor = Settings.getInstance().getThemes().get(Settings.getInstance().getCurrentTheme()).getMessageColorChat().toHex(); | ||||
|  | ||||
| 		// Getting the DateColor in the Chat of the current theme | ||||
| 		String dateColor = null; | ||||
| 		dateColor = Settings.getInstance().getThemes().get(Settings.getInstance().getCurrentTheme()).getDateColorChat().toHex(); | ||||
| 		String dateColor = Settings.getInstance().getThemes().get(Settings.getInstance().getCurrentTheme()).getDateColorChat().toHex(); | ||||
|  | ||||
| 		setText(String.format("<html><p style=\"color:%s\"><b><small>%s</b></small><br><p style=\"color:%s\">%s :%s</html>", | ||||
| 				dateColor, | ||||
|   | ||||
| @@ -12,8 +12,8 @@ import javax.swing.SwingUtilities; | ||||
|  | ||||
| import envoy.client.*; | ||||
| import envoy.client.util.EnvoyLog; | ||||
| import envoy.data.User; | ||||
| import envoy.exception.EnvoyException; | ||||
| import envoy.schema.User; | ||||
|  | ||||
| /** | ||||
|  * Starts the Envoy client and prompts the user to enter their name.<br> | ||||
| @@ -129,7 +129,7 @@ public class Startup { | ||||
| 					JOptionPane.WARNING_MESSAGE); | ||||
| 		} | ||||
|  | ||||
| 		logger.info("Client user ID: " + client.getSender().getID()); | ||||
| 		logger.info("Client user ID: " + client.getSender().getId()); | ||||
|  | ||||
| 		// Save all users to the local database | ||||
| 		if (client.isOnline()) localDB.setUsers(client.getUsers()); | ||||
|   | ||||
| @@ -1,21 +1,15 @@ | ||||
| package envoy.client.ui; | ||||
|  | ||||
| import java.awt.AWTException; | ||||
| import java.awt.Image; | ||||
| import java.awt.MenuItem; | ||||
| import java.awt.PopupMenu; | ||||
| import java.awt.SystemTray; | ||||
| import java.awt.Toolkit; | ||||
| import java.awt.TrayIcon; | ||||
| import java.awt.*; | ||||
| import java.awt.TrayIcon.MessageType; | ||||
| import java.awt.Window; | ||||
| import java.awt.event.WindowAdapter; | ||||
| import java.awt.event.WindowEvent; | ||||
|  | ||||
| import envoy.client.event.EventBus; | ||||
| import envoy.client.event.MessageCreationEvent; | ||||
| import envoy.data.Message; | ||||
| import envoy.data.TextMessage; | ||||
| import envoy.exception.EnvoyException; | ||||
| import envoy.schema.Message; | ||||
|  | ||||
| /** | ||||
|  * Project: <strong>envoy-client</strong><br> | ||||
| @@ -81,9 +75,13 @@ public class StatusTrayIcon { | ||||
| 		trayIcon.addActionListener((evt) -> { focusTarget.setVisible(true); focusTarget.requestFocus(); }); | ||||
|  | ||||
| 		// Start processing message events | ||||
| 		EventBus.getInstance().register(MessageCreationEvent.class, (evt) -> { | ||||
| 			if (displayMessages) | ||||
| 				trayIcon.displayMessage("New message received", ((MessageCreationEvent) evt).get().getContent().get(0).getText(), MessageType.INFO); | ||||
| 		EventBus.getInstance() | ||||
| 			.register(MessageCreationEvent.class, | ||||
| 					(evt) -> { | ||||
| 						// TODO: Handle other message types | ||||
| 						if (displayMessages) trayIcon.displayMessage("New message received", | ||||
| 								((TextMessage) ((MessageCreationEvent) evt).get()).getContent(), | ||||
| 								MessageType.INFO); | ||||
| 					}); | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -7,8 +7,8 @@ import javax.swing.JList; | ||||
| import javax.swing.ListCellRenderer; | ||||
|  | ||||
| import envoy.client.Settings; | ||||
| import envoy.schema.User; | ||||
| import envoy.schema.User.UserStatus; | ||||
| import envoy.data.User; | ||||
| import envoy.data.User.UserStatus; | ||||
|  | ||||
| /** | ||||
|  * Defines how the {@code UserList} is displayed.<br> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user