package org.eclipse.emf.emfstore.client.ui.views.users; import java.util.ArrayList; import java.util.List; import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.ecp.navigator.commands.AltKeyDoubleClickAction; import org.eclipse.emf.edit.provider.ComposedAdapterFactory; import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider; import org.eclipse.emf.emfstore.client.ui.Activator; import org.eclipse.emf.emfstore.client.ui.views.users.UsersView.AdministrationNavigatorRootNode.Type; import org.eclipse.emf.emfstore.server.model.accesscontrol.ACUser; import org.eclipse.emf.emfstore.server.model.accesscontrol.Role; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.ContributionItem; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.commands.ICommandImageService; import org.eclipse.ui.menus.CommandContributionItem; import org.eclipse.ui.menus.CommandContributionItemParameter; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.eclipse.ui.part.ViewPart; /** * shows users/ groups in a tree, has a toolbar with add/delete user buttons and a refresh button * * @author boehlke * */ public class UsersView extends ViewPart { public static final String COMMANDID_DELETEUSER = "org.eclipse.emf.emfstore.client.ui.admin.DeleteUser"; public static final String COMMANDID_CREATEUSER = "org.eclipse.emf.emfstore.client.ui.admin.CreateUser"; public static final String ID = "org.eclipse.emf.emfstore.client.ui.views.users.UsersView"; //$NON-NLS-1$ private UserUiController contoller; private TreeViewer userTreeViewer; public UsersView() { this.contoller = UserUiController.getInstance(); } public static class AdministrationNavigatorRootNode { public enum Type { Users, Groups, SystemRoles, ProjectRoles } private Type type; private Object content; public AdministrationNavigatorRootNode(Type type, Object object) { this.type = type; this.content = object; } public Type getType() { return type; } public Object getContent() { return content; } } /** * Create contents of the view part. * * @param parent */ @Override public void createPartControl(Composite parent) { Composite container = new Composite(parent, SWT.NONE); container.setLayout(new FillLayout(SWT.HORIZONTAL)); createContols(container); initializeToolBar(); initializeMenu(); } private void createContols(Composite parent) { userTreeViewer = new TreeViewer(parent, SWT.BORDER); AdapterFactory adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE); AltKeyDoubleClickAction listener = new AltKeyDoubleClickAction(userTreeViewer, UsersView.ID); userTreeViewer.setLabelProvider(new WorkbenchLabelProvider()); userTreeViewer.setContentProvider(new AdapterFactoryContentProvider(adapterFactory) { @Override public Object[] getElements(Object object) { return new Object[] { new AdministrationNavigatorRootNode(Type.Users, object), new AdministrationNavigatorRootNode(Type.Groups, object), new AdministrationNavigatorRootNode(Type.SystemRoles, object), new AdministrationNavigatorRootNode(Type.ProjectRoles, object) }; } @Override public boolean hasChildren(Object object) { if (object instanceof AdministrationNavigatorRootNode) { return true; } return super.hasChildren(object); } @Override public Object[] getChildren(Object object) { List<Object> children = new ArrayList<Object>(); if (object instanceof AdministrationNavigatorRootNode) { AdministrationNavigatorRootNode node = (AdministrationNavigatorRootNode) object; for (Object obj : super.getChildren(node.getContent())) { if (obj instanceof ACUser && node.getType() == Type.Users) { ACUser user = (ACUser) obj; children.add(user); } if (obj instanceof Role) { Role role = (Role) obj; if (role.isSystemRole() && node.getType() == Type.SystemRoles) { children.add(role); } else if (!role.isSystemRole() && node.getType() == Type.ProjectRoles) { children.add(role); } } } return children.toArray(); } return super.getChildren(object); } }); userTreeViewer.setInput(contoller.getPermissionSet()); getSite().setSelectionProvider(userTreeViewer); } /** * Initialize the toolbar. */ private void initializeToolBar() { IToolBarManager toolbarManager = getViewSite().getActionBars().getToolBarManager(); toolbarManager.add(createCommandContributionItem(COMMANDID_CREATEUSER)); toolbarManager.add(new Action() { @Override public boolean isEnabled() { return true; } @Override public String getText() { return "Update"; } @Override public ImageDescriptor getImageDescriptor() { return Activator.getImageDescriptor("icons/refresh.png"); } @Override public void run() { contoller.updatePermissionSet(); } }); } private ContributionItem createCommandContributionItem(String commandId) { CommandContributionItemParameter parm = new CommandContributionItemParameter(getSite(), null, commandId, CommandContributionItem.STYLE_PUSH); parm.iconStyle = ICommandImageService.IMAGE_STYLE_TOOLBAR; return new CommandContributionItem(parm); } /** * Initialize the menu. */ private void initializeMenu() { IMenuManager menuManager = getViewSite().getActionBars().getMenuManager(); } @Override public void setFocus() { } }