package org.nightlabs.jfire.issuetracking.trade.ui.issuelink.person;
import javax.jdo.FetchPlan;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.nightlabs.base.ui.notification.NotificationAdapterJob;
import org.nightlabs.base.ui.notification.SelectionManager;
import org.nightlabs.jdo.NLJDOHelper;
import org.nightlabs.jfire.base.login.ui.part.LSDViewPart;
import org.nightlabs.jfire.issue.IssueLink;
import org.nightlabs.jfire.issuetracking.trade.ui.resource.Messages;
import org.nightlabs.jfire.issuetracking.ui.issuelink.person.AddNewCommentViewAction;
import org.nightlabs.jfire.issuetracking.ui.issuelink.person.CreateNewIssueViewAction;
import org.nightlabs.jfire.issuetracking.ui.issuelink.person.IPersonIssueLinkView;
import org.nightlabs.jfire.issuetracking.ui.issuelink.person.PersonIssueLinkTreeComposite;
import org.nightlabs.jfire.issuetracking.ui.issuelink.person.RemovePersonIssueLinkViewAction;
import org.nightlabs.jfire.person.Person;
import org.nightlabs.jfire.trade.LegalEntity;
import org.nightlabs.jfire.trade.dao.LegalEntityDAO;
import org.nightlabs.jfire.trade.ui.TradePlugin;
import org.nightlabs.jfire.transfer.id.AnchorID;
import org.nightlabs.notification.NotificationEvent;
import org.nightlabs.notification.NotificationListener;
import org.nightlabs.progress.ProgressMonitor;
import org.nightlabs.progress.SubProgressMonitor;
/**
* @author Fitas Amine - fitas at nightlabs dot de
*
*/
public class LegalEntityPersonIssueLinkTreeView extends LSDViewPart implements IPersonIssueLinkView
{
/**
* LOG4J logger used by this class
*/
// private static final Logger logger = Logger.getLogger(LegalEntityPersonIssueLinkTreeView .class);
public static final String ID_VIEW = LegalEntityPersonIssueLinkTreeView.class.getName();
private PersonIssueLinkTreeComposite showLegalEntityLinkedTreeComposite;
private CreateNewIssueViewAction createNewIssueViewAction = new CreateNewIssueViewAction();
private AddNewCommentViewAction addNewCommentViewAction = new AddNewCommentViewAction();
private RemovePersonIssueLinkViewAction removePersonIssueLinkViewAction = new RemovePersonIssueLinkViewAction();
private LegalEntity partner = null;
public Object getSelectedNode() {
if (showLegalEntityLinkedTreeComposite.isDisposed())
return null;
else
return showLegalEntityLinkedTreeComposite.getSelectedNode();
}
@Override
public void createPartContents(Composite parent) {
showLegalEntityLinkedTreeComposite = new PersonIssueLinkTreeComposite(parent, SWT.NONE, getSite());
showLegalEntityLinkedTreeComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
SelectionManager.sharedInstance().addNotificationListener(
TradePlugin.ZONE_SALE,
LegalEntity.class, notificationListenerPersonSelected
);
showLegalEntityLinkedTreeComposite.addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent event) {
SelectionManager.sharedInstance().removeNotificationListener(
TradePlugin.ZONE_SALE,
LegalEntity.class, notificationListenerPersonSelected
);
IToolBarManager toolBarManager = getViewSite().getActionBars().getToolBarManager();
toolBarManager.removeAll();
}
});
IToolBarManager toolBarManager = getViewSite().getActionBars().getToolBarManager();
createNewIssueViewAction.init(this);
toolBarManager.add(createNewIssueViewAction);
removePersonIssueLinkViewAction.init(this);
removePersonIssueLinkViewAction.setEnabled(false);
toolBarManager.add(removePersonIssueLinkViewAction);
addNewCommentViewAction.init(this);
addNewCommentViewAction.setEnabled(false);
toolBarManager.add(addNewCommentViewAction);
createNewIssueViewAction.setEnabled(false);
showLegalEntityLinkedTreeComposite.getTreeViewer().addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
// if the selection is empty clear the label
if(event.getSelection().isEmpty()) {
addNewCommentViewAction.setEnabled(false);
return;
}
StructuredSelection s = (StructuredSelection)event.getSelection();
Object o = s.getFirstElement();
if (o instanceof IssueLink)
{ addNewCommentViewAction.setEnabled(true);
removePersonIssueLinkViewAction.setEnabled(true);
}
else
{
addNewCommentViewAction.setEnabled(false);
removePersonIssueLinkViewAction.setEnabled(false);
}
}
});
}
private NotificationListener notificationListenerPersonSelected = new NotificationAdapterJob("") { //$NON-NLS-1$
public void notify(NotificationEvent event) {
ProgressMonitor monitor = getProgressMonitor();
monitor.beginTask(Messages.getString("org.nightlabs.jfire.issuetracking.trade.ui.issuelink.person.LegalEntityPersonIssueLinkTreeView.job.doSomething"), 100); //$NON-NLS-1$
// some work
monitor.worked(30);
if (event.getSubjects().isEmpty())
return;
else
legalEntityChanged((AnchorID)event.getFirstSubject(), new SubProgressMonitor(monitor, 70));
}
};
private void legalEntityChanged(AnchorID partnerID, ProgressMonitor monitor)
{
monitor.beginTask(Messages.getString("org.nightlabs.jfire.issuetracking.trade.ui.issuelink.person.LegalEntityPersonIssueLinkTreeView.task.loadingLegalEntity"), 100); //$NON-NLS-1$
try {
LegalEntity partner = partnerID == null ? null : LegalEntityDAO.sharedInstance().getLegalEntity(
partnerID,
new String[] {
FetchPlan.DEFAULT,
LegalEntity.FETCH_GROUP_PERSON,
// PropertySet.FETCH_GROUP_FULL_DATA
},
NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT,
new SubProgressMonitor(monitor, 30)
);
this.partner = partner;
showLegalEntityLinkedTreeComposite.setRootNode(partner.getPerson(), new SubProgressMonitor(monitor, 70));
Display.getDefault().asyncExec(new Runnable() {
public void run() {
createNewIssueViewAction.setEnabled(true);
}
});
} finally {
monitor.done();
}
}
public LegalEntity getLegalEntity() {
return partner;
}
@Override
public Person getPerson() {
if (partner != null) {
return partner.getPerson();
}
return null;
}
@Override
public IssueLink getSelectedIssueLink() {
return showLegalEntityLinkedTreeComposite.getSelectedIssueLink();
}
}