package org.nightlabs.jfire.issuetracking.ui.issue.remind; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.nightlabs.base.ui.composite.ListComposite; import org.nightlabs.base.ui.composite.XComposite; import org.nightlabs.base.ui.composite.XComposite.LayoutDataMode; import org.nightlabs.base.ui.composite.XComposite.LayoutMode; import org.nightlabs.base.ui.resource.SharedImages; import org.nightlabs.base.ui.wizard.WizardHopPage; import org.nightlabs.jdo.NLJDOHelper; import org.nightlabs.jfire.base.login.ui.Login; import org.nightlabs.jfire.issue.Issue; import org.nightlabs.jfire.issuetracking.ui.IssueTrackingPlugin; import org.nightlabs.jfire.issuetracking.ui.resource.Messages; import org.nightlabs.jfire.security.User; import org.nightlabs.jfire.security.dao.UserDAO; import org.nightlabs.progress.NullProgressMonitor; /** * @author Chairat Kongarayawetchakun - chairat[at]nightlabs[dot]de */ public class RemindIssueUserWizardPage extends WizardHopPage { //GUI private ListComposite<User> userList; private ListComposite<User> selectedList; //Used objects public RemindIssueUserWizardPage(Issue issue) { super(RemindIssueUserWizardPage.class.getName(), Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.remind.RemindIssueUserWizardPage.title"), SharedImages.getWizardPageImageDescriptor(IssueTrackingPlugin.getDefault(), RemindIssueWizard.class)); //$NON-NLS-1$ setDescription(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.remind.RemindIssueUserWizardPage.description")); //$NON-NLS-1$ } @Override public Control createPageContents(Composite parent) { XComposite mainComposite = new XComposite(parent, SWT.NONE, LayoutMode.TOP_BOTTOM_WRAPPER, LayoutDataMode.GRID_DATA); mainComposite.getGridLayout().numColumns = 6; Label uLabel = new Label(mainComposite, SWT.NONE); uLabel.setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.remind.RemindIssueUserWizardPage.label.user.text")); //$NON-NLS-1$ uLabel.setAlignment(SWT.CENTER); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = 2; uLabel.setLayoutData(gd); Label tmpLabel = new Label(mainComposite, SWT.NONE); tmpLabel.setText(""); //$NON-NLS-1$ gd = new GridData(); gd.horizontalAlignment = GridData.FILL; tmpLabel.setLayoutData(gd); Label sLabel = new Label(mainComposite, SWT.NONE); sLabel.setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.remind.RemindIssueUserWizardPage.label.selectedUser.text")); //$NON-NLS-1$ sLabel.setAlignment(SWT.CENTER); gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = 2; sLabel.setLayoutData(gd); userList = new ListComposite<User>(mainComposite, SWT.MULTI); gd = new GridData(GridData.FILL_BOTH); gd.horizontalSpan = 2; gd.minimumWidth = 30; userList.setLayoutData(gd); userList.setLabelProvider(new LabelProvider() { @Override public String getText(Object element) { return ((User)element).getName(); } }); Job job = new Job(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.remind.RemindIssueUserWizardPage.job.loadingUser.text")) { //$NON-NLS-1$ @Override protected IStatus run(IProgressMonitor monitor) { try { final java.util.List<User> users = UserDAO.sharedInstance().getUsers( Login.getLogin().getOrganisationID(), (String[]) null, new String[] { User.FETCH_GROUP_NAME }, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, new NullProgressMonitor() ); Display.getDefault().asyncExec(new Runnable() { public void run() { userList.setInput(users); } }); } catch (Exception e) { throw new RuntimeException(e); } return Status.OK_STATUS; } }; job.setPriority(Job.SHORT); job.schedule(); XComposite buttonComposite = new XComposite(mainComposite, SWT.PUSH); buttonComposite.getGridLayout().numColumns = 1; buttonComposite.getGridData().grabExcessHorizontalSpace = false; Button addButton = new Button(buttonComposite, SWT.PUSH); addButton.setText(" Add >> "); //$NON-NLS-1$ gd = new GridData(GridData.HORIZONTAL_ALIGN_CENTER, GridData.VERTICAL_ALIGN_CENTER); gd.heightHint = 20; addButton.setLayoutData(gd); addButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { selectedList.addElements(userList.getSelectedElements()); userList.removeAllSelected(); getContainer().updateButtons(); } }); Button removeButton = new Button(buttonComposite, SWT.PUSH); removeButton.setText(" << Remove "); //$NON-NLS-1$ gd = new GridData(GridData.HORIZONTAL_ALIGN_CENTER, GridData.VERTICAL_ALIGN_CENTER); gd.heightHint = 20; removeButton.setLayoutData(gd); removeButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { userList.addElements(selectedList.getSelectedElements()); selectedList.removeAllSelected(); getContainer().updateButtons(); } }); selectedList = new ListComposite<User>(mainComposite, SWT.MULTI); gd = new GridData(GridData.FILL_BOTH); gd.horizontalSpan = 2; gd.minimumWidth = 30; selectedList.setLayoutData(gd); selectedList.setLabelProvider(new LabelProvider() { @Override public String getText(Object element) { return ((User)element).getName(); } }); return mainComposite; } @Override public void onShow() { } @Override public boolean canFlipToNextPage() { return isPageComplete(); } @Override public boolean isPageComplete() { boolean result = true; setErrorMessage(null); if (selectedList.getElements().size() <= 0) { result = false; setErrorMessage(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.remind.RemindIssueUserWizardPage.errorMessage.noUserAdded.text")); //$NON-NLS-1$ } return result; } }