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()));
}
});
}