/**
*
*/
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.IssueSeverityType;
import org.nightlabs.jfire.issue.IssueType;
import org.nightlabs.jfire.issue.dao.IssueSeverityTypeDAO;
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 IssueTypeSeverityTypeSelectWizardPage
extends WizardHopPage
{
private Group choiceGroup;
private Button createNewCheckBox;
private Button selectFromCheckBox;
private IssueType issueType;
private IssueSeverityTypeTable issueTypeSeverityTypeTable;
private IssueTypeSeverityTypeGeneralWizardPage createPage;
public IssueTypeSeverityTypeSelectWizardPage(IssueType issueType) {
super( IssueTypeSeverityTypeSelectWizardPage.class.getName(),
Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypeSeverityTypeSelectWizardPage.title"), //$NON-NLS-1$
SharedImages.getWizardPageImageDescriptor(IssueTrackingAdminPlugin.getDefault(), IssueTypeSeverityTypeSelectWizardPage.class)
);
new WizardHop(this);
this.issueType = issueType;
createPage = new IssueTypeSeverityTypeGeneralWizardPage(null);
setDescription(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypeSeverityTypeSelectWizardPage.description")); //$NON-NLS-1$
}
public static final String[] FETCH_GROUP = {FetchPlan.DEFAULT, IssueSeverityType.FETCH_GROUP_NAME};
/* (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.IssueTypeSeverityTypeSelectWizardPage.createNewCheckBox.text")); //$NON-NLS-1$
createNewCheckBox.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
createNewCheckBox.addSelectionListener(new SelectionAdapter() {
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.IssueTypeSeverityTypeSelectWizardPage.selectFromCheckBox.text")); //$NON-NLS-1$
selectFromCheckBox.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
selectFromCheckBox.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
setCreateNew(false, true);
}
});
issueTypeSeverityTypeTable = new IssueSeverityTypeTable(wrapper, SWT.NONE);
Display.getCurrent().asyncExec(new Runnable(){
public void run() {
List<IssueSeverityType> issueSeverityTypes = IssueSeverityTypeDAO.sharedInstance().getIssueSeverityTypes(FETCH_GROUP, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, new NullProgressMonitor());
issueSeverityTypes.removeAll(issueType.getIssueSeverityTypes());
issueTypeSeverityTypeTable.setInput(issueSeverityTypes);
}
});
issueTypeSeverityTypeTable.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent arg0) {
if (issueTypeSeverityTypeTable.getFirstSelectedElement() != null) {
selectFromCheckBox.setSelection(true);
setCreateNew(false, true);
}
}
});
issueTypeSeverityTypeTable.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent arg0) {
if (issueTypeSeverityTypeTable.getFirstSelectedElement() != null) {
if (getContainer() instanceof WizardDialog) {
if (getWizard().performFinish()) {
((WizardDialog) getContainer()).close();
}
}
}
}
});
setCreateNew(false, false);
return wrapper;
}
public void setCreateNew(boolean b, boolean updateButtons) {
createNewCheckBox.setSelection(b);
selectFromCheckBox.setSelection(!b);
if (b) {
getWizardHop().addHopPage(createPage);
} else {
getWizardHop().removeAllHopPages();
}
if (updateButtons)
getContainer().updateButtons();
}
@Override
public boolean isPageComplete() {
return createNewCheckBox.getSelection() || issueTypeSeverityTypeTable.getFirstSelectedElement() != null;
}
public Collection<IssueSeverityType> getSelectedIssueSeverityTypes() {
if (this.equals(getContainer().getCurrentPage()))
return new ArrayList<IssueSeverityType>(issueTypeSeverityTypeTable.getSelectedElements());
else
return Collections.singleton(createPage.getSeverityTypeComposite().getIssueSeverityType());
}
}