/** * 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.user.RODAMember; import org.roda.core.data.v2.user.User; import org.roda.wui.client.common.lists.utils.BasicAsyncTableCell; import org.roda.wui.client.common.utils.StringUtils; import org.roda.wui.common.client.ClientLogger; 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.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.TextColumn; import config.i18n.client.ClientMessages; public class RodaMemberList extends BasicAsyncTableCell<RODAMember> { @SuppressWarnings("unused") private final ClientLogger logger = new ClientLogger(getClass().getName()); private static final ClientMessages messages = GWT.create(ClientMessages.class); private Column<RODAMember, SafeHtml> activeColumn; private Column<RODAMember, SafeHtml> typeColumn; private TextColumn<RODAMember> nameColumn; private TextColumn<RODAMember> fullNameColumn; private TextColumn<RODAMember> groupsColumn; private static final List<String> fieldsToReturn = Arrays.asList(RodaConstants.INDEX_UUID, RodaConstants.MEMBERS_ID, RodaConstants.MEMBERS_IS_USER, RodaConstants.MEMBERS_NAME, RodaConstants.MEMBERS_FULLNAME, RodaConstants.MEMBERS_GROUPS, RodaConstants.MEMBERS_IS_ACTIVE); public RodaMemberList() { this(null, null, null, false); } public RodaMemberList(Filter filter, Facets facets, String summary, boolean selectable) { super(RODAMember.class, filter, facets, summary, selectable, fieldsToReturn); } public RodaMemberList(Filter filter, Facets facets, String summary, boolean selectable, int pageSize, int incrementPage) { super(RODAMember.class, filter, facets, summary, selectable, pageSize, incrementPage, fieldsToReturn); } @Override protected void configureDisplay(CellTable<RODAMember> display) { typeColumn = new Column<RODAMember, SafeHtml>(new SafeHtmlCell()) { @Override public SafeHtml getValue(RODAMember member) { return SafeHtmlUtils.fromSafeConstant( member != null ? (member.isUser() ? "<i class='fa fa-user'></i>" : "<i class='fa fa-users'></i>") : ""); } }; nameColumn = new TextColumn<RODAMember>() { @Override public String getValue(RODAMember member) { return member != null ? member.getName() : null; } }; fullNameColumn = new TextColumn<RODAMember>() { @Override public String getValue(RODAMember member) { return member != null ? member.getFullName() : null; } }; groupsColumn = new TextColumn<RODAMember>() { @Override public String getValue(RODAMember member) { if (member instanceof User) { User user = (User) member; return StringUtils.prettyPrint(user.getGroups()); } else { return null; } } }; activeColumn = new Column<RODAMember, SafeHtml>(new SafeHtmlCell()) { @Override public SafeHtml getValue(RODAMember member) { return SafeHtmlUtils.fromSafeConstant(member != null ? (member.isActive() ? "<i class='fa fa-check-circle'></i>" : "<i class='fa fa-ban'></i>") : ""); } }; typeColumn.setSortable(true); nameColumn.setSortable(true); fullNameColumn.setSortable(true); activeColumn.setSortable(true); addColumn(typeColumn, SafeHtmlUtils.fromSafeConstant("<i class='fa fa-user'></i>"), false, false, 3); addColumn(nameColumn, messages.userIdentifier(), true, false); addColumn(fullNameColumn, messages.userFullName(), true, false); addColumn(groupsColumn, messages.userGroups(), true, false); addColumn(activeColumn, SafeHtmlUtils.fromSafeConstant("<i class='fa fa-check-circle'></i>"), false, false, 2); addStyleName("my-list-rodamember"); } @Override protected Sorter getSorter(ColumnSortList columnSortList) { Map<Column<RODAMember, ?>, List<String>> columnSortingKeyMap = new HashMap<>(); columnSortingKeyMap.put(activeColumn, Arrays.asList(RodaConstants.MEMBERS_IS_ACTIVE)); columnSortingKeyMap.put(typeColumn, Arrays.asList(RodaConstants.MEMBERS_IS_USER)); columnSortingKeyMap.put(nameColumn, Arrays.asList(RodaConstants.MEMBERS_NAME)); columnSortingKeyMap.put(fullNameColumn, Arrays.asList(RodaConstants.MEMBERS_FULLNAME)); return createSorter(columnSortList, columnSortingKeyMap); } }