org.roda.wui.client.common.lists.RepresentationList.java Source code

Java tutorial

Introduction

Here is the source code for org.roda.wui.client.common.lists.RepresentationList.java

Source

/**
 * 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.IndexedRepresentation;
import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell;
import org.roda.wui.common.client.ClientLogger;
import org.roda.wui.common.client.tools.DescriptionLevelUtils;
import org.roda.wui.common.client.tools.Humanize;

import com.google.gwt.cell.client.SafeHtmlCell;
import com.google.gwt.core.client.GWT;
import com.google.gwt.safehtml.shared.SafeHtml;
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 RepresentationList extends BasicAsyncTableCell<IndexedRepresentation> {

    private final ClientLogger LOGGER = new ClientLogger(getClass().getName());
    private static final ClientMessages messages = GWT.create(ClientMessages.class);

    private TextColumn<IndexedRepresentation> originalColumn;
    private Column<IndexedRepresentation, SafeHtml> typeColumn;
    private TextColumn<IndexedRepresentation> sizeInBytesColumn;
    private TextColumn<IndexedRepresentation> numberOfDataFilesColumn;

    private static final List<String> fieldsToReturn = Arrays.asList(RodaConstants.INDEX_UUID,
            RodaConstants.REPRESENTATION_ID, RodaConstants.REPRESENTATION_AIP_ID,
            RodaConstants.REPRESENTATION_ORIGINAL, RodaConstants.REPRESENTATION_TYPE,
            RodaConstants.REPRESENTATION_SIZE_IN_BYTES, RodaConstants.REPRESENTATION_NUMBER_OF_DATA_FILES);

    public RepresentationList() {
        this(null, false, null, null, false);
    }

    public RepresentationList(Filter filter, boolean justActive, Facets facets, String summary,
            boolean selectable) {
        super(IndexedRepresentation.class, filter, justActive, facets, summary, selectable, fieldsToReturn);
    }

    public RepresentationList(Filter filter, boolean justActive, Facets facets, String summary, boolean selectable,
            int initialPageSize, int pageSizeIncrement) {
        super(IndexedRepresentation.class, filter, justActive, facets, summary, selectable, initialPageSize,
                pageSizeIncrement, fieldsToReturn);
    }

    @Override
    protected void configureDisplay(CellTable<IndexedRepresentation> display) {

        originalColumn = new TextColumn<IndexedRepresentation>() {

            @Override
            public String getValue(IndexedRepresentation rep) {
                return rep != null ? rep.isOriginal() ? messages.originalRepresentation()
                        : messages.alternativeRepresentation() : null;
            }
        };

        typeColumn = new Column<IndexedRepresentation, SafeHtml>(new SafeHtmlCell()) {
            @Override
            public SafeHtml getValue(IndexedRepresentation rep) {
                SafeHtml ret;
                if (rep == null) {
                    LOGGER.error("Trying to display a NULL item");
                    ret = null;
                } else {
                    ret = DescriptionLevelUtils.getRepresentationTypeIcon(rep.getType(), true);
                }
                return ret;
            }
        };

        sizeInBytesColumn = new TextColumn<IndexedRepresentation>() {

            @Override
            public String getValue(IndexedRepresentation rep) {
                return rep != null ? Humanize.readableFileSize(rep.getSizeInBytes()) : null;
            }
        };

        numberOfDataFilesColumn = new TextColumn<IndexedRepresentation>() {

            @Override
            public String getValue(IndexedRepresentation rep) {
                return rep != null ? messages.numberOfFiles(rep.getNumberOfDataFiles()) : null;
            }
        };

        /* add sortable */
        originalColumn.setSortable(true);
        typeColumn.setSortable(true);
        sizeInBytesColumn.setSortable(true);
        numberOfDataFilesColumn.setSortable(true);

        display.addColumn(typeColumn, messages.representationType());
        display.addColumn(numberOfDataFilesColumn, messages.representationFiles());
        display.addColumn(sizeInBytesColumn, messages.representationSize());
        display.addColumn(originalColumn, messages.representationOriginal());

        Label emptyInfo = new Label(messages.noItemsToDisplay());
        display.setEmptyTableWidget(emptyInfo);

        originalColumn.setCellStyleNames("nowrap");
        typeColumn.setCellStyleNames("nowrap");
        sizeInBytesColumn.setCellStyleNames("nowrap");
        numberOfDataFilesColumn.setCellStyleNames("nowrap");

        // define default sorting
        display.getColumnSortList().push(new ColumnSortInfo(typeColumn, true));

        addStyleName("my-representation-table");
        emptyInfo.addStyleName("my-representation-empty-info");

    }

    @Override
    protected Sorter getSorter(ColumnSortList columnSortList) {
        Map<Column<IndexedRepresentation, ?>, List<String>> columnSortingKeyMap = new HashMap<>();
        columnSortingKeyMap.put(originalColumn, Arrays.asList(RodaConstants.REPRESENTATION_ORIGINAL));
        columnSortingKeyMap.put(typeColumn, Arrays.asList(RodaConstants.REPRESENTATION_TYPE));
        columnSortingKeyMap.put(sizeInBytesColumn, Arrays.asList(RodaConstants.REPRESENTATION_SIZE_IN_BYTES));
        columnSortingKeyMap.put(numberOfDataFilesColumn,
                Arrays.asList(RodaConstants.REPRESENTATION_NUMBER_OF_DATA_FILES));
        return createSorter(columnSortList, columnSortingKeyMap);
    }

}