package org.js.model.workflow.ui; import org.eclipse.emf.common.util.EList; import org.eclipse.jface.dialogs.MessageDialog; 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.layout.RowLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.js.model.rbac.AccessControlModel; import org.js.model.rbac.Role; import org.js.model.workflow.util.StakeholderInput; import org.js.model.workflow.util.WorkflowUtil; //import swing2swt.layout.FlowLayout; /** * UI for the stakeholder input. * @author Xi * */ public class StakeholderInputUIShell extends Shell { private Text stakeholderName; private Combo stakeholderTypeCombo; private Combo stakeholderGroupCombo; private AccessControlModel accessControlModel; private EList<Role> stakeholerTypes; private StakeholderInput stakeholderInput = null; private boolean ok=false; /** * Launch the application. * * @param args */ // public static void main(String args[]) { // try { // Display display = Display.getDefault(); // StakeholderInputUIShell shell = new StakeholderInputUIShell(display); // shell.open(); // shell.layout(); // while (!shell.isDisposed()) { // if (!display.readAndDispatch()) { // display.sleep(); // } // } // } catch (Exception e) { // e.printStackTrace(); // } // } /** * Create the shell. * * @param display */ public StakeholderInputUIShell(Display display, AccessControlModel acm, EList<Role> shTypes) { super(display, SWT.SHELL_TRIM); accessControlModel = acm; stakeholerTypes = shTypes; setLayout(new FillLayout(SWT.HORIZONTAL)); Composite composite = new Composite(this, SWT.NONE); composite.setLayout(new GridLayout(2, false)); Label lblNewLabel = new Label(composite, SWT.NONE); lblNewLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblNewLabel.setText("Name"); stakeholderName = new Text(composite, SWT.BORDER); stakeholderName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); Label lblNewLabel_1 = new Label(composite, SWT.NONE); lblNewLabel_1.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblNewLabel_1.setText("StakeholderType"); stakeholderTypeCombo = new Combo(composite, SWT.READ_ONLY); stakeholderTypeCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); Label StakeholerGroupCombo = new Label(composite, SWT.NONE); StakeholerGroupCombo.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); StakeholerGroupCombo.setText("Group"); stakeholderGroupCombo = new Combo(composite, SWT.READ_ONLY); stakeholderGroupCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); new Label(composite, SWT.NONE); 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 combos if (stakeholerTypes != null && stakeholerTypes.size() != 0) { for (Role stakeholder : stakeholerTypes) { stakeholderTypeCombo.add(stakeholder.getId()); } } else { for (Role stakeholder : acm.getRoles()) { stakeholderTypeCombo.add(stakeholder.getId()); } } for (Role stakeholder : acm.getRoles()) { if(!stakeholerTypes.contains(stakeholder)){ stakeholderGroupCombo.add(stakeholder.getId()); } } // for (Group group : acm.getGroups()) { // Role leader = group.getRepresents(); // if (stakeholerTypes != null) { // if (!stakeholerTypes.contains(leader)) { // stakeholderGroupCombo.add(leader.getId()); // } // } else { // stakeholderGroupCombo.add(leader.getId()); // } // } stakeholderTypeCombo.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { // int index = stakeholderTypeCombo.getSelectionIndex(); // String typeName = stakeholderTypeCombo.getItem(index); // String typeName = stakeholderTypeCombo.getText(); // Role stakeholderType = null; // for (Role role : stakeholerTypes) { // if (role.getId().equals(typeName)) { // stakeholderType = role; // break; // } // } // // stakeholderGroupCombo.removeAll(); // for (Role leader : accessControlModel.getRoles()) { // if (leader.getParentRoles().contains(stakeholderType)) { // stakeholderGroupCombo.add(leader.getId()); // } // } } }); btnOk.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { super.widgetSelected(e); if (stakeholderName.getText().equals("") || stakeholderTypeCombo.getSelectionIndex() == -1 ) { // || (stakeholderGroupCombo.getItemCount() != 0 && stakeholderGroupCombo // .getSelectionIndex() == -1) String message = "Please fill the required information."; MessageDialog.openInformation( stakeholderTypeCombo.getShell(), "Warning", message); } else { stakeholderInput=WorkflowUtil.analyzeShInput(stakeholderName.getText(), stakeholderTypeCombo.getText(), stakeholderGroupCombo.getText(), accessControlModel, stakeholerTypes); ok=true; dispose(); } } }); btnCancel.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { super.widgetSelected(e); dispose(); } }); } /** * Create contents of the shell. */ protected void createContents() { setText("Stakeholder Info"); setSize(356, 167); } @Override protected void checkSubclass() { // Disable the check that prevents subclassing of SWT components } public Text getStakeholderName() { return stakeholderName; } public Combo getStakeholderTypeCombo() { return stakeholderTypeCombo; } public Combo getStakeholderGroupCombo() { return stakeholderGroupCombo; } public StakeholderInput getStakeholderInput(){ return stakeholderInput; } public boolean getOk(){ return ok; } }