/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE file at the root of the source * tree and available online at * * https://github.com/keeps/roda */ package org.roda.wui.client.common.lists; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.roda.core.data.common.RodaConstants; import org.roda.core.data.v2.index.facet.Facets; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.sort.Sorter; import org.roda.core.data.v2.notifications.Notification; import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; import org.roda.wui.client.common.utils.HtmlSnippetUtils; import org.roda.wui.client.common.utils.StringUtils; import com.google.gwt.cell.client.DateCell; import com.google.gwt.cell.client.SafeHtmlCell; import com.google.gwt.core.client.GWT; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.google.gwt.user.cellview.client.CellTable; import com.google.gwt.user.cellview.client.Column; import com.google.gwt.user.cellview.client.ColumnSortList; import com.google.gwt.user.cellview.client.ColumnSortList.ColumnSortInfo; import com.google.gwt.user.cellview.client.TextColumn; import com.google.gwt.view.client.ProvidesKey; import config.i18n.client.ClientMessages; public class NotificationList extends BasicAsyncTableCell<Notification> { private static final ClientMessages messages = GWT.create(ClientMessages.class); private TextColumn<Notification> fromUser; private TextColumn<Notification> recipientUsers; private Column<Notification, Date> sentOn; private TextColumn<Notification> subject; private Column<Notification, SafeHtml> acknowledged; private Column<Notification, SafeHtml> state; private static final List<String> fieldsToReturn = Arrays.asList(RodaConstants.INDEX_UUID, RodaConstants.NOTIFICATION_ID, RodaConstants.NOTIFICATION_FROM_USER, RodaConstants.NOTIFICATION_RECIPIENT_USERS, RodaConstants.NOTIFICATION_SENT_ON, RodaConstants.NOTIFICATION_SUBJECT, RodaConstants.NOTIFICATION_IS_ACKNOWLEDGED, RodaConstants.NOTIFICATION_STATE); public NotificationList() { this(null, null, null, false); } public NotificationList(Filter filter, Facets facets, String summary, boolean selectable) { super(Notification.class, filter, false, facets, summary, selectable, fieldsToReturn); } public NotificationList(Filter filter, Facets facets, String summary, boolean selectable, int pageSize, int incrementPage) { super(Notification.class, filter, false, facets, summary, selectable, pageSize, incrementPage, fieldsToReturn); } @Override protected void configureDisplay(CellTable<Notification> display) { fromUser = new TextColumn<Notification>() { @Override public String getValue(Notification notification) { return notification != null ? notification.getFromUser() : null; } }; recipientUsers = new TextColumn<Notification>() { @Override public String getValue(Notification notification) { return notification != null ? StringUtils.prettyPrint(notification.getRecipientUsers()) : null; } }; sentOn = new Column<Notification, Date>(new DateCell(DateTimeFormat.getFormat(PredefinedFormat.DATE_TIME_MEDIUM))) { @Override public Date getValue(Notification notification) { return notification != null ? notification.getSentOn() : null; } }; subject = new TextColumn<Notification>() { @Override public String getValue(Notification notification) { return notification != null ? notification.getSubject() : null; } }; acknowledged = new Column<Notification, SafeHtml>(new SafeHtmlCell()) { @Override public SafeHtml getValue(Notification notification) { SafeHtml ret = null; if (notification != null) { if (notification.isAcknowledged()) { ret = SafeHtmlUtils .fromSafeConstant("<span class='label-success'>" + messages.showMessageAcknowledged() + "</span>"); } else { ret = SafeHtmlUtils .fromSafeConstant("<span class='label-danger'>" + messages.showMessageNotAcknowledged() + "</span>"); } } return ret; } }; state = new Column<Notification, SafeHtml>(new SafeHtmlCell()) { @Override public SafeHtml getValue(Notification notification) { SafeHtml ret = null; if (notification != null) { ret = HtmlSnippetUtils.getNotificationStateHTML(notification.getState()); } return ret; } }; fromUser.setSortable(true); sentOn.setSortable(true); subject.setSortable(true); acknowledged.setSortable(true); state.setSortable(true); addColumn(fromUser, messages.notificationFrom(), true, false); addColumn(recipientUsers, messages.notificationTo(), true, false); addColumn(sentOn, messages.notificationSentOn(), true, false, 13); addColumn(subject, messages.notificationSubject(), true, false); addColumn(state, messages.notificationState(), true, false, 7); addColumn(acknowledged, messages.notificationAck(), true, false, 7); // default sorting display.getColumnSortList().push(new ColumnSortInfo(sentOn, false)); addStyleName("my-collections-table"); } @Override protected Sorter getSorter(ColumnSortList columnSortList) { Map<Column<Notification, ?>, List<String>> columnSortingKeyMap = new HashMap<>(); columnSortingKeyMap.put(fromUser, Arrays.asList(RodaConstants.NOTIFICATION_FROM_USER)); columnSortingKeyMap.put(recipientUsers, Arrays.asList(RodaConstants.NOTIFICATION_RECIPIENT_USERS)); columnSortingKeyMap.put(sentOn, Arrays.asList(RodaConstants.NOTIFICATION_SENT_ON)); columnSortingKeyMap.put(subject, Arrays.asList(RodaConstants.NOTIFICATION_SUBJECT)); columnSortingKeyMap.put(acknowledged, Arrays.asList(RodaConstants.NOTIFICATION_IS_ACKNOWLEDGED)); columnSortingKeyMap.put(state, Arrays.asList(RodaConstants.NOTIFICATION_STATE)); return createSorter(columnSortList, columnSortingKeyMap); } @Override protected ProvidesKey<Notification> getKeyProvider() { return new ProvidesKey<Notification>() { @Override public Object getKey(Notification item) { return item.getId(); } }; } }