package org.nightlabs.jfire.personrelation.issuetracking.trade.ui.action; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IViewActionDelegate; import org.eclipse.ui.IViewPart; import org.nightlabs.base.ui.job.Job; import org.nightlabs.base.ui.wizard.DynamicPathWizardDialog; import org.nightlabs.jfire.personrelation.issuetracking.trade.ui.CreateIssueWizard; import org.nightlabs.jfire.personrelation.issuetracking.trade.ui.resource.Messages; import org.nightlabs.jfire.personrelation.ui.tree.PersonRelationTreeNode; import org.nightlabs.jfire.prop.id.PropertySetID; import org.nightlabs.progress.ProgressMonitor; import org.nightlabs.progress.SubProgressMonitor; public class CreateIssueAction implements IViewActionDelegate { private IViewPart view; @Override public void init(IViewPart view) { this.view = view; } @Override public void run(IAction action) { final PropertySetID selectedPersonID = this.selectedPersonID; if (selectedPersonID == null) return; final Shell shell = view.getSite().getShell(); final Display display = shell.getDisplay(); Job job = new Job(Messages.getString("org.nightlabs.jfire.personrelation.issuetracking.trade.ui.action.CreateIssueAction.job.openingWizard.name")) { //$NON-NLS-1$ @Override protected IStatus run(ProgressMonitor monitor) throws Exception { monitor.beginTask(Messages.getString("org.nightlabs.jfire.personrelation.issuetracking.trade.ui.action.CreateIssueAction.task.openingWizard.name"), 100); //$NON-NLS-1$ try { final CreateIssueWizard wizard = new CreateIssueWizard(selectedPersonID, new SubProgressMonitor(monitor, 100)); display.asyncExec(new Runnable() { public void run() { DynamicPathWizardDialog dialog = new DynamicPathWizardDialog(shell, wizard); dialog.open(); } }); return Status.OK_STATUS; } finally { monitor.done(); } } }; job.setUser(true); job.setPriority(Job.INTERACTIVE); job.schedule(); } private PropertySetID selectedPersonID = null; @Override public void selectionChanged(IAction action, ISelection selection) { selectedPersonID = null; PersonRelationTreeNode node = PersonRelationTreeNode.getPersonRelationTreeNodeFromSelection(selection); if (node == null) { action.setEnabled(false); return; } selectedPersonID = node.getPropertySetID(); action.setEnabled(selectedPersonID != null); } }