/** * 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.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.ip.DIPFile; import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; import org.roda.wui.common.client.ClientLogger; import com.google.gwt.cell.client.SafeHtmlCell; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Style.Unit; 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.user.client.ui.Label; import config.i18n.client.ClientMessages; public class DIPFileList extends BasicAsyncTableCell<DIPFile> { private final ClientLogger logger = new ClientLogger(getClass().getName()); private static final ClientMessages messages = GWT.create(ClientMessages.class); private Column<DIPFile, SafeHtml> iconColumn; private TextColumn<DIPFile> idColumn; private static final List<String> fieldsToReturn = Arrays.asList(RodaConstants.INDEX_UUID, RodaConstants.DIPFILE_IS_DIRECTORY, RodaConstants.DIPFILE_ID, RodaConstants.DIPFILE_DIP_ID); public DIPFileList() { this(null, null, null, false); } public DIPFileList(Filter filter, Facets facets, String summary, boolean selectable) { super(DIPFile.class, filter, facets, summary, selectable, fieldsToReturn); } public DIPFileList(Filter filter, Facets facets, String summary, boolean selectable, int initialPageSize, int pageSizeIncrement) { super(DIPFile.class, filter, facets, summary, selectable, initialPageSize, pageSizeIncrement, fieldsToReturn); } @Override protected void configureDisplay(CellTable<DIPFile> display) { iconColumn = new Column<DIPFile, SafeHtml>(new SafeHtmlCell()) { @Override public SafeHtml getValue(DIPFile file) { if (file != null) { if (file.isDirectory()) { return SafeHtmlUtils.fromSafeConstant("<i class='fa fa-folder-o'></i>"); } else { return SafeHtmlUtils.fromSafeConstant("<i class='fa fa-file-o'></i>"); } } else { logger.error("Trying to display a NULL item"); } return null; } }; idColumn = new TextColumn<DIPFile>() { @Override public String getValue(DIPFile file) { return file != null ? file.getId() : null; } }; iconColumn.setSortable(true); idColumn.setSortable(true); addColumn(iconColumn, SafeHtmlUtils.fromSafeConstant("<i class='fa fa-files-o'></i>"), false, false, 2); display.addColumn(idColumn, messages.fileName()); Label emptyInfo = new Label(messages.noItemsToDisplay()); display.setEmptyTableWidget(emptyInfo); // define default sorting display.getColumnSortList().push(new ColumnSortInfo(idColumn, true)); display.setColumnWidth(iconColumn, 2.5, Unit.EM); addStyleName("my-collections-table"); emptyInfo.addStyleName("my-collections-empty-info"); } @Override protected Sorter getSorter(ColumnSortList columnSortList) { Map<Column<DIPFile, ?>, List<String>> columnSortingKeyMap = new HashMap<>(); // setting secondary sorter to title columnSortingKeyMap.put(iconColumn, Arrays.asList(RodaConstants.DIPFILE_IS_DIRECTORY)); columnSortingKeyMap.put(idColumn, Arrays.asList(RodaConstants.DIPFILE_ID)); return createSorter(columnSortList, columnSortingKeyMap); } }