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

Java tutorial

Introduction

Here is the source code for org.roda.wui.client.common.lists.PreservationEventList.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.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.ip.metadata.IndexedPreservationEvent;
import org.roda.core.data.v2.jobs.Report.PluginState;
import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell;

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.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;

/**
 * 
 * @author Luis Faria <lfaria@keep.pt>
 *
 */
public class PreservationEventList extends BasicAsyncTableCell<IndexedPreservationEvent> {

    private static final ClientMessages messages = GWT.create(ClientMessages.class);

    private Column<IndexedPreservationEvent, Date> eventDateTimeColumn;
    private TextColumn<IndexedPreservationEvent> eventTypeColumn;
    private TextColumn<IndexedPreservationEvent> eventDetailColumn;
    private Column<IndexedPreservationEvent, SafeHtml> eventOutcomeColumn;

    private static final List<String> fieldsToReturn = Arrays.asList(RodaConstants.INDEX_UUID,
            RodaConstants.PRESERVATION_EVENT_ID, RodaConstants.PRESERVATION_EVENT_DATETIME,
            RodaConstants.PRESERVATION_EVENT_TYPE, RodaConstants.PRESERVATION_EVENT_DETAIL,
            RodaConstants.PRESERVATION_EVENT_OUTCOME);

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

    public PreservationEventList(Filter filter, Facets facets, String summary, boolean selectable) {
        super(IndexedPreservationEvent.class, filter, facets, summary, selectable, fieldsToReturn);
    }

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

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

        eventDateTimeColumn = new Column<IndexedPreservationEvent, Date>(
                new DateCell(DateTimeFormat.getFormat(RodaConstants.DEFAULT_DATETIME_FORMAT))) {
            @Override
            public Date getValue(IndexedPreservationEvent event) {
                return event != null ? event.getEventDateTime() : null;
            }
        };

        eventTypeColumn = new TextColumn<IndexedPreservationEvent>() {
            @Override
            public String getValue(IndexedPreservationEvent event) {
                return event != null ? event.getEventType() : null;
            }
        };

        eventDetailColumn = new TextColumn<IndexedPreservationEvent>() {
            @Override
            public String getValue(IndexedPreservationEvent event) {
                return event != null ? event.getEventDetail() : null;
            }
        };

        eventOutcomeColumn = new Column<IndexedPreservationEvent, SafeHtml>(new SafeHtmlCell()) {
            @Override
            public SafeHtml getValue(IndexedPreservationEvent event) {
                SafeHtml ret = null;
                if (event != null) {
                    PluginState outcome = PluginState.valueOf(event.getEventOutcome());
                    if (PluginState.SUCCESS.equals(outcome)) {
                        ret = SafeHtmlUtils.fromSafeConstant(
                                "<span class='label-success'>" + messages.pluginStateMessage(outcome) + "</span>");
                    } else if (PluginState.FAILURE.equals(outcome)) {
                        ret = SafeHtmlUtils.fromSafeConstant(
                                "<span class='label-danger'>" + messages.pluginStateMessage(outcome) + "</span>");
                    } else {
                        ret = SafeHtmlUtils.fromSafeConstant(
                                "<span class='label-warning'>" + messages.pluginStateMessage(outcome) + "</span>");
                    }
                }
                return ret;
            }
        };

        eventDateTimeColumn.setSortable(true);
        eventTypeColumn.setSortable(true);
        eventDetailColumn.setSortable(true);
        eventOutcomeColumn.setSortable(true);

        addColumn(eventDateTimeColumn, messages.preservationEventListHeaderDate(), true, false, 11);
        addColumn(eventTypeColumn, messages.preservationEventListHeaderType(), false, false, 13);
        addColumn(eventDetailColumn, messages.preservationEventListHeaderDetail(), false, false);
        addColumn(eventOutcomeColumn, messages.preservationEventListHeaderOutcome(), true, false, 9);

        // default sorting
        display.getColumnSortList().push(new ColumnSortInfo(eventDateTimeColumn, false));
    }

    @Override
    protected Sorter getSorter(ColumnSortList columnSortList) {
        Map<Column<IndexedPreservationEvent, ?>, List<String>> columnSortingKeyMap = new HashMap<>();
        columnSortingKeyMap.put(eventDateTimeColumn, Arrays.asList(RodaConstants.PRESERVATION_EVENT_DATETIME));
        columnSortingKeyMap.put(eventTypeColumn, Arrays.asList(RodaConstants.PRESERVATION_EVENT_TYPE));
        columnSortingKeyMap.put(eventDetailColumn, Arrays.asList(RodaConstants.PRESERVATION_EVENT_DETAIL));
        columnSortingKeyMap.put(eventOutcomeColumn, Arrays.asList(RodaConstants.PRESERVATION_EVENT_OUTCOME));
        return createSorter(columnSortList, columnSortingKeyMap);
    }

}