/**
*
*/
package org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import javax.jdo.FetchPlan;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
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.XComposite;
import org.nightlabs.base.ui.composite.XComposite.LayoutDataMode;
import org.nightlabs.base.ui.composite.XComposite.LayoutMode;
import org.nightlabs.base.ui.resource.SharedImages;
import org.nightlabs.base.ui.wizard.WizardHop;
import org.nightlabs.base.ui.wizard.WizardHopPage;
import org.nightlabs.jdo.NLJDOHelper;
import org.nightlabs.jfire.issue.IssuePriority;
import org.nightlabs.jfire.issue.IssueType;
import org.nightlabs.jfire.issue.dao.IssuePriorityDAO;
import org.nightlabs.jfire.issuetracking.admin.ui.IssueTrackingAdminPlugin;
import org.nightlabs.jfire.issuetracking.admin.ui.resource.Messages;
import org.nightlabs.progress.NullProgressMonitor;
/**
* @author Chairat Kongarayawetchakun - chairat [AT] nightlabs [DOT] de
*
*/
public class IssueTypePrioritySelectWizardPage
extends WizardHopPage
{
private Group choiceGroup;
private Button createNewCheckBox;
private Button selectFromCheckBox;
private IssueType issueType;
private IssuePriorityTable issuePriorityTable;
private IssueTypePriorityGeneralWizardPage createPage;
public IssueTypePrioritySelectWizardPage(IssueType issueType) {
super( IssueTypePrioritySelectWizardPage.class.getName(),
Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypePrioritySelectWizardPage.title"), //$NON-NLS-1$
SharedImages.getWizardPageImageDescriptor(IssueTrackingAdminPlugin.getDefault(), IssueTypePrioritySelectWizardPage.class)
);
new WizardHop(this);
this.issueType = issueType;
createPage = new IssueTypePriorityGeneralWizardPage(null);
setDescription(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypePrioritySelectWizardPage.description")); //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.nightlabs.base.ui.wizard.DynamicPathWizardPage#createPageContents(org.eclipse.swt.widgets.Composite)
*/
@Override
public Control createPageContents(Composite parent) {
XComposite wrapper = new XComposite(parent, SWT.NONE);
XComposite comp = new XComposite(wrapper, SWT.NONE, LayoutMode.TIGHT_WRAPPER, LayoutDataMode.GRID_DATA_HORIZONTAL);
createNewCheckBox = new Button(comp, SWT.RADIO);
createNewCheckBox.setText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypePrioritySelectWizardPage.checkBox.createNew.text")); //$NON-NLS-1$
createNewCheckBox.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
createNewCheckBox.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
setCreateNew(true, true);
}
});
selectFromCheckBox = new Button(comp, SWT.RADIO);
selectFromCheckBox.setText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypePrioritySelectWizardPage.checkBox.selectFrom.text")); //$NON-NLS-1$
selectFromCheckBox.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
selectFromCheckBox.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
setCreateNew(false, true);
}
});
issuePriorityTable = new IssuePriorityTable(wrapper, SWT.NONE);
Display.getCurrent().asyncExec(new Runnable(){
public void run() {
List<IssuePriority> issuePriorities = IssuePriorityDAO.sharedInstance().getIssuePriorities(
new String[] { FetchPlan.DEFAULT, IssuePriority.FETCH_GROUP_NAME }, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, new NullProgressMonitor());
issuePriorities.removeAll(issueType.getIssuePriorities());
issuePriorityTable.setInput(issuePriorities);
}
});
issuePriorityTable.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent arg0) {
if (issuePriorityTable.getFirstSelectedElement() != null) {
selectFromCheckBox.setSelection(true);
setCreateNew(false, true);
}
}
});
issuePriorityTable.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent arg0) {
if (issuePriorityTable.getFirstSelectedElement() != null) {
if (getContainer() instanceof WizardDialog) {
if (getWizard().performFinish()) {
((WizardDialog) getContainer()).close();
}
}
}
}
});
setCreateNew(false, false);
return wrapper;
}
public void setCreateNew(boolean isCreateNew, boolean updateButtons) {
// issuePriorityTable.setEnabled(!b);
createNewCheckBox.setSelection(isCreateNew);
selectFromCheckBox.setSelection(!isCreateNew);
if (isCreateNew) {
if (!getWizardHop().getHopPages().contains(createPage))
getWizardHop().addHopPage(createPage);
} else {
getWizardHop().removeAllHopPages();
}
if (updateButtons)
getContainer().updateButtons();
}
@Override
public boolean isPageComplete() {
return createNewCheckBox.getSelection() || issuePriorityTable.getFirstSelectedElement() != null;
}
public Collection<IssuePriority> getSelectedIssuePriorities() {
if (this.equals(getContainer().getCurrentPage()))
return new ArrayList<IssuePriority>(issuePriorityTable.getSelectedElements());
else
return Collections.singleton(createPage.getPriorityComposite().getIssuePriority());
}
}