package org.js.model.workflow.ui;
import org.eclipse.emf.common.util.EList;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Shell;
import org.js.model.rbac.AccessControlModel;
import org.js.model.rbac.Role;
import org.eclipse.swt.layout.RowLayout;
/**
* UI for the stakeholder types.
* @author Xi
*
*/
public class StakeholderTypesUIShell extends Shell {
private List stakeholderTypesList;
private EList<Role> stakeholdersTypes;
private AccessControlModel accessControlModel;
/**
* Launch the application.
*
* @param args
*/
public static void main(String args[]) {
try {
Display display = Display.getDefault();
StakeholderTypesUIShell shell = new StakeholderTypesUIShell(display,null,null);
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Create the shell.
*
* @param display
*/
public StakeholderTypesUIShell(Display display, AccessControlModel acm,
EList<Role> types) {
super(display, SWT.SHELL_TRIM);
setLayout(new FillLayout(SWT.HORIZONTAL));
//TODO: import the editor shell as the input parameter
stakeholdersTypes=types;
accessControlModel=acm;
Composite composite = new Composite(this, SWT.NONE);
composite.setLayout(new GridLayout(1, false));
stakeholderTypesList = new List(composite, SWT.BORDER | SWT.V_SCROLL
| SWT.MULTI);
GridData gd_stakeholderTypesList = new GridData(SWT.FILL, SWT.FILL,
true, true, 1, 1);
gd_stakeholderTypesList.widthHint = 124;
stakeholderTypesList.setLayoutData(gd_stakeholderTypesList);
Composite composite_1 = new Composite(composite, SWT.NONE);
composite_1.setLayout(new RowLayout(SWT.HORIZONTAL));
composite_1.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false,
false, 1, 1));
Button btnOk = new Button(composite_1, SWT.NONE);
btnOk.setText("Ok");
Button btnCancel = new Button(composite_1, SWT.NONE);
btnCancel.setText("Cancel");
createContents();
// actions for buttons and list
stakeholderTypesList.removeAll();
for (Role stakeholder : acm.getRoles()) {
stakeholderTypesList.add(stakeholder.getId());
if (stakeholdersTypes.contains(stakeholder)) {
int index = stakeholderTypesList.indexOf(stakeholder.getId());
stakeholderTypesList.select(index);
}
}
btnOk.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
super.widgetSelected(e);
stakeholdersTypes.clear();
for (String stakeholder : stakeholderTypesList.getSelection()) {
for(Role role:accessControlModel.getRoles()){
if(role.getId().equals(stakeholder)){
stakeholdersTypes.add(role);
break;
}
}
}
dispose();
}
});
btnCancel.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
super.widgetSelected(e);
dispose();
}
});
}
/**
* Create contents of the shell.
*/
protected void createContents() {
setText("SWT Application");
setSize(450, 300);
}
@Override
protected void checkSubclass() {
// Disable the check that prevents subclassing of SWT components
}
}