Warned user on group creation if he already has a Group with that name
This commit is contained in:
		| @@ -16,6 +16,8 @@ import envoy.client.ui.ClearableTextField; | ||||
| import envoy.client.ui.SceneContext; | ||||
| import envoy.client.ui.listcell.ContactControl; | ||||
| import envoy.client.ui.listcell.ListCellFactory; | ||||
| import envoy.data.Contact; | ||||
| import envoy.data.Group; | ||||
| import envoy.data.User; | ||||
| import envoy.event.EventBus; | ||||
| import envoy.event.GroupCreation; | ||||
| @@ -50,6 +52,8 @@ public class GroupCreationScene { | ||||
|  | ||||
| 	private SceneContext sceneContext; | ||||
|  | ||||
| 	private LocalDB localDB; | ||||
|  | ||||
| 	private static final EventBus eventBus = EventBus.getInstance(); | ||||
|  | ||||
| 	@FXML | ||||
| @@ -66,7 +70,8 @@ public class GroupCreationScene { | ||||
| 	 * @since Envoy Client v0.1-beta | ||||
| 	 */ | ||||
| 	public void initializeData(SceneContext sceneContext, LocalDB localDB) { | ||||
| 		this.sceneContext = sceneContext; | ||||
| 		this.sceneContext	= sceneContext; | ||||
| 		this.localDB		= localDB; | ||||
| 		Platform.runLater(() -> userList.getItems() | ||||
| 			.addAll(localDB.getChats() | ||||
| 				.stream() | ||||
| @@ -109,14 +114,47 @@ public class GroupCreationScene { | ||||
| 		if (!Bounds.isValidContactName(name)) { | ||||
| 			new Alert(AlertType.ERROR, "The entered group name is not valid (" + Bounds.CONTACT_NAME_PATTERN + ")").showAndWait(); | ||||
| 			groupNameField.getTextField().clear(); | ||||
| 		} else if (groupNameAlreadyPresent(name)) { | ||||
| 			final var alert = new Alert(AlertType.WARNING, "You already have a group  with that name.", ButtonType.OK, ButtonType.CANCEL); | ||||
| 			alert.setTitle("Create Group?"); | ||||
| 			alert.setHeaderText("Proceed?"); | ||||
| 			alert.showAndWait().filter(btn -> btn == ButtonType.OK).ifPresent(btn -> createGroup(name)); | ||||
| 		} else { | ||||
| 			eventBus.dispatch(new SendEvent( | ||||
| 					new GroupCreation(name, userList.getSelectionModel().getSelectedItems().stream().map(User::getID).collect(Collectors.toSet())))); | ||||
| 			new Alert(AlertType.INFORMATION, String.format("Group '%s' successfully created.", name)).showAndWait(); | ||||
| 			sceneContext.pop(); | ||||
| 			createGroup(name); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Creates a new group with the given name and all selected members.<br> | ||||
| 	 * Additionally pops the scene automatically. | ||||
| 	 * | ||||
| 	 * @param name the chosen group name | ||||
| 	 * @since Envoy Client v0.1-beta | ||||
| 	 */ | ||||
| 	private void createGroup(String name) { | ||||
| 		eventBus.dispatch(new SendEvent( | ||||
| 				new GroupCreation(name, userList.getSelectionModel().getSelectedItems().stream().map(User::getID).collect(Collectors.toSet())))); | ||||
| 		sceneContext.pop(); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Returns true if the proposed group name is already present in the users | ||||
| 	 * {@code LocalDB}. | ||||
| 	 * | ||||
| 	 * @param newName the chosen group name | ||||
| 	 * @return true if this name is already present | ||||
| 	 * @since Envoy Client v0.1-beta | ||||
| 	 */ | ||||
| 	public boolean groupNameAlreadyPresent(String newName) { | ||||
| 		return localDB.getChats() | ||||
| 			.stream() | ||||
| 			.map(Chat::getRecipient) | ||||
| 			.filter(Group.class::isInstance) | ||||
| 			.map(Contact::getName) | ||||
| 			.anyMatch(groupName -> groupName.equals(newName)); | ||||
| 	} | ||||
|  | ||||
| 	@FXML | ||||
| 	private void backButtonClicked() { sceneContext.pop(); } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 delvh
					delvh