package org.nightlabs.jfire.issuetracking.ui.issuelink.person; import java.util.Collection; import java.util.HashSet; import java.util.Set; import org.eclipse.jface.viewers.IOpenListener; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.OpenEvent; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.nightlabs.base.ui.composite.AsyncInitEvent; import org.nightlabs.base.ui.composite.AsyncInitListener; import org.nightlabs.jdo.NLJDOHelper; import org.nightlabs.jdo.ObjectID; import org.nightlabs.jfire.base.ui.person.search.PersonSearchComposite; import org.nightlabs.jfire.base.ui.person.search.PersonSearchUseCaseConstants; import org.nightlabs.jfire.issue.Issue; import org.nightlabs.jfire.issue.IssueLink; import org.nightlabs.jfire.issue.IssueLinkType; import org.nightlabs.jfire.issuetracking.ui.issuelink.AbstractIssueLinkAdder; import org.nightlabs.jfire.person.Person; import org.nightlabs.jfire.prop.PropertySet; import org.nightlabs.progress.ProgressMonitor; /** * * @author Chairat Kongarayawetchakun - chairat at nightlabs dot de * */ public class IssueLinkAdderPerson extends AbstractIssueLinkAdder { private PersonSearchComposite personSearchComposite; /** * Constructs an issue-issue link adder. */ public IssueLinkAdderPerson() { } @Override protected Composite doCreateComposite(Composite parent) { personSearchComposite = new PersonSearchComposite(parent, SWT.NONE, "", PersonSearchUseCaseConstants.USE_CASE_ID_DEFAULT); //$NON-NLS-1$ // personSearchComposite.addPaintListener(new PaintListener() { // @Override // public void paintControl(PaintEvent e) { // personSearchComposite.getResultViewer().addOpenListener(new IOpenListener() { // @Override // public void open(OpenEvent e) { // notifyIssueLinkDoubleClickListeners(); // } // }); // personSearchComposite.getResultViewer().addSelectionChangedListener(new ISelectionChangedListener() { // public void selectionChanged(SelectionChangedEvent e) { // fireSelectionChangedEvent(); // } // }); // } // }); // There is no paint-listener in RAP. Introduced a new AsyncInitListener. And btw. the above code // was called too often as paint-events are triggered pretty often! It should be called only once IMHO. Marco :-) personSearchComposite.addAsyncInitListener(new AsyncInitListener() { @Override public void initialised(AsyncInitEvent event) { personSearchComposite.getResultViewer().addOpenListener(new IOpenListener() { @Override public void open(OpenEvent e) { notifyIssueLinkDoubleClickListeners(); } }); personSearchComposite.getResultViewer().addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent e) { fireSelectionChangedEvent(); } }); personSearchComposite.createSearchButton(personSearchComposite.getButtonBar()); personSearchComposite.layout(true, true); // createSearchButton(buttonBar); } }); return personSearchComposite; } // private Button createSearchButton(Composite parent) { // Button searchButton = new Button(parent, SWT.PUSH); // searchButton.setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issuelink.person.IssueLinkAdderPerson.searchButton.text")); //$NON-NLS-1$ // searchButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); // searchButton.addSelectionListener(new SelectionAdapter() { // @Override // public void widgetSelected(SelectionEvent e) { // doSearch(); // } // }); // parent.layout(true); // return searchButton; // } @Override protected void doSearch() { personSearchComposite.performSearch(); } /** * */ public Set<ObjectID> getLinkedObjectIDs() { Collection<Person> elements = (Collection<Person>) personSearchComposite.getResultViewer().getSelectedElements(); return NLJDOHelper.getObjectIDSet(elements); } /** * * @return */ public boolean isComplete() { if (personSearchComposite == null) return false; return !personSearchComposite.getResultViewer().getSelectedElements().isEmpty(); } @Override public Set<IssueLink> createIssueLinks( Issue issue, IssueLinkType issueLinkType, ProgressMonitor monitor) { Set<IssueLink> issueLinks = new HashSet<IssueLink>(); for (PropertySet linkedPerson : personSearchComposite.getResultViewer().getSelectedElements()) { issueLinks.add( issue.createIssueLink(issueLinkType, linkedPerson)); } return issueLinks; } }