/** * 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.risks.IndexedRisk; import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; import org.roda.wui.client.common.utils.HtmlSnippetUtils; 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.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.view.client.ProvidesKey; import config.i18n.client.ClientMessages; /** * * @author Luis Faria <lfaria@keep.pt> * */ public class RiskList extends BasicAsyncTableCell<IndexedRisk> { private Filter filter; private static ClientMessages messages = GWT.create(ClientMessages.class); private TextColumn<IndexedRisk> nameColumn; private Column<IndexedRisk, Date> identifiedOnColumn; private TextColumn<IndexedRisk> categoryColumn; private TextColumn<IndexedRisk> ownerColumn; private Column<IndexedRisk, SafeHtml> severityColumn; private TextColumn<IndexedRisk> incidenceCounterColumn; private TextColumn<IndexedRisk> notMitigatedIncidenceCounterColumn; private static final List<String> fieldsToReturn = Arrays.asList(RodaConstants.INDEX_UUID, RodaConstants.RISK_ID, RodaConstants.RISK_NAME, RodaConstants.RISK_IDENTIFIED_ON, RodaConstants.RISK_CATEGORY, RodaConstants.RISK_MITIGATION_OWNER, RodaConstants.RISK_CURRENT_SEVERITY_LEVEL, RodaConstants.RISK_INCIDENCES_COUNT, RodaConstants.RISK_UNMITIGATED_INCIDENCES_COUNT, RodaConstants.RISK_POST_MITIGATION_SEVERITY_LEVEL, RodaConstants.RISK_PRE_MITIGATION_SEVERITY_LEVEL); public RiskList() { this(null, null, null, false); } public RiskList(Filter filter, Facets facets, String summary, boolean selectable) { super(IndexedRisk.class, filter, facets, summary, selectable, fieldsToReturn); this.filter = filter; } public RiskList(Filter filter, Facets facets, String summary, boolean selectable, int pageSize, int incrementPage) { super(IndexedRisk.class, filter, facets, summary, selectable, pageSize, incrementPage, fieldsToReturn); this.filter = filter; } @Override protected void configureDisplay(CellTable<IndexedRisk> display) { nameColumn = new TextColumn<IndexedRisk>() { @Override public String getValue(IndexedRisk risk) { return risk != null ? risk.getName() : null; } }; identifiedOnColumn = new Column<IndexedRisk, Date>( new DateCell(DateTimeFormat.getFormat(PredefinedFormat.DATE_LONG))) { @Override public Date getValue(IndexedRisk risk) { return risk != null ? risk.getIdentifiedOn() : null; } }; categoryColumn = new TextColumn<IndexedRisk>() { @Override public String getValue(IndexedRisk risk) { return risk != null ? risk.getCategory() : null; } }; ownerColumn = new TextColumn<IndexedRisk>() { @Override public String getValue(IndexedRisk risk) { return risk != null ? risk.getMitigationOwner() : null; } }; severityColumn = new Column<IndexedRisk, SafeHtml>(new SafeHtmlCell()) { @Override public SafeHtml getValue(IndexedRisk risk) { SafeHtml ret = null; if (risk != null) { ret = HtmlSnippetUtils.getSeverityDefinition(risk.getCurrentSeverityLevel()); } return ret; } }; incidenceCounterColumn = new TextColumn<IndexedRisk>() { @Override public String getValue(IndexedRisk risk) { return Integer.toString(risk.getIncidencesCount()); } }; notMitigatedIncidenceCounterColumn = new TextColumn<IndexedRisk>() { @Override public String getValue(IndexedRisk risk) { return Integer.toString(risk.getUnmitigatedIncidencesCount()); } }; nameColumn.setSortable(true); identifiedOnColumn.setSortable(true); categoryColumn.setSortable(true); ownerColumn.setSortable(true); severityColumn.setSortable(true); incidenceCounterColumn.setSortable(true); notMitigatedIncidenceCounterColumn.setSortable(true); addColumn(nameColumn, messages.riskName(), false, false); addColumn(categoryColumn, messages.riskCategory(), false, false); addColumn(ownerColumn, messages.riskMitigationOwner(), false, false); addColumn(identifiedOnColumn, messages.riskIdentifiedOn(), false, false, 8); addColumn(severityColumn, messages.riskPostMitigationSeverity(), false, false, 7); addColumn(incidenceCounterColumn, messages.riskIncidences(), false, false, 6); addColumn(notMitigatedIncidenceCounterColumn, messages.riskNotMitigatedIncidences(), false, false, 6); // default sorting display.getColumnSortList().push(new ColumnSortInfo(severityColumn, false)); } @Override protected Sorter getSorter(ColumnSortList columnSortList) { Map<Column<IndexedRisk, ?>, List<String>> columnSortingKeyMap = new HashMap<>(); columnSortingKeyMap.put(nameColumn, Arrays.asList(RodaConstants.RISK_NAME)); columnSortingKeyMap.put(identifiedOnColumn, Arrays.asList(RodaConstants.RISK_IDENTIFIED_ON)); columnSortingKeyMap.put(categoryColumn, Arrays.asList(RodaConstants.RISK_CATEGORY)); columnSortingKeyMap.put(ownerColumn, Arrays.asList(RodaConstants.RISK_MITIGATION_OWNER)); columnSortingKeyMap.put(severityColumn, Arrays.asList(RodaConstants.RISK_CURRENT_SEVERITY_LEVEL)); columnSortingKeyMap.put(incidenceCounterColumn, Arrays.asList(RodaConstants.RISK_INCIDENCES_COUNT)); columnSortingKeyMap.put(notMitigatedIncidenceCounterColumn, Arrays.asList(RodaConstants.RISK_UNMITIGATED_INCIDENCES_COUNT)); return createSorter(columnSortList, columnSortingKeyMap); } @Override protected ProvidesKey<IndexedRisk> getKeyProvider() { return new ProvidesKey<IndexedRisk>() { @Override public Object getKey(IndexedRisk item) { return item.getId(); } }; } @Override public void setFilter(Filter filter) { if (filter == null) { super.setFilter(this.filter); } else { super.setFilter(filter); } refresh(); } }