package edu.ualberta.med.biobank.dialogs.user; import java.text.MessageFormat; import java.util.Collections; import java.util.List; import org.eclipse.core.runtime.Status; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.PlatformUI; import edu.ualberta.med.biobank.SessionManager; import edu.ualberta.med.biobank.common.action.security.ManagerContext; import edu.ualberta.med.biobank.common.action.security.MembershipContext; import edu.ualberta.med.biobank.common.action.security.MembershipContextGetAction; import edu.ualberta.med.biobank.common.action.security.MembershipContextGetInput; import edu.ualberta.med.biobank.common.action.security.MembershipContextGetOutput; import edu.ualberta.med.biobank.common.action.security.UserGetOutput; 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.User; import edu.ualberta.med.biobank.widgets.infotables.UserInfoTable; import gov.nih.nci.system.applicationservice.ApplicationException; public abstract class UsersPage extends BgcDialogPage { private UserInfoTable userInfoTable; private final ManagerContext managerContext; public UsersPage(BgcDialogWithPages dialog, ManagerContext managerContext) { super(dialog); this.managerContext = managerContext; } @Override public String getTitle() { return "Users"; } @Override public void createControl(Composite parent) { Composite content = new Composite(parent, SWT.NONE); content.setLayout(new GridLayout(1, false)); new TableFilter<User>(content) { @Override protected boolean accept(User user, String text) { return contains(user.getLogin(), text) || contains(user.getEmail(), text) || contains(user.getFullName(), text); } @Override public List<User> getAllCollection() { return getCurrentAllUsersList(); } @Override public void setFilteredList(List<User> filteredObjects) { userInfoTable.setList(filteredObjects); } }; userInfoTable = new UserInfoTable(content, getCurrentAllUsersList(), managerContext) { @Override protected int editUser(User user) { int res = super.editUser(user); // when user modify itself. Close everything to log again if (res == UserEditDialog.CLOSE_PARENT_RETURN_CODE) { dialog.close(); } return res; } @Override protected boolean deleteUser(User user) { boolean deleted = super.deleteUser(user); if (deleted) getCurrentAllUsersList().remove(user); return deleted; } @Override protected Boolean canEdit(User target) throws ApplicationException { return true; } @Override protected Boolean canDelete(User target) throws ApplicationException { return true; } @Override protected Boolean canView(User target) throws ApplicationException { return true; } }; setControl(content); } protected abstract List<User> getCurrentAllUsersList(); protected void addUser() { BusyIndicator.showWhile(Display.getDefault(), new Runnable() { @Override public void run() { final User user = new User(); user.setRecvBulkEmails(true); MembershipContextGetOutput mcOutput = null; try { mcOutput = SessionManager.getAppService() .doAction(new MembershipContextGetAction( new MembershipContextGetInput())); } catch (Throwable t) { TmpUtil.displayException(t); } MembershipContext context = mcOutput.getContext(); UserGetOutput output = new UserGetOutput(user, context, true); UserEditDialog dlg = new UserEditDialog(PlatformUI .getWorkbench().getActiveWorkbenchWindow().getShell(), output, managerContext); int res = dlg.open(); if (res == Status.OK) { BgcPlugin.openAsyncInformation( "User Added", MessageFormat.format( "Successfully added new user {0}.", user.getLogin())); List<User> allCurrent = getCurrentAllUsersList(); allCurrent.add(user); Collections.sort(allCurrent, new UserInfoTable.UserComparator()); userInfoTable.setList(getCurrentAllUsersList()); userInfoTable.setSelection(user); } } }); } @Override public void runAddAction() { addUser(); } }