package org.nightlabs.jfire.issuetracking.ui.issuelink.attach; import java.util.Collection; import javax.jdo.FetchPlan; import javax.jdo.JDOHelper; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Group; import org.nightlabs.base.ui.composite.ListComposite; import org.nightlabs.base.ui.composite.XComposite; import org.nightlabs.base.ui.composite.XComposite.LayoutDataMode; import org.nightlabs.base.ui.composite.XComposite.LayoutMode; import org.nightlabs.base.ui.job.Job; import org.nightlabs.base.ui.resource.SharedImages; import org.nightlabs.base.ui.wizard.WizardHopPage; import org.nightlabs.jdo.NLJDOHelper; import org.nightlabs.jfire.issue.IssueLinkType; import org.nightlabs.jfire.issue.dao.IssueLinkTypeDAO; import org.nightlabs.jfire.issuetracking.ui.IssueTrackingPlugin; import org.nightlabs.jfire.issuetracking.ui.issuelink.attach.SelectAttachedIssueWizardPage.ActionForIssue; import org.nightlabs.jfire.issuetracking.ui.resource.Messages; import org.nightlabs.progress.ProgressMonitor; /** * @author Chairat Kongarayawetchakun <!-- chairat [AT] nightlabs [DOT] de --> * */ public class AttachIssueSelectIssueLinkTypeWizardPage extends WizardHopPage { private ListComposite<IssueLinkType> issueLinkTypeList; //Used Objects private IssueLinkType selectedIssueLinkType; private Object attachedObject; public AttachIssueSelectIssueLinkTypeWizardPage(Object attachedObject) { super(AttachIssueSelectIssueLinkTypeWizardPage.class.getName(), Messages.getString("org.nightlabs.jfire.issuetracking.ui.issuelink.attach.AttachIssueSelectIssueLinkTypeWizardPage.titleDefault"), SharedImages.getWizardPageImageDescriptor(IssueTrackingPlugin.getDefault(), AttachIssueSelectIssueLinkTypeWizardPage.class)); //$NON-NLS-1$ this.attachedObject = attachedObject; setTitle(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issuelink.attach.AttachIssueSelectIssueLinkTypeWizardPage.title")); //$NON-NLS-1$ String objectNameString = attachedObject.getClass().getSimpleName(); setDescription(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issuelink.attach.AttachIssueSelectIssueLinkTypeWizardPage.description") + objectNameString); //$NON-NLS-1$ } @Override public Control createPageContents(Composite parent) { XComposite mainComposite = new XComposite(parent, SWT.NONE, LayoutMode.TIGHT_WRAPPER, LayoutDataMode.GRID_DATA); mainComposite.getGridLayout().numColumns = 1; Group manageRelationGroup = new Group(mainComposite, SWT.NONE); manageRelationGroup.setLayout(new GridLayout(1, false)); manageRelationGroup.setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issuelink.attach.AttachIssueSelectIssueLinkTypeWizardPage.group.relation.text")); //$NON-NLS-1$ manageRelationGroup.setLayoutData(new GridData(GridData.FILL_BOTH)); XComposite manageComposite = new XComposite(manageRelationGroup, SWT.NONE); manageComposite.setLayoutData(new GridData(GridData.FILL_BOTH)); manageComposite.getGridLayout().numColumns = 1; issueLinkTypeList = new ListComposite<IssueLinkType>(manageComposite, SWT.SINGLE); issueLinkTypeList.setLabelProvider(new LabelProvider() { @Override public String getText(Object element) { return ((IssueLinkType)element).getName().getText(); } }); GridData gridData = new GridData(GridData.FILL_BOTH); issueLinkTypeList.setLayoutData(gridData); issueLinkTypeList.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { selectedIssueLinkType = issueLinkTypeList.getSelectedElement(); } }); Job job = new Job(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issuelink.attach.AttachIssueSelectIssueLinkTypeWizardPage.job.loadingIssueLinkType.text")) { //$NON-NLS-1$ @Override protected IStatus run(final ProgressMonitor monitor) throws Exception { final IssueLinkTypeDAO issueLinkTypeDAO = IssueLinkTypeDAO.sharedInstance(); final Collection<IssueLinkType> issueLinkTypes = issueLinkTypeDAO.getIssueLinkTypes( attachedObject.getClass(), new String[] {FetchPlan.DEFAULT, IssueLinkType.FETCH_GROUP_NAME}, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, monitor); Display.getDefault().syncExec(new Runnable() { @Override public void run() { // if (issueLinkTypes.size() > 0) { issueLinkTypeList.setInput(issueLinkTypes); issueLinkTypeList.setSelection(0); selectedIssueLinkType = issueLinkTypeList.getSelectedElement(); issueLinkTypeList.setFocus(); getContainer().updateButtons(); if(issueLinkTypes.size() == 1 && JDOHelper.getObjectId(selectedIssueLinkType).equals(IssueLinkType.ISSUE_LINK_TYPE_ID_RELATED)) { if (getNextPage() instanceof SelectAttachedIssueWizardPage) { SelectAttachedIssueWizardPage selectPage = (SelectAttachedIssueWizardPage)getNextPage(); selectPage.setIssueLinkType(selectedIssueLinkType); selectPage.setIssueAction(ActionForIssue.createNewIssue); } getContainer().showPage(getNextPage()); } // } } }); return Status.OK_STATUS; } }; job.schedule(); return mainComposite; } @Override public boolean canFlipToNextPage() { return selectedIssueLinkType != null; } public IssueLinkType getSelectedIssueLinkType() { return selectedIssueLinkType; } // private IssueLinkAdder issueLinkAdder; // public void setIssueLinkAdder(final IssueLinkAdder issueLinkAdder) { // this.issueLinkAdder = issueLinkAdder; // if (issueLinkAdder != null) { // Job job = new Job("Loading issue link types") { // @Override // protected IStatus run(ProgressMonitor monitor) throws Exception { // final Collection<IssueLinkType> issueLinkTypes = IssueLinkTypeDAO.sharedInstance().getIssueLinkTypes( // issueLinkAdder.getIssueLinkHandlerFactory().getLinkedObjectClass(), // new String[] {IssueLinkType.FETCH_GROUP_NAME, FetchPlan.DEFAULT}, // NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, // monitor); // Display.getDefault().asyncExec(new Runnable() { // @Override // public void run() { // issueLinkTypeList.removeAll(); // issueLinkTypeList.addElements(issueLinkTypes); // } // }); // return Status.OK_STATUS; // } // }; // job.setPriority(Job.SHORT); // job.schedule(); // } // } }