package org.nightlabs.jfire.issuetracking.ui.issue;
import javax.jdo.FetchPlan;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IViewSite;
import org.eclipse.ui.PartInitException;
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.Issue;
import org.nightlabs.jfire.issue.dao.IssueDAO;
import org.nightlabs.jfire.issue.id.IssueID;
import org.nightlabs.jfire.issuetracking.ui.IssueTrackingPlugin;
import org.nightlabs.notification.NotificationAdapterCallerThread;
import org.nightlabs.notification.NotificationEvent;
import org.nightlabs.notification.NotificationListener;
import org.nightlabs.progress.NullProgressMonitor;
/**
* @author Chairat Kongarayawetchakun <!-- chairat [AT] nightlabs [DOT] de -->
*
*/
public class IssueDescriptionView
extends LSDViewPart
{
public static final String VIEW_ID = IssueDescriptionView.class.getName();
private IMemento initMemento = null;
/* (non-Javadoc)
* @see org.eclipse.ui.part.ViewPart#init(org.eclipse.ui.IViewSite, org.eclipse.ui.IMemento)
*/
@Override
public void init(IViewSite site, IMemento memento) throws PartInitException {
super.init(site, memento);
this.initMemento = memento;
}
private IssueDescriptionDetailComposite descriptionDetailComposite;
/* (non-Javadoc)
* @see org.nightlabs.base.ui.part.ControllablePart#createPartContents(org.eclipse.swt.widgets.Composite)
*/
@Override
public void createPartContents(Composite parent)
{
descriptionDetailComposite = new IssueDescriptionDetailComposite(parent, SWT.NONE);
SelectionManager.sharedInstance().addNotificationListener(IssueTrackingPlugin.ZONE_PROPERTY, Issue.class, issueSelectionListener);
// if (initMemento != null)
// descriptionDetailComposite.init(initMemento);
descriptionDetailComposite.addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
SelectionManager.sharedInstance().removeNotificationListener(IssueTrackingPlugin.ZONE_PROPERTY, Issue.class, issueSelectionListener);
}
});
}
private static String[] FETCH_GROUP = new String[] {
FetchPlan.DEFAULT,
Issue.FETCH_GROUP_DESCRIPTION};
private NotificationListener issueSelectionListener = new NotificationAdapterCallerThread(){
public void notify(NotificationEvent notificationEvent) {
Object firstSelection = notificationEvent.getFirstSubject();
if (firstSelection instanceof IssueID) {
IssueID issueID = (IssueID) firstSelection;
if (descriptionDetailComposite != null && !descriptionDetailComposite.isDisposed()) {
Issue issue = IssueDAO.sharedInstance().getIssue(issueID, FETCH_GROUP, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, new NullProgressMonitor());
descriptionDetailComposite.setIssueDescription(issue.getDescription());
}
}
}
};
/* (non-Javadoc)
* @see org.nightlabs.jfire.base.ui.login.part.LSDViewPart#setFocus()
*/
@Override
public void setFocus() {
}
/* (non-Javadoc)
* @see org.eclipse.ui.part.ViewPart#saveState(org.eclipse.ui.IMemento)
*/
@Override
public void saveState(IMemento memento) {
super.saveState(memento);
}
}