/**
* 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.RiskIncidence;
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 config.i18n.client.ClientMessages;
public class RiskIncidenceList extends BasicAsyncTableCell<RiskIncidence> {
private static final ClientMessages messages = GWT.create(ClientMessages.class);
private TextColumn<RiskIncidence> objectColumn;
private TextColumn<RiskIncidence> objectTypeColumn;
private TextColumn<RiskIncidence> riskColumn;
private Column<RiskIncidence, Date> detectedOnColumn;
private TextColumn<RiskIncidence> detectedByColumn;
private Column<RiskIncidence, SafeHtml> statusColumn;
private static final List<String> fieldsToReturn = Arrays.asList(RodaConstants.INDEX_UUID,
RodaConstants.RISK_INCIDENCE_ID, RodaConstants.RISK_INCIDENCE_AIP_ID,
RodaConstants.RISK_INCIDENCE_REPRESENTATION_ID, RodaConstants.RISK_INCIDENCE_FILE_ID,
RodaConstants.RISK_INCIDENCE_OBJECT_CLASS, RodaConstants.RISK_INCIDENCE_RISK_ID,
RodaConstants.RISK_INCIDENCE_DETECTED_ON, RodaConstants.RISK_INCIDENCE_DETECTED_BY,
RodaConstants.RISK_INCIDENCE_STATUS);
public RiskIncidenceList(Filter filter, Facets facets, String summary, boolean selectable) {
super(RiskIncidence.class, filter, true, facets, summary, selectable, fieldsToReturn);
}
public RiskIncidenceList(Filter filter, Facets facets, String summary, boolean selectable, int initialPageSize,
int pageSizeIncrement) {
super(RiskIncidence.class, filter, true, facets, summary, selectable, initialPageSize, pageSizeIncrement,
fieldsToReturn);
}
@Override
protected void configureDisplay(CellTable<RiskIncidence> display) {
objectColumn = new TextColumn<RiskIncidence>() {
@Override
public String getValue(RiskIncidence incidence) {
if (incidence != null) {
if (incidence.getFileId() != null) {
return incidence.getFileId();
} else if (incidence.getRepresentationId() != null) {
return incidence.getRepresentationId();
} else if (incidence.getAipId() != null) {
return incidence.getAipId();
}
}
return null;
}
};
objectTypeColumn = new TextColumn<RiskIncidence>() {
@Override
public String getValue(RiskIncidence incidence) {
return incidence != null ? incidence.getObjectClass() : null;
}
};
riskColumn = new TextColumn<RiskIncidence>() {
@Override
public String getValue(RiskIncidence incidence) {
return incidence.getRiskId();
}
};
detectedOnColumn = new Column<RiskIncidence, Date>(
new DateCell(DateTimeFormat.getFormat(PredefinedFormat.DATE_LONG))) {
@Override
public Date getValue(RiskIncidence incidence) {
return incidence != null ? incidence.getDetectedOn() : null;
}
};
detectedByColumn = new TextColumn<RiskIncidence>() {
@Override
public String getValue(RiskIncidence incidence) {
return incidence != null ? incidence.getDetectedBy() : null;
}
};
statusColumn = new Column<RiskIncidence, SafeHtml>(new SafeHtmlCell()) {
@Override
public SafeHtml getValue(RiskIncidence incidence) {
SafeHtml ret = null;
if (incidence != null) {
ret = HtmlSnippetUtils.getStatusDefinition(incidence.getStatus());
}
return ret;
}
};
objectColumn.setSortable(true);
objectTypeColumn.setSortable(true);
riskColumn.setSortable(true);
detectedOnColumn.setSortable(true);
detectedByColumn.setSortable(true);
statusColumn.setSortable(true);
addColumn(objectColumn, messages.riskIncidenceObjectId(), false, false);
addColumn(riskColumn, messages.riskIncidenceRisk(), false, false);
addColumn(detectedOnColumn, messages.riskIncidenceDetectedOn(), false, false);
addColumn(detectedByColumn, messages.riskIncidenceDetectedBy(), false, false);
addColumn(statusColumn, messages.riskIncidenceStatus(), false, false, 7);
addColumn(objectTypeColumn, messages.riskIncidenceObjectType(), true, true, 8);
// define default sorting
display.getColumnSortList().push(new ColumnSortInfo(objectTypeColumn, true));
addStyleName("my-collections-table");
}
@Override
protected Sorter getSorter(ColumnSortList columnSortList) {
Map<Column<RiskIncidence, ?>, List<String>> columnSortingKeyMap = new HashMap<>();
columnSortingKeyMap.put(objectColumn, Arrays.asList(RodaConstants.RISK_INCIDENCE_AIP_ID,
RodaConstants.RISK_INCIDENCE_REPRESENTATION_ID, RodaConstants.RISK_INCIDENCE_FILE_ID));
columnSortingKeyMap.put(riskColumn, Arrays.asList(RodaConstants.RISK_INCIDENCE_RISK_ID));
columnSortingKeyMap.put(detectedOnColumn, Arrays.asList(RodaConstants.RISK_INCIDENCE_DETECTED_ON));
columnSortingKeyMap.put(detectedByColumn, Arrays.asList(RodaConstants.RISK_INCIDENCE_DETECTED_BY));
columnSortingKeyMap.put(statusColumn, Arrays.asList(RodaConstants.RISK_INCIDENCE_STATUS));
columnSortingKeyMap.put(objectTypeColumn, Arrays.asList(RodaConstants.RISK_INCIDENCE_OBJECT_CLASS));
return createSorter(columnSortList, columnSortingKeyMap);
}
}