package org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty;
import java.util.List;
import javax.jdo.FetchPlan;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.nightlabs.base.ui.job.Job;
import org.nightlabs.base.ui.table.AbstractTableComposite;
import org.nightlabs.base.ui.table.TableContentProvider;
import org.nightlabs.base.ui.table.TableLabelProvider;
import org.nightlabs.jdo.NLJDOHelper;
import org.nightlabs.jfire.issue.IssueType;
import org.nightlabs.jfire.issue.dao.IssueTypeDAO;
import org.nightlabs.jfire.issuetracking.admin.ui.resource.Messages;
import org.nightlabs.progress.NullProgressMonitor;
import org.nightlabs.progress.ProgressMonitor;
/**
* This composite lists all {@link IssueType}s of an issue type in a table.
* @author Chairat Kongarayawetchakun - chairat[at]nightlabs[dot]de
*/
public class IssueTypeTable
extends AbstractTableComposite<IssueType>
{
/**
* The fetch groups of issue data.
*/
public static final String[] FETCH_GROUPS = new String[] {
FetchPlan.DEFAULT,
IssueType.FETCH_GROUP_NAME};
public IssueTypeTable(Composite parent, int style)
{
super(parent, style);
Job job = new Job(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypeTable.job.loadIssueTypes.text")) { //$NON-NLS-1$
@Override
protected IStatus run(ProgressMonitor monitor) throws Exception {
final List<IssueType> issueTypes = IssueTypeDAO.sharedInstance().getAllIssueTypes(IssueTypeTable.FETCH_GROUPS, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, new NullProgressMonitor());
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
setInput(issueTypes);
}
});
return Status.OK_STATUS;
}
};
job.schedule();
}
// @Override
// protected ActiveJDOObjectController<IssueTypeID, IssueType> createActiveJDOObjectController() {
// return new ActiveJDOObjectController<IssueTypeID, IssueType>() {
//
// @Override
// protected Class<? extends IssueType> getJDOObjectClass() {
// return IssueType.class;
// }
//
// @Override
// protected Collection<IssueType> retrieveJDOObjects(
// Set<IssueTypeID> objectIDs, ProgressMonitor monitor) {
//
// return IssueTypeDAO.sharedInstance().getIssueTypes(objectIDs, IssueTypeTable.FETCH_GROUPS,
// NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT,
// new NullProgressMonitor());
// }
//
// @Override
// protected Collection<IssueType> retrieveJDOObjects(
// ProgressMonitor monitor) {
// return IssueTypeDAO.sharedInstance().getIssueTypes(IssueTypeTable.FETCH_GROUPS,
// NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT,
// new NullProgressMonitor());
// }
//
// @Override
// protected void sortJDOObjects(List<IssueType> objects) {
// }
// };
// }
@Override
protected void createTableColumns(TableViewer tableViewer, Table table) {
TableColumn tc;
TableLayout layout = new TableLayout();
tc = new TableColumn(table, SWT.LEFT);
tc.setText(Messages.getString("org.nightlabs.jfire.issuetracking.admin.ui.overview.issueproperty.IssueTypeTable.tableColumn.name.text")); //$NON-NLS-1$
layout.addColumnData(new ColumnWeightData(30));
table.setLayout(layout);
table.setHeaderVisible(false);
table.setLinesVisible(false);
}
// @Override
// protected ITableLabelProvider createLabelProvider() {
// return new IssueTypeLabelProvider();
// }
class IssueTypeLabelProvider
extends TableLabelProvider
{
public String getColumnText(Object element, int columnIndex)
{
if (element instanceof IssueType) {
IssueType issueType = (IssueType) element;
switch (columnIndex)
{
case(0):
return issueType.getName().getText();
default:
return ""; //$NON-NLS-1$
}
}
return null;
}
}
@Override
protected void setTableProvider(TableViewer tableViewer) {
tableViewer.setContentProvider(new TableContentProvider());
tableViewer.setLabelProvider(new IssueTypeLabelProvider());
}
}