package edu.ualberta.med.biobank.dialogs.user;
import java.text.MessageFormat;
import java.util.List;
import org.eclipse.core.runtime.Status;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.PlatformUI;
import edu.ualberta.med.biobank.gui.common.BgcPlugin;
import edu.ualberta.med.biobank.gui.common.dialogs.BgcDialogPage;
import edu.ualberta.med.biobank.gui.common.dialogs.BgcDialogWithPages;
import edu.ualberta.med.biobank.gui.common.widgets.utils.TableFilter;
import edu.ualberta.med.biobank.model.Role;
import edu.ualberta.med.biobank.widgets.infotables.RoleInfoTable;
import gov.nih.nci.system.applicationservice.ApplicationException;
public abstract class RolesPage extends BgcDialogPage {
private RoleInfoTable roleInfoTable;
public RolesPage(BgcDialogWithPages dialog) {
super(dialog);
}
@Override
public String getTitle() {
return "Roles";
}
@Override
public void createControl(Composite parent) {
Composite content = new Composite(parent, SWT.NONE);
content.setLayout(new GridLayout(1, false));
new TableFilter<Role>(content) {
@Override
protected boolean accept(Role role, String text) {
return contains(role.getName(), text);
}
@Override
public List<Role> getAllCollection() {
return getCurrentAllRolesList();
}
@Override
public void setFilteredList(List<Role> filteredObjects) {
roleInfoTable.setList(filteredObjects);
}
};
roleInfoTable = new RoleInfoTable(content, null) {
@Override
protected boolean deleteRole(Role role) {
boolean deleted = super.deleteRole(role);
if (deleted) getCurrentAllRolesList().remove(role);
return deleted;
}
@Override
protected void duplicate(Role src) {
Role newRole = new Role();
newRole.setName("Copy of " + src.getName());
newRole.getPermissions().addAll(src.getPermissions());
addRole(newRole);
}
@Override
protected Boolean canEdit(Role target) throws ApplicationException {
return true;
}
@Override
protected Boolean canDelete(Role target)
throws ApplicationException {
return true;
}
@Override
protected Boolean canView(Role target) throws ApplicationException {
return true;
}
};
roleInfoTable.setList(getCurrentAllRolesList());
setControl(content);
}
protected abstract List<Role> getCurrentAllRolesList();
@Override
public void runAddAction() {
addRole(new Role());
}
protected void addRole(Role role) {
RoleEditDialog dlg = new RoleEditDialog(PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getShell(), role);
int res = dlg.open();
if (res == Status.OK) {
BgcPlugin.openAsyncInformation(
"Role added",
MessageFormat.format("Successfully added new role {0}",
role.getName()));
getCurrentAllRolesList().add(role);
roleInfoTable.reload();
roleInfoTable.setSelection(role);
}
}
}