public MessagesContactsPanel()

in openmeetings-web/src/main/java/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.java [139:476]


	public MessagesContactsPanel(String id) {
		super(id);
		notMoveFolder.setId(MOVE_CHOOSE);
		notMoveFolder.setFolderName(Application.getString("1243"));
		foldersModel.setObject(folderDao.getByUser(getUserId()));
		updateMoveModel();

		final NameDialog addFolder = new NameDialog("addFolder") {
			private static final long serialVersionUID = 1L;

			@Override
			protected void onSubmit(AjaxRequestTarget target) {
				super.onSubmit(target);
				folderDao.addPrivateMessageFolder(getModelObject(), getUserId());
				foldersModel.setObject(folderDao.getByUser(getUserId()));
				updateMoveModel();
				target.add(folders, moveDropDown);
			}
		};
		add(addFolder);
		folders.add(inbox.add(new AjaxEventBehavior(EVT_CLICK) {
			private static final long serialVersionUID = 1L;

			@Override
			protected void onEvent(AjaxRequestTarget target) {
				selectFolder(inbox, INBOX_FOLDER_ID, target);
			}
		}));
		folders.add(sent.add(new AjaxEventBehavior(EVT_CLICK) {
			private static final long serialVersionUID = 1L;

			@Override
			protected void onEvent(AjaxRequestTarget target) {
				selectFolder(sent, SENT_FOLDER_ID, target);
			}
		}));
		folders.add(trash.add(new AjaxEventBehavior(EVT_CLICK) {
			private static final long serialVersionUID = 1L;

			@Override
			protected void onEvent(AjaxRequestTarget target) {
				selectFolder(trash, TRASH_FOLDER_ID, target);
			}
		}));
		folders.add(new WebMarkupContainer("newdir").add(new AjaxEventBehavior(EVT_CLICK) {
			private static final long serialVersionUID = 1L;

			@Override
			protected void onEvent(AjaxRequestTarget target) {
				addFolder.show(target);
			}
		}));
		add(folders.add(new ListView<>("folder", foldersModel) {
			private static final long serialVersionUID = 1L;

			@Override
			protected void populateItem(final ListItem<PrivateMessageFolder> item) {
				item.add(new Label("name", item.getModelObject().getFolderName()).setRenderBodyOnly(true));
				BootstrapAjaxLink<String> del = new BootstrapAjaxLink<>("delete", Buttons.Type.Outline_Danger) {
					private static final long serialVersionUID = 1L;

					@Override
					public void onClick(AjaxRequestTarget target) {
						folderDao.delete(item.getModelObject(), getUserId());
						foldersModel.setObject(folderDao.getByUser(getUserId()));
						updateMoveModel();
						target.add(folders, moveDropDown);
					}
				};
				del.setIconType(FontAwesome6IconType.xmark_s)
						.add(newOkCancelDangerConfirm(this, getString("833")));
				item.add(del);
				item.add(AjaxEventBehavior.onEvent(EVT_CLICK, target -> selectFolder(item, item.getModelObject().getId(), target)));
				setFolderClass(item);
			}
		}).setOutputMarkupId(true));

		SearchableDataProvider<PrivateMessage> sdp = new SearchableDataProvider<>(PrivateMessageDao.class) {
			private static final long serialVersionUID = 1L;

			@Override
			protected PrivateMessageDao getDao() {
				return (PrivateMessageDao)super.getDao();
			}

			@Override
			public Iterator<? extends PrivateMessage> iterator(long first, long count) {
				allMessages.clear();
				readMessages.clear();
				unreadMessages.clear();
				String sort = getSort() == null ? "" : "m." + getSort().getProperty();
				boolean isAsc = getSort() == null || getSort().isAscending();
				return getDao().get(getUserId(), selectedFolderModel.getObject(), search, sort, isAsc, first, count).iterator();
			}

			@Override
			public long size() {
				return getDao().count(getUserId(), selectedFolderModel.getObject(), search);
			}
		};
		final SearchableDataView<PrivateMessage> dv = new SearchableDataView<>("messages", sdp) {
			private static final long serialVersionUID = 1L;

			@Override
			protected void populateItem(Item<PrivateMessage> item) {
				PrivateMessage m = item.getModelObject();
				final Long id = m.getId();
				allMessages.add(id);
				if (m.getIsRead()) {
					readMessages.add(id);
				} else {
					unreadMessages.add(id);
				}
				item.add(new Label("id", id));
				item.add(new Label("from", getDisplayName(m.getFrom())));
				item.add(new Label("subject", m.getSubject()));
				item.add(new Label("send", getDateFormat().format(m.getInserted())));
				item.add(AjaxEventBehavior.onEvent(EVT_CLICK, target -> {
					long selected = id;
					if (selectedMessages.contains(id)) {
						selectedMessages.remove(id);
						selected = selectedMessages.isEmpty() ? -1 : selectedMessages.iterator().next();
					} else {
						selectedMessages.add(id);
					}
					selectMessage(selected, target);
					target.add(container);
				}));
				StringBuilder cssClass = new StringBuilder(m.getIsRead() ? "" : CSS_UNREAD);
				if (selectedMessages.contains(id)) {
					cssClass.append(" selected");
				}
				item.add(AttributeModifier.replace(ATTR_CLASS, cssClass.toString()));
			}
		};
		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dv) {
			private static final long serialVersionUID = 1L;

			@Override
			protected void onEvent(AjaxRequestTarget target) {
				emptySelection(target);
				target.add(container);
			}
		};
		dataContainer = new DataViewContainer<>(container, dv, navigator);
		dataContainer.addLink(new OmOrderByBorder<>("orderById", "id", dataContainer))
			.addLink(new OmOrderByBorder<>("orderByFrom", "from.lastname", dataContainer))
			.addLink(new OmOrderByBorder<>("orderBySubject", "subject", dataContainer))
			.addLink(new OmOrderByBorder<>("orderBySend", "inserted", dataContainer));
		add(dataContainer.getLinks());
		add(navigator);

		add(unread.setOutputMarkupId(true));

		add(buttons.setOutputMarkupId(true));
		buttons.add(toInboxBtn.add(new AjaxEventBehavior(EVT_CLICK) {
				private static final long serialVersionUID = 1L;

				@Override
				protected void onEvent(AjaxRequestTarget target) {
					msgDao.moveMailsToFolder(selectedMessages, INBOX_FOLDER_ID);
					selectFolder(selectedFolder, selectedFolderModel.getObject(), target);
				}
			}));
		buttons.add(replyBtn.add(new AjaxEventBehavior(EVT_CLICK) {
				private static final long serialVersionUID = 1L;

				@Override
				protected void onEvent(AjaxRequestTarget target) {
					PrivateMessage opm = msgDao.get(lastSelected);
					if (opm != null) {
						MessageDialog newDlg = getMainPanel().getMessageDialog();
						PrivateMessage pm = newDlg.reset(true).getModelObject();
						pm.setTo(opm.getFrom());
						pm.setSubject(String.format("%s %s", getString("messages.subject.re"), opm.getSubject()));
						pm.setMessage(String.format("<br/><blockquote class=\"border-start quote\">%s</blockquote>", opm.getMessage()));
						newDlg.show(target);
					}
				}
			}));
		buttons.add(deleteBtn.add(new AjaxEventBehavior(EVT_CLICK) {
				private static final long serialVersionUID = 1L;

				@Override
				protected void onEvent(AjaxRequestTarget target) {
					if (TRASH_FOLDER_ID.equals(selectedFolderModel.getObject())) {
						msgDao.delete(selectedMessages);
					} else {
						msgDao.moveMailsToFolder(selectedMessages, TRASH_FOLDER_ID);
					}
					emptySelection(target);
					target.add(container);
				}
			}));
		buttons.add(readBtn.add(new AjaxEventBehavior(EVT_CLICK) {
				private static final long serialVersionUID = 1L;

				@Override
				protected void onEvent(AjaxRequestTarget target) {
					msgDao.updateReadStatus(selectedMessages, true);
					emptySelection(target);
					target.add(container, unread);
				}
			}));
		buttons.add(unreadBtn.add(new AjaxEventBehavior(EVT_CLICK) {
				private static final long serialVersionUID = 1L;

				@Override
				protected void onEvent(AjaxRequestTarget target) {
					msgDao.updateReadStatus(selectedMessages, false);
					emptySelection(target);
					target.add(container);
				}
			}));
		buttons.add(selectDropDown.setOutputMarkupId(true).add(new OnChangeAjaxBehavior() {
			private static final long serialVersionUID = 1L;

			@Override
			protected void onUpdate(AjaxRequestTarget target) {
				switch (selectDropDown.getModelObject()) {
					case SELECT_CHOOSE:
						break;
					case SELECT_ALL:
						selectedMessages.clear();
						selectedMessages.addAll(allMessages);
						break;
					case SELECT_NONE:
						selectedMessages.clear();
						break;
					case SELECT_UNREAD:
						selectedMessages.clear();
						selectedMessages.addAll(unreadMessages);
						break;
					case SELECT_READ:
						selectedMessages.clear();
						selectedMessages.addAll(readMessages);
						break;
					default:
						break;
				}
				target.add(container);
			}
		}));
		buttons.add(moveDropDown.setOutputMarkupId(true).add(new OnChangeAjaxBehavior() {
			private static final long serialVersionUID = 1L;

			@Override
			protected void onUpdate(AjaxRequestTarget target) {
				Long folderId = moveDropDown.getModelObject().getId();
				if (!MOVE_CHOOSE.equals(folderId)) {
					msgDao.moveMailsToFolder(selectedMessages, folderId);
				}
				selectFolder(selectedFolder, selectedFolderModel.getObject(), target);
			}
		}));

		selectMessage(-1, null);
		add(container.add(dv).setOutputMarkupId(true));
		add(selectedMessage.add(roomContainer.setVisible(false)).setOutputMarkupId(true));

		IDataProvider<UserContact> dp = new IDataProvider<>() {
			private static final long serialVersionUID = 1L;

			@Override
			public Iterator<? extends UserContact> iterator(long first, long count) {
				return contactDao.get(getUserId(), first, count).iterator();
			}

			@Override
			public long size() {
				return contactDao.count(getUserId());
			}

			@Override
			public IModel<UserContact> model(UserContact object) {
				return Model.of(object);
			}
		};
		final DataView<UserContact> dw = new DataView<>("users", dp) {
			private static final long serialVersionUID = 1L;

			private String getName(UserContact uc) {
				return uc.getOwner().getDisplayName();
			}

			@Override
			protected void populateItem(Item<UserContact> item) {
				UserContact uc = item.getModelObject();
				final Long contactId = uc.getId();
				final Long userId = uc.getOwner().getId();
				if (uc.isPending()) {
					item.add(AttributeModifier.append(ATTR_CLASS, CSS_UNREAD));
				}
				item.add(new Label("name", getName(uc)));
				item.add(new WebMarkupContainer("accept").add(AjaxEventBehavior.onEvent(EVT_CLICK, target -> {
					ContactsHelper.acceptUserContact(contactId);
					updateContacts(target);
				})).setVisible(uc.isPending()));
				item.add(new WebMarkupContainer("decline").add(AjaxEventBehavior.onEvent(EVT_CLICK, target -> {
					contactDao.delete(contactId);
					updateContacts(target);
				})).setVisible(uc.isPending()));
				item.add(new WebMarkupContainer("view").add(AttributeModifier.append("data-user-id", userId)));
				item.add(new WebMarkupContainer("message").add(AttributeModifier.append("data-user-id", userId)).setVisible(!uc.isPending()));
				BootstrapAjaxLink<String> del = new BootstrapAjaxLink<>("delete", Buttons.Type.Outline_Danger) {
					private static final long serialVersionUID = 1L;

					@Override
					public void onClick(AjaxRequestTarget target) {
						contactDao.delete(contactId);
						updateContacts(target);
					}
				};
				del.setIconType(FontAwesome6IconType.xmark_s)
						.add(newOkCancelDangerConfirm(this, getString("833")));
				item.add(del.setVisible(!uc.isPending()));
			}
		};
		updateContacts(null);
		add(contacts.add(dw, pendingContacts, allContacts).setOutputMarkupId(true));

		//hack to add FixedHeaderTable after Tabs.
		add(new AbstractDefaultAjaxBehavior() {
			private static final long serialVersionUID = 1L;

			@Override
			protected void respond(AjaxRequestTarget target) {
				selectFolder(inbox, INBOX_FOLDER_ID, target);
				selectMessage(-1, target);
			}

			@Override
			public void renderHead(Component component, IHeaderResponse response) {
				super.renderHead(component, response);
				response.render(OnDomReadyHeaderItem.forScript(getCallbackScript()));
			}
		});
	}