package org.nightlabs.jfire.issuetracking.ui.issue.editor; import java.text.DateFormat; import java.util.Collection; import org.apache.commons.lang.time.DurationFormatUtils; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.nightlabs.base.ui.layout.WeightedTableLayout; import org.nightlabs.base.ui.table.AbstractTableComposite; import org.nightlabs.base.ui.table.TableContentProvider; import org.nightlabs.base.ui.table.TableLabelProvider; import org.nightlabs.jfire.issue.IssueWorkTimeRange; import org.nightlabs.jfire.issue.history.IssueHistoryItem; import org.nightlabs.jfire.issue.id.IssueID; import org.nightlabs.jfire.issuetracking.ui.resource.Messages; /** * This composite lists all {@link IssueWorkTimeRange}s of an issue in a table. * @author Chairat Kongarayawetchakun - chairat[at]nightlabs[dot]de */ public class IssueWorkTimeRangeTable extends AbstractTableComposite<IssueHistoryItem> { /** * The fetch groups of issue work time range data. */ public static final String[] FETCH_GROUPS = new String[] {}; public IssueWorkTimeRangeTable(Composite parent, int style) { super(parent, style); } @Override protected void createTableColumns(TableViewer tableViewer, Table table) { TableColumn tc; tc = new TableColumn(table, SWT.LEFT); tc.setMoveable(true); tc.setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.editor.IssueWorkTimeRangeTable.tableColumn.user.text")); //$NON-NLS-1$ tc = new TableColumn(table, SWT.LEFT); tc.setMoveable(true); tc.setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.editor.IssueWorkTimeRangeTable.tableColumn.from.text")); //$NON-NLS-1$ tc = new TableColumn(table, SWT.LEFT); tc.setMoveable(true); tc.setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.editor.IssueWorkTimeRangeTable.tableColumn.to.text")); //$NON-NLS-1$ tc = new TableColumn(table, SWT.LEFT); tc.setMoveable(true); tc.setText(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.editor.IssueWorkTimeRangeTable.tableColumn.duration.text")); //$NON-NLS-1$ WeightedTableLayout layout = new WeightedTableLayout(new int[]{60, 30, 30, 30}); table.setLayout(layout); } @Override protected void setTableProvider(TableViewer tableViewer) { tableViewer.setContentProvider(new TableContentProvider()); tableViewer.setLabelProvider(new IssueHistoryListLabelProvider()); } private static DateFormat dateTimeFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); class IssueHistoryListLabelProvider extends TableLabelProvider { public String getColumnText(Object element, int columnIndex) { if (element instanceof IssueWorkTimeRange) { IssueWorkTimeRange issueWorkTimeRange = (IssueWorkTimeRange) element; switch (columnIndex) { case(0): return issueWorkTimeRange.getUser().getName(); case(1): return dateTimeFormat.format(issueWorkTimeRange.getFrom()); case(2): return issueWorkTimeRange.getTo() == null ? Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.editor.IssueWorkTimeRangeTable.tableColumnText.workTimeRange.stillWorking.text") : dateTimeFormat.format(issueWorkTimeRange.getTo()); //$NON-NLS-1$ case(3): return issueWorkTimeRange.getDuration() == 0? Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.editor.IssueWorkTimeRangeTable.tableColumnText.workTimeRange.stillWorking.text") : DurationFormatUtils.formatDurationWords(issueWorkTimeRange.getDuration(), true, true); //$NON-NLS-1$ default: return ""; //$NON-NLS-1$ } } return null; } } public void setLoadingStatus() { super.setInput(Messages.getString("org.nightlabs.jfire.issuetracking.ui.issue.editor.IssueWorkTimeRangeTable.table.loadingMessage.text")); //$NON-NLS-1$ } private IssueID issueID; public void setIssueWorkTimeRanges(IssueID issueID, Collection<IssueWorkTimeRange> issueWorkTimeRanges) { if (issueID == null) throw new IllegalArgumentException("issueID == null"); //$NON-NLS-1$ this.issueID = issueID; super.setInput(issueWorkTimeRanges); } @Override public void setInput(Object input) { throw new UnsupportedOperationException("Use setIssueHistories(...) or setLoadingStatus(...) instead!"); //$NON-NLS-1$ } }