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

Java tutorial

Introduction

Here is the source code for org.roda.wui.client.common.lists.JobList.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.ArrayList;
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.jobs.Job;
import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell;
import org.roda.wui.client.common.lists.utils.TooltipTextColumn;
import org.roda.wui.client.common.utils.HtmlSnippetUtils;
import org.roda.wui.common.client.tools.Humanize;
import org.roda.wui.common.client.tools.Humanize.DHMSFormat;

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.SafeHtmlBuilder;
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 JobList extends BasicAsyncTableCell<Job> {

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

    private TooltipTextColumn<Job> nameColumn;
    private TextColumn<Job> usernameColumn;
    private Column<Job, Date> startDateColumn;
    private TextColumn<Job> durationColumn;
    private Column<Job, SafeHtml> statusColumn;
    private TextColumn<Job> progressColumn;
    private TextColumn<Job> objectsTotalCountColumn;
    private Column<Job, SafeHtml> objectsSuccessCountColumn;
    private Column<Job, SafeHtml> objectsFailureCountColumn;

    private static final List<String> fieldsToReturn = new ArrayList<>();

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

    public JobList(Filter filter, Facets facets, String summary, boolean selectable) {
        super(Job.class, filter, true, facets, summary, selectable, fieldsToReturn);
    }

    public JobList(Filter filter, Facets facets, String summary, boolean selectable, int pageSize,
            int incrementPage) {
        super(Job.class, filter, true, facets, summary, selectable, pageSize, incrementPage, fieldsToReturn);
    }

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

        nameColumn = new TooltipTextColumn<Job>() {

            @Override
            public String getValue(Job job) {
                return job != null ? job.getName() : null;
            }
        };

        usernameColumn = new TextColumn<Job>() {

            @Override
            public String getValue(Job job) {
                return job != null ? job.getUsername() : null;
            }
        };

        startDateColumn = new Column<Job, Date>(
                new DateCell(DateTimeFormat.getFormat(RodaConstants.DEFAULT_DATETIME_FORMAT))) {
            @Override
            public Date getValue(Job job) {
                return job != null ? job.getStartDate() : null;
            }
        };

        durationColumn = new TextColumn<Job>() {

            @Override
            public String getValue(Job job) {
                if (job == null) {
                    return null;
                }
                Date end = job.getEndDate() != null ? job.getEndDate() : getDate();
                return Humanize.durationInDHMS(job.getStartDate(), end, DHMSFormat.SHORT);
            }
        };

        statusColumn = new Column<Job, SafeHtml>(new SafeHtmlCell()) {
            @Override
            public SafeHtml getValue(Job job) {
                return HtmlSnippetUtils.getJobStateHtml(job);
            }
        };

        objectsTotalCountColumn = new TextColumn<Job>() {

            @Override
            public String getValue(Job job) {
                String ret = "";
                if (job != null && job.getJobStats().getSourceObjectsCount() > 0) {
                    ret = Integer.toString(job.getJobStats().getSourceObjectsCount());
                }
                return ret;
            }
        };

        objectsSuccessCountColumn = new Column<Job, SafeHtml>(new SafeHtmlCell()) {

            @Override
            public SafeHtml getValue(Job job) {
                SafeHtmlBuilder b = new SafeHtmlBuilder();
                if (job != null) {
                    b.append(job.getJobStats().getSourceObjectsProcessedWithSuccess() > 0
                            ? SafeHtmlUtils.fromSafeConstant("<span>")
                            : SafeHtmlUtils.fromSafeConstant("<span class='ingest-process-counter-0'>"));
                    b.append(job.getJobStats().getSourceObjectsProcessedWithSuccess());
                    b.append(SafeHtmlUtils.fromSafeConstant("</span>"));
                }
                return b.toSafeHtml();
            }
        };

        objectsFailureCountColumn = new Column<Job, SafeHtml>(new SafeHtmlCell()) {
            @Override
            public SafeHtml getValue(Job job) {
                SafeHtmlBuilder b = new SafeHtmlBuilder();
                if (job != null) {
                    b.append(SafeHtmlUtils.fromSafeConstant("<span"));
                    if (job.getJobStats().getSourceObjectsProcessedWithFailure() > 0) {
                        b.append(SafeHtmlUtils.fromSafeConstant(" class='ingest-process-failed-column'"));
                    } else {
                        b.append(SafeHtmlUtils.fromSafeConstant(" class='ingest-process-counter-0'"));
                    }
                    b.append(SafeHtmlUtils.fromSafeConstant(">"));
                    b.append(job.getJobStats().getSourceObjectsProcessedWithFailure());
                    b.append(SafeHtmlUtils.fromSafeConstant("</span>"));
                }
                return b.toSafeHtml();
            }
        };

        progressColumn = new TextColumn<Job>() {
            @Override
            public String getValue(Job job) {
                return job != null ? job.getJobStats().getCompletionPercentage() + "%" : null;
            }
        };

        nameColumn.setSortable(true);
        usernameColumn.setSortable(true);
        startDateColumn.setSortable(true);
        statusColumn.setSortable(true);
        objectsTotalCountColumn.setSortable(true);
        objectsSuccessCountColumn.setSortable(true);
        objectsFailureCountColumn.setSortable(true);
        progressColumn.setSortable(true);

        addColumn(nameColumn, messages.jobName(), true, false);
        addColumn(usernameColumn, messages.jobCreator(), true, false);
        addColumn(startDateColumn, messages.jobStartDate(), true, false, 11);
        addColumn(durationColumn, messages.jobDuration(), true, true, 6);
        addColumn(statusColumn, messages.jobStatus(), true, false, 7);
        addColumn(progressColumn, messages.jobProgress(), true, true, 5);
        addColumn(objectsTotalCountColumn, messages.jobTotalCountMessage(), true, true, 5);
        addColumn(objectsSuccessCountColumn, messages.jobSuccessCountMessage(), true, true, 6);
        addColumn(objectsFailureCountColumn, messages.jobFailureCountMessage(), true, true, 5);

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

    }

    @Override
    protected Sorter getSorter(ColumnSortList columnSortList) {
        Map<Column<Job, ?>, List<String>> columnSortingKeyMap = new HashMap<>();
        columnSortingKeyMap.put(nameColumn, Arrays.asList(RodaConstants.JOB_NAME));
        columnSortingKeyMap.put(startDateColumn, Arrays.asList(RodaConstants.JOB_START_DATE));
        columnSortingKeyMap.put(statusColumn, Arrays.asList(RodaConstants.JOB_STATE));
        columnSortingKeyMap.put(progressColumn, Arrays.asList(RodaConstants.JOB_COMPLETION_PERCENTAGE));
        columnSortingKeyMap.put(objectsTotalCountColumn, Arrays.asList(RodaConstants.JOB_SOURCE_OBJECTS_COUNT));
        columnSortingKeyMap.put(objectsSuccessCountColumn,
                Arrays.asList(RodaConstants.JOB_SOURCE_OBJECTS_PROCESSED_WITH_SUCCESS));
        columnSortingKeyMap.put(objectsFailureCountColumn,
                Arrays.asList(RodaConstants.JOB_SOURCE_OBJECTS_PROCESSED_WITH_FAILURE));
        columnSortingKeyMap.put(usernameColumn, Arrays.asList(RodaConstants.JOB_USERNAME));
        return createSorter(columnSortList, columnSortingKeyMap);
    }

}