/**
*
*/
package org.nightlabs.jfire.issuetracking.trade.ui.store.issuelink;
import java.util.HashSet;
import java.util.Set;
import javax.jdo.JDOHelper;
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.swt.widgets.Composite;
import org.nightlabs.base.ui.table.AbstractTableComposite;
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.store.ReceptionNote;
import org.nightlabs.jfire.trade.ui.overview.receptionnote.ReceptionNoteEntryFactory;
import org.nightlabs.jfire.trade.ui.overview.receptionnote.ReceptionNoteEntryViewer;
import org.nightlabs.progress.ProgressMonitor;
/**
* @author Chairat Kongarayawetchakun - chairat at nightlabs dot de
*
*/
public class IssueLinkAdderReceptionNote
extends AbstractIssueLinkAdder
{
private ReceptionNoteEntryViewer rViewer;
@Override
protected Composite doCreateComposite(Composite parent) {
rViewer = new ReceptionNoteEntryViewer(new ReceptionNoteEntryFactory().createEntry()) {
@Override
protected void addResultTableListeners(AbstractTableComposite<ReceptionNote> tableComposite) {
tableComposite.addDoubleClickListener(new IDoubleClickListener() {
@Override
public void doubleClick(DoubleClickEvent evt) {
notifyIssueLinkDoubleClickListeners();
}
});
tableComposite.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent e) {
fireSelectionChangedEvent();
}
});
}
};
rViewer.setErrorMessageDisplayer(getErrorMessageDisplayer());
rViewer.createComposite(parent);
return rViewer.getComposite();
}
@Override
protected void doSearch() {
rViewer.search();
}
public Set<ObjectID> getLinkedObjectIDs() {
Set<ObjectID> result = new HashSet<ObjectID>();
for(Object o : rViewer.getListComposite().getSelectedElements()) {
result.add((ObjectID)JDOHelper.getObjectId(o));
}
return result;
}
public boolean isComplete() {
if (rViewer == null)
return false;
return !rViewer.getListComposite().getSelectedElements().isEmpty();
}
@Override
public Set<IssueLink> createIssueLinks(
Issue issue,
IssueLinkType issueLinkType,
ProgressMonitor monitor)
{
Set<IssueLink> issueLinks = new HashSet<IssueLink>();
for (ReceptionNote linkedReceptionNote : rViewer.getListComposite().getSelectedElements()) {
issueLinks.add(issue.createIssueLink(issueLinkType, (ObjectID)JDOHelper.getObjectId(linkedReceptionNote), ReceptionNote.class));
}
return issueLinks;
}
}