/** * 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.log.LogEntry; 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 org.roda.wui.common.client.tools.Humanize; 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 config.i18n.client.ClientMessages; public class LogEntryList extends BasicAsyncTableCell<LogEntry> { private static final ClientMessages messages = GWT.create(ClientMessages.class); private Column<LogEntry, Date> dateColumn; private Column<LogEntry, SafeHtml> actionComponentColumn; private TextColumn<LogEntry> actionMethodColumn; private TextColumn<LogEntry> usernameColumn; private TextColumn<LogEntry> durationColumn; private TextColumn<LogEntry> addressColumn; private Column<LogEntry, SafeHtml> stateColumn; private static final List<String> fieldsToReturn = Arrays.asList(RodaConstants.INDEX_UUID, RodaConstants.LOG_ID, RodaConstants.LOG_DATETIME, RodaConstants.LOG_ACTION_COMPONENT, RodaConstants.LOG_ACTION_METHOD, RodaConstants.LOG_USERNAME, RodaConstants.LOG_DURATION, RodaConstants.LOG_ADDRESS, RodaConstants.LOG_STATE); public LogEntryList() { this(null, null, null, false); } public LogEntryList(Filter filter, Facets facets, String summary, boolean selectable) { super(LogEntry.class, filter, facets, summary, selectable, fieldsToReturn); } public LogEntryList(Filter filter, Facets facets, String summary, boolean selectable, int pageSize, int incrementPage) { super(LogEntry.class, filter, facets, summary, selectable, pageSize, incrementPage, fieldsToReturn); } @Override protected void configureDisplay(CellTable<LogEntry> display) { dateColumn = new Column<LogEntry, Date>(new DateCell(DateTimeFormat.getFormat(PredefinedFormat.DATE_TIME_MEDIUM))) { @Override public Date getValue(LogEntry logEntry) { return logEntry != null ? logEntry.getDatetime() : null; } }; actionComponentColumn = new Column<LogEntry, SafeHtml>(new SafeHtmlCell()) { @Override public SafeHtml getValue(LogEntry entry) { return SafeHtmlUtils .fromSafeConstant(translate(RodaConstants.LOG_ACTION_COMPONENT, entry.getActionComponent())); } }; actionMethodColumn = new TextColumn<LogEntry>() { @Override public String getValue(LogEntry logEntry) { if (logEntry == null) { return null; } return StringUtils.getPrettifiedActionMethod(logEntry.getActionMethod()); } }; usernameColumn = new TextColumn<LogEntry>() { @Override public String getValue(LogEntry logEntry) { return logEntry != null ? logEntry.getUsername() : null; } }; durationColumn = new TextColumn<LogEntry>() { @Override public String getValue(LogEntry logEntry) { return logEntry != null ? Humanize.durationMillisToShortDHMS(logEntry.getDuration()) : null; } }; addressColumn = new TextColumn<LogEntry>() { @Override public String getValue(LogEntry logEntry) { return logEntry != null ? logEntry.getAddress() : null; } }; stateColumn = new Column<LogEntry, SafeHtml>(new SafeHtmlCell()) { @Override public SafeHtml getValue(LogEntry logEntry) { return HtmlSnippetUtils.getLogEntryStateHtml(logEntry.getState()); } }; dateColumn.setSortable(true); actionComponentColumn.setSortable(true); actionMethodColumn.setSortable(true); usernameColumn.setSortable(true); durationColumn.setSortable(true); addressColumn.setSortable(true); stateColumn.setSortable(true); addColumn(dateColumn, messages.logEntryDatetimeExtended(), true, false, 14); addColumn(actionComponentColumn, messages.logEntryComponent(), true, false); addColumn(actionMethodColumn, messages.logEntryMethod(), true, false); addColumn(usernameColumn, messages.logEntryUser(), true, false); addColumn(durationColumn, messages.logEntryDuration(), true, true, 5); addColumn(addressColumn, messages.logEntryAddress(), true, false); addColumn(stateColumn, messages.logEntryState(), true, false); // default sorting display.getColumnSortList().push(new ColumnSortInfo(dateColumn, false)); addStyleName("my-collections-table"); } @Override protected Sorter getSorter(ColumnSortList columnSortList) { Map<Column<LogEntry, ?>, List<String>> columnSortingKeyMap = new HashMap<>(); columnSortingKeyMap.put(dateColumn, Arrays.asList(RodaConstants.LOG_DATETIME)); columnSortingKeyMap.put(actionComponentColumn, Arrays.asList(RodaConstants.LOG_ACTION_COMPONENT)); columnSortingKeyMap.put(actionMethodColumn, Arrays.asList(RodaConstants.LOG_ACTION_METHOD)); columnSortingKeyMap.put(usernameColumn, Arrays.asList(RodaConstants.LOG_USERNAME)); columnSortingKeyMap.put(durationColumn, Arrays.asList(RodaConstants.LOG_DURATION)); columnSortingKeyMap.put(addressColumn, Arrays.asList(RodaConstants.LOG_ADDRESS)); columnSortingKeyMap.put(stateColumn, Arrays.asList(RodaConstants.LOG_STATE)); return createSorter(columnSortList, columnSortingKeyMap); } }