package edu.ualberta.med.biobank.widgets.infotables; import java.text.MessageFormat; import java.util.List; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.ui.PlatformUI; import edu.ualberta.med.biobank.SessionManager; import edu.ualberta.med.biobank.common.action.security.RoleDeleteAction; import edu.ualberta.med.biobank.common.action.security.RoleDeleteInput; import edu.ualberta.med.biobank.dialogs.user.RoleEditDialog; import edu.ualberta.med.biobank.gui.common.BgcPlugin; import edu.ualberta.med.biobank.gui.common.widgets.BgcLabelProvider; import edu.ualberta.med.biobank.gui.common.widgets.DefaultAbstractInfoTableWidget; import edu.ualberta.med.biobank.gui.common.widgets.IInfoTableDeleteItemListener; import edu.ualberta.med.biobank.gui.common.widgets.IInfoTableDoubleClickItemListener; import edu.ualberta.med.biobank.gui.common.widgets.IInfoTableEditItemListener; import edu.ualberta.med.biobank.gui.common.widgets.InfoTableEvent; import edu.ualberta.med.biobank.model.Role; public abstract class RoleInfoTable extends DefaultAbstractInfoTableWidget<Role> { public static final int ROWS_PER_PAGE = 12; private static final String[] HEADINGS = new String[] { Messages.RoleInfoTable_name_label }; @SuppressWarnings("unused") public RoleInfoTable(Composite parent, List<Role> collection) { super(parent, HEADINGS, ROWS_PER_PAGE); addEditItemListener(new IInfoTableEditItemListener<Role>() { @Override public void editItem(InfoTableEvent<Role> event) { Role role = getSelection(); editRole(role); } }); addDeleteItemListener(new IInfoTableDeleteItemListener<Role>() { @Override public void deleteItem(InfoTableEvent<Role> event) { Role role = getSelection(); deleteRole(role); } }); addClickListener(new IInfoTableDoubleClickItemListener<Role>() { @Override public void doubleClick(InfoTableEvent<Role> event) { Role r = getSelection(); if (r != null) editRole(r); } }); MenuItem item = new MenuItem(menu, SWT.PUSH); item.setText(Messages.RoleInfoTable_duplicate_label); item.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { Role role = getSelection(); duplicate(role); } }); } protected abstract void duplicate(Role origRole); @Override protected BgcLabelProvider getLabelProvider() { return new BgcLabelProvider() { @Override public String getColumnText(Object element, int columnIndex) { Role role = (Role) element; switch (columnIndex) { case 0: return role.getName(); default: return ""; //$NON-NLS-1$ } } }; } protected void editRole(Role role) { RoleEditDialog dlg = new RoleEditDialog(PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getShell(), role); int res = dlg.open(); if (res == Dialog.OK) { reload(); notifyListeners(); } } protected boolean deleteRole(Role role) { try { String name = role.getName(); String message = MessageFormat.format( Messages.RoleInfoTable_delete_confirm_msg, new Object[] { name }); if (BgcPlugin.openConfirm( Messages.RoleInfoTable_delete_confirm_title, message)) { SessionManager.getAppService().doAction( new RoleDeleteAction(new RoleDeleteInput(role))); getList().remove(role); reload(); notifyListeners(); return true; } } catch (Exception e) { BgcPlugin .openAsyncError(Messages.RoleInfoTable_delete_error_msg, e); } return false; } }