/** * */ package org.nightlabs.jfire.issuetracking.ui.issue; import java.util.Collection; import java.util.HashSet; import java.util.Set; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.swt.widgets.Composite; import org.nightlabs.base.ui.table.AbstractTableComposite; import org.nightlabs.jdo.NLJDOHelper; import org.nightlabs.jdo.ObjectID; 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.issuetracking.ui.overview.IssueEntryListFactory; import org.nightlabs.jfire.issuetracking.ui.overview.IssueEntryListViewer; import org.nightlabs.progress.ProgressMonitor; /** * * @author Chairat Kongarayawetchakun - chairat at nightlabs dot de * */ public class IssueLinkAdderIssue extends AbstractIssueLinkAdder { private IssueEntryListViewer iViewer; private Issue issue; /** * Constructs an issue-issue link adder. * @param issue - the {@link Issue} used in adding process */ public IssueLinkAdderIssue(Issue issue) { this.issue = issue; } @Override protected Composite doCreateComposite(Composite parent) { iViewer = new IssueEntryListViewer(new IssueEntryListFactory().createEntry()) { @Override protected void addResultTableListeners(AbstractTableComposite tableComposite) { tableComposite.addDoubleClickListener(new IDoubleClickListener() { @Override public void doubleClick(DoubleClickEvent evt) { notifyIssueLinkDoubleClickListeners(); } }); tableComposite.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent e) { fireSelectionChangedEvent(); } }); } }; iViewer.createComposite(parent); iViewer.getResultTable().setIsTableInWizard(true); iViewer.getResultTable().getTableViewer().addFilter(new ViewerFilter() { @Override public boolean select(Viewer viewer, Object parentElement, Object element) { return !element.equals(issue); } }); return iViewer.getComposite(); } @Override protected void doSearch() { iViewer.search(); } /** * */ public Set<ObjectID> getLinkedObjectIDs() { Collection<Issue> elements = iViewer.getListComposite().getSelectedElements(); return NLJDOHelper.getObjectIDSet(elements); } /** * * @return */ public boolean isComplete() { if (iViewer == null) return false; return !iViewer.getListComposite().getSelectedElements().isEmpty(); } @Override public Set<IssueLink> createIssueLinks( Issue issue, IssueLinkType issueLinkType, ProgressMonitor monitor) { Set<IssueLink> issueLinks = new HashSet<IssueLink>(); for (Issue linkedIssue : iViewer.getListComposite().getSelectedElements()) { issueLinks.add( issue.createIssueLink(issueLinkType, linkedIssue)); } return issueLinks; } }