package edu.ualberta.med.biobank.dialogs.user; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import edu.ualberta.med.biobank.SessionManager; import edu.ualberta.med.biobank.common.action.IdResult; import edu.ualberta.med.biobank.common.action.security.RoleSaveAction; import edu.ualberta.med.biobank.common.action.security.RoleSaveInput; import edu.ualberta.med.biobank.common.peer.RolePeer; import edu.ualberta.med.biobank.common.wrappers.RoleWrapper; import edu.ualberta.med.biobank.gui.common.validators.NonEmptyStringValidator; import edu.ualberta.med.biobank.gui.common.widgets.BgcBaseText; import edu.ualberta.med.biobank.model.PermissionEnum; import edu.ualberta.med.biobank.model.Role; import edu.ualberta.med.biobank.server.applicationservice.BiobankApplicationService; import edu.ualberta.med.biobank.widgets.trees.permission.PermissionCheckTreeWidget; import gov.nih.nci.system.applicationservice.ApplicationException; public class RoleEditDialog extends AbstractSecurityEditDialog { private final String currentTitle; private final String titleAreaMessage; private final RoleWrapper roleWrapper; private final Role role; private final Role originalRole; private PermissionCheckTreeWidget tree; public RoleEditDialog(Shell parent, Role role) { super(parent); BiobankApplicationService service = SessionManager.getAppService(); this.role = role; this.originalRole = new Role(); copyRole(role, originalRole); this.roleWrapper = new RoleWrapper(service, role); if (role.isNew()) { currentTitle = "Add Role"; titleAreaMessage = "Add a new role"; } else { currentTitle = "Edit Role"; titleAreaMessage = "Modify an existing role's information"; } } private static final void copyRole(Role src, Role dst) { dst.setName(dst.getName()); dst.getPermissions().addAll(src.getPermissions()); } @Override protected String getDialogShellTitle() { return currentTitle; } @Override protected String getTitleAreaMessage() { return titleAreaMessage; } @Override protected String getTitleAreaTitle() { return currentTitle; } @Override protected void createDialogAreaInternal(Composite parent) throws ApplicationException { Composite contents = new Composite(parent, SWT.NONE); contents.setLayout(new GridLayout(2, false)); contents.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); createBoundWidgetWithLabel(contents, BgcBaseText.class, SWT.BORDER, "Name", null, roleWrapper, RolePeer.NAME.getName(), new NonEmptyStringValidator( "A valid name is required.")); tree = new PermissionCheckTreeWidget(contents, true, PermissionEnum.valuesList()); tree.setSelections(role.getPermissions()); GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); gd.horizontalSpan = 2; tree.setLayoutData(gd); } @Override protected void okPressed() { try { role.getPermissions().addAll(tree.getCheckedElements()); IdResult result = SessionManager.getAppService().doAction( new RoleSaveAction(new RoleSaveInput(role))); role.setId(result.getId()); close(); } catch (Throwable t) { TmpUtil.displayException(t); } } @Override protected void cancelPressed() { copyRole(originalRole, role); super.cancelPressed(); } }