package org.eclipse.emf.emfstore.client.ui.views.emfstorebrowser.dialogs.admin; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.eclipse.emf.emfstore.server.model.accesscontrol.ACOrgUnit; import org.eclipse.emf.emfstore.server.model.accesscontrol.ACUser; import org.eclipse.emf.emfstore.server.model.accesscontrol.Role; import org.eclipse.emf.emfstore.server.model.accesscontrol.RoleAssignment; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.TreePath; import org.eclipse.jface.viewers.TreeViewerColumn; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.swt.widgets.Widget; import org.eclipse.ui.dialogs.ContainerCheckedTreeViewer; import org.eclipse.ui.model.WorkbenchLabelProvider; public class SelectRolesPage extends WizardPage { private class TreeContentProvider implements ITreeContentProvider { public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } public void dispose() { } public Object[] getElements(Object inputElement) { return getChildren(inputElement); } public Object[] getChildren(Object parentElement) { if (parentElement instanceof ACUser) { List<RoleBox> boxes = new ArrayList<RoleBox>(); for (Role role : wizard.getPermissionSet().getProjectRoles()) { boxes.add(new RoleBox(role)); } return boxes.toArray(); } if (parentElement instanceof Collection<?>) { Collection<?> collection = (Collection<?>) parentElement; return collection.toArray(); } return new Object[] {}; } public Object getParent(Object element) { return null; } public boolean hasChildren(Object element) { return getChildren(element).length > 0; } } private AssignRolesWizard wizard; private ContainerCheckedTreeViewer treeViewer; /** * Create the wizard. * * @param assignRolesWizard */ public SelectRolesPage(Shell parentShell, AssignRolesWizard assignRolesWizard) { super(""); setTitle("Select Roles"); this.wizard = assignRolesWizard; setDescription("Select roles which the users should have in project " + assignRolesWizard.getProjectInfo().getName()); } /** * Create contents of the wizard. * * @param parent */ public void createControl(Composite parent) { Composite container = new Composite(parent, SWT.NULL); container.setLayout(new FillLayout(SWT.HORIZONTAL)); treeViewer = new ContainerCheckedTreeViewer(container, SWT.BORDER) { @Override public boolean getChecked(Object element) { if (element instanceof TreePath) { Widget widget = internalGetWidgetToSelect(element); if (widget instanceof TreeItem) { boolean checked = ((TreeItem) widget).getChecked(); return checked; } } return super.getChecked(element); } }; Tree tree = treeViewer.getTree(); TreeViewerColumn treeViewerColumn = new TreeViewerColumn(treeViewer, SWT.NONE); TreeColumn trclmnRolle = treeViewerColumn.getColumn(); trclmnRolle.setWidth(300); trclmnRolle.setText("Rolle"); treeViewer.setLabelProvider(new WorkbenchLabelProvider()); treeViewer.setContentProvider(new TreeContentProvider()); tree.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { if (event.detail == SWT.CHECK) { event.detail = SWT.NONE; event.type = SWT.None; TreeItem item = (TreeItem) event.item; Object obj = item.getData(); wizard.update(); // TODO: only change if permitted // event.doit = false; // Object obj = event.item; // ((TreeItem) event.item).setChecked(false); } } }); usersUpdated(); setControl(container); } void usersUpdated() { treeViewer.setInput(wizard.getSelectedUsers()); for (ACOrgUnit orgUnit : wizard.getSelectedUsers()) { if (orgUnit.getRoles().size() > 0) { treeViewer.expandToLevel(orgUnit, 1); treeViewer.setGrayChecked(new TreePath(new Object[] { orgUnit }), true); } for (RoleAssignment role : orgUnit.getRoles()) { if (wizard.getProjectInfo().getProjectId().equals(role.getProjectId())) { treeViewer.setChecked(new TreePath(new Object[] { orgUnit, new RoleBox(role.getRole()) }), true); } } } } public boolean isSelected(ACOrgUnit orgUnit, Role role) { return treeViewer.getChecked(new TreePath(new Object[] { orgUnit, new RoleBox(role) })); } }