package org.js.model.adaptation.ui; import java.util.Set; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.feature.model.utilities.WorkbenchUtil; import org.js.model.rbac.AccessControlModel; import org.js.model.rbac.Role; import org.js.model.rbac.edit.RBACLabelProvider; import org.js.model.workflow.util.AccessControlModelUtil; public class RemoveRoleDialog extends MessageDialog { private UserInputRemoveRole roleInput; private ComboViewer stakeholderGroup; private AccessControlModel accessControlModel; public RemoveRoleDialog() { super(WorkbenchUtil.getShell(), "Remove Stakeholder", null, "Remove a Stakeholder", MessageDialog.CONFIRM, new String[] { "Ok", "Cancel" }, 0); } public void setInput(UserInputRemoveRole roleInput) { this.roleInput = roleInput; } @Override protected Control createCustomArea(Composite parent) { Label stakeholerGroupComboLabel = new Label(parent, SWT.NONE); stakeholerGroupComboLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1)); stakeholerGroupComboLabel.setText("Removable Role"); stakeholderGroup = new ComboViewer(parent); stakeholderGroup.setLabelProvider(new RBACLabelProvider()); stakeholderGroup.setContentProvider(new DialogContentProvider()); Combo stakeholderGroupCombo = stakeholderGroup.getCombo(); stakeholderGroupCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); RoleInput roleInput = getRoleInput(); stakeholderGroup.setInput(roleInput); addComboSelectionListener(); return parent; } private void addComboSelectionListener() { stakeholderGroup.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { ISelection selection = event.getSelection(); if (selection instanceof StructuredSelection) { StructuredSelection structSelection = (StructuredSelection) selection; Object element = structSelection.getFirstElement(); if (element instanceof Role) { Role stakeholder = (Role) element; roleInput.setRole(stakeholder); enableOkButton(true); } } } }); } protected void enableOkButton(boolean enable) { Button okButton = getButton(IDialogConstants.OK_ID); okButton.setEnabled(enable); } private RoleInput getRoleInput() { RoleInput input = new RoleInput(); Set<Role> roles = AccessControlModelUtil.getConcreteRoles(accessControlModel); input.addRoles(roles); return input; } public void setAccessControlModel(AccessControlModel accessControlModel) { this.accessControlModel = accessControlModel; } }