package org.nightlabs.jfire.personrelation.issuetracking.trade.ui; import java.lang.reflect.InvocationTargetException; import javax.jdo.FetchPlan; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.operation.IRunnableWithProgress; import org.nightlabs.base.ui.exceptionhandler.ExceptionHandlerRegistry; import org.nightlabs.base.ui.progress.ProgressMonitorWrapper; import org.nightlabs.base.ui.wizard.DynamicPathWizard; import org.nightlabs.jdo.NLJDOHelper; import org.nightlabs.jfire.base.login.ui.Login; import org.nightlabs.jfire.issue.Issue; import org.nightlabs.jfire.issue.IssueLinkType; import org.nightlabs.jfire.issue.dao.IssueDAO; import org.nightlabs.jfire.issue.dao.IssueLinkTypeDAO; import org.nightlabs.jfire.issuetracking.ui.issue.create.CreateIssueDetailWizardPage; import org.nightlabs.jfire.person.Person; import org.nightlabs.jfire.personrelation.issuetracking.trade.ui.resource.Messages; import org.nightlabs.jfire.prop.dao.PropertySetDAO; import org.nightlabs.jfire.prop.id.PropertySetID; import org.nightlabs.jfire.security.User; import org.nightlabs.progress.ProgressMonitor; import org.nightlabs.progress.SubProgressMonitor; public class CreateIssueWizard extends DynamicPathWizard { private Person person; private Issue issue; private CreateIssueDetailWizardPage createIssueDetailWizardPage; public CreateIssueWizard(PropertySetID personID, ProgressMonitor monitor) { monitor.beginTask(Messages.getString("org.nightlabs.jfire.personrelation.issuetracking.trade.ui.CreateIssueWizard.task.initalizingWizard"), 60); //$NON-NLS-1$ try { person = (Person) PropertySetDAO.sharedInstance().getPropertySet(personID, null, 1, new SubProgressMonitor(monitor, 20)); issue = new Issue(false); issue.setReporter( Login.sharedInstance().getUser( new String[] { FetchPlan.DEFAULT, User.FETCH_GROUP_NAME }, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, new SubProgressMonitor(monitor, 20) ) ); IssueLinkType issueLinkType = IssueLinkTypeDAO.sharedInstance().getIssueLinkType( IssueLinkType.ISSUE_LINK_TYPE_ID_RELATED, new String[] { FetchPlan.DEFAULT, IssueLinkType.FETCH_GROUP_NAME }, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, new SubProgressMonitor(monitor, 20) ); issue.createIssueLink(issueLinkType, person); } finally { monitor.done(); } } @Override public void addPages() { createIssueDetailWizardPage = new CreateIssueDetailWizardPage(issue); addPage(createIssueDetailWizardPage); } @Override public boolean performFinish() { try { getContainer().run(true, false, new IRunnableWithProgress() { @Override public void run(IProgressMonitor _monitor) throws InvocationTargetException, InterruptedException { ProgressMonitor monitor = new ProgressMonitorWrapper(_monitor); IssueDAO.sharedInstance().storeIssue(issue, false, null, 1, monitor); } }); } catch (Exception x) { ExceptionHandlerRegistry.asyncHandleException(x); return false; } return true; } }