package org.nightlabs.jfire.personrelation.ui;
import java.util.Collections;
import java.util.List;
import javax.jdo.FetchGroup;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
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.layout.WeightedTableLayout;
import org.nightlabs.base.ui.table.AbstractTableComposite;
import org.nightlabs.base.ui.table.TableLabelProvider;
import org.nightlabs.jdo.NLJDOHelper;
import org.nightlabs.jfire.personrelation.PersonRelationType;
import org.nightlabs.jfire.personrelation.dao.PersonRelationTypeDAO;
import org.nightlabs.jfire.personrelation.ui.resource.Messages;
import org.nightlabs.progress.ProgressMonitor;
public class PersonRelationTypeList
extends AbstractTableComposite<PersonRelationType>
{
private static final String[] FETCH_GROUPS_PERSON_RELATION_TYPE = {
FetchGroup.DEFAULT,
PersonRelationType.FETCH_GROUP_NAME,
PersonRelationType.FETCH_GROUP_DESCRIPTION,
PersonRelationType.FETCH_GROUP_ICON16x16DATA
};
public PersonRelationTypeList(Composite parent) {
super(parent, SWT.NONE);
setLoadingMessage(Messages.getString("org.nightlabs.jfire.personrelation.ui.PersonRelationTypeList.loadingMessage")); //$NON-NLS-1$
final Display display = getDisplay();
Job job = new Job(Messages.getString("org.nightlabs.jfire.personrelation.ui.PersonRelationTypeList.job.loadingPersonRelationTypes.name")) //$NON-NLS-1$
{
@Override
protected IStatus run(ProgressMonitor monitor) throws Exception
{
final List<PersonRelationType> personRelationTypes = PersonRelationTypeDAO.sharedInstance().getPersonRelationTypes(
FETCH_GROUPS_PERSON_RELATION_TYPE, NLJDOHelper.MAX_FETCH_DEPTH_NO_LIMIT, monitor
);
display.asyncExec(new Runnable() {
public void run() {
if (isDisposed())
return;
setInput(personRelationTypes);
if (!personRelationTypes.isEmpty())
setSelectedElements(Collections.singleton(personRelationTypes.iterator().next()));
}
});
return Status.OK_STATUS;
}
};
job.setPriority(Job.INTERACTIVE);
job.schedule();
}
@Override
protected void createTableColumns(TableViewer tableViewer, Table table) {
TableColumn tc;
tc = new TableColumn(table, SWT.LEFT);
tc.setText(Messages.getString("org.nightlabs.jfire.personrelation.ui.PersonRelationTypeList.table.column.name.text")); //$NON-NLS-1$
tc = new TableColumn(table, SWT.LEFT);
tc.setText(Messages.getString("org.nightlabs.jfire.personrelation.ui.PersonRelationTypeList.table.column.description.text")); //$NON-NLS-1$
table.setLayout(
new WeightedTableLayout(
new int[] {30, 70}
)
);
}
@Override
protected void setTableProvider(TableViewer tableViewer) {
tableViewer.setContentProvider(new ArrayContentProvider());
tableViewer.setLabelProvider(new TableLabelProvider() {
@Override
public String getColumnText(Object element, int colIdx) {
switch (colIdx) {
case 0:
if (element instanceof PersonRelationType)
return ((PersonRelationType)element).getName().getText();
// TODO delegate
return null;
case 1:
if (element instanceof PersonRelationType)
return ((PersonRelationType)element).getDescription().getText();
// TODO delegate
return null;
default:
return null;
}
}
@Override
public Image getColumnImage(Object element, int columnIndex) {
if (columnIndex == 0 && element instanceof PersonRelationType) {
return PersonRelationPlugin.getDefault().getPersonRelationTypeIcon((PersonRelationType) element);
}
return super.getColumnImage(element, columnIndex);
}
});
}
}