/******************************************************************************* * Copyright (c) 2004, 2008 Tasktop Technologies and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Tasktop Technologies - initial API and implementation * Frank Becker - indicate deprecated attachments, bug 215549 * Perforce - fixes for bug 318505 *******************************************************************************/ package org.eclipse.mylyn.internal.tasks.ui.editors; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ViewerCell; import org.eclipse.mylyn.commons.ui.CommonImages; import org.eclipse.mylyn.commons.ui.compatibility.CommonThemes; import org.eclipse.mylyn.commons.workbench.CommonImageManger; import org.eclipse.mylyn.internal.tasks.ui.util.AttachmentUtil; import org.eclipse.mylyn.tasks.core.IRepositoryPerson; import org.eclipse.mylyn.tasks.core.ITaskAttachment; import org.eclipse.mylyn.tasks.core.TaskRepository; import org.eclipse.mylyn.tasks.core.data.TaskDataModel; import org.eclipse.mylyn.tasks.ui.TasksUiImages; import org.eclipse.mylyn.tasks.ui.editors.AttributeEditorToolkit; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.themes.IThemeManager; /** * @author Mik Kersten * @author Steffen Pingel * @author Kevin Sawicki */ public class AttachmentTableLabelProvider extends ColumnLabelProvider { private final AttachmentSizeFormatter sizeFormatter = AttachmentSizeFormatter.getInstance(); private final TaskDataModel model; private final AttributeEditorToolkit attributeEditorToolkit; private final CommonImageManger imageManager; public AttachmentTableLabelProvider(TaskDataModel model, AttributeEditorToolkit attributeEditorToolkit) { this.model = model; this.attributeEditorToolkit = attributeEditorToolkit; this.imageManager = new CommonImageManger(); } public Image getColumnImage(Object element, int columnIndex) { ITaskAttachment attachment = (ITaskAttachment) element; if (columnIndex == 0) { if (AttachmentUtil.isContext(attachment)) { return imageManager.getImage(TasksUiImages.CONTEXT_TRANSFER); } else if (attachment.isPatch()) { return imageManager.getImage(TasksUiImages.TASK_ATTACHMENT_PATCH); } else { return imageManager.getFileImage(attachment.getFileName()); } } else if (columnIndex == 3 && attachment.getAuthor() != null) { return getAuthorImage(attachment.getAuthor(), attachment.getTaskRepository()); } return null; } /** * Get author image for a specified repository person and task repository * * @param person * @param repository * @return author image */ protected Image getAuthorImage(IRepositoryPerson person, TaskRepository repository) { if (repository != null && person != null && person.getPersonId().equals(repository.getUserName())) { return imageManager.getImage(CommonImages.PERSON_ME); } else { return imageManager.getImage(CommonImages.PERSON); } } public String getColumnText(Object element, int columnIndex) { ITaskAttachment attachment = (ITaskAttachment) element; switch (columnIndex) { case 0: if (AttachmentUtil.isContext(attachment)) { return Messages.AttachmentTableLabelProvider_Task_Context; } else if (attachment.isPatch()) { return Messages.AttachmentTableLabelProvider_Patch; } else { return " " + attachment.getFileName(); //$NON-NLS-1$ } case 1: return attachment.getDescription(); case 2: Long length = attachment.getLength(); if (length < 0) { return "-"; //$NON-NLS-1$ } return sizeFormatter.format(length); case 3: return (attachment.getAuthor() != null) ? attachment.getAuthor().toString() : ""; //$NON-NLS-1$ case 4: return (attachment.getCreationDate() != null) ? EditorUtil.formatDateTime(attachment.getCreationDate()) : ""; //$NON-NLS-1$ case 5: // FIXME add id to ITaskAttachment return getAttachmentId(attachment); } return "unrecognized column"; //$NON-NLS-1$ } static String getAttachmentId(ITaskAttachment attachment) { String a = attachment.getUrl(); if (a != null) { int i = a.indexOf("?id="); //$NON-NLS-1$ if (i != -1) { return a.substring(i + 4); } } return ""; //$NON-NLS-1$ } @Override public void addListener(ILabelProviderListener listener) { // ignore } @Override public void dispose() { imageManager.dispose(); } @Override public boolean isLabelProperty(Object element, String property) { // ignore return false; } @Override public void removeListener(ILabelProviderListener listener) { // ignore } @Override public Color getForeground(Object element) { ITaskAttachment att = (ITaskAttachment) element; if (att.isDeprecated()) { IThemeManager themeManager = PlatformUI.getWorkbench().getThemeManager(); return themeManager.getCurrentTheme().getColorRegistry().get(CommonThemes.COLOR_COMPLETED); } return super.getForeground(element); } @Override public String getToolTipText(Object element) { ITaskAttachment attachment = (ITaskAttachment) element; StringBuilder sb = new StringBuilder(); sb.append(Messages.AttachmentTableLabelProvider_File_); sb.append(attachment.getFileName()); if (attachment.getContentType() != null) { sb.append("\n"); //$NON-NLS-1$ sb.append(Messages.AttachmentTableLabelProvider_Type_); sb.append(attachment.getContentType()); } return sb.toString(); /*"\nFilename\t\t" + attachment.getAttributeValue("filename") +"ID\t\t\t" + attachment.getAttributeValue("attachid") + "\nDate\t\t\t" + attachment.getAttributeValue("date") + "\nDescription\t" + attachment.getAttributeValue("desc") + "\nCreator\t\t" + attachment.getCreator() + "\nType\t\t\t" + attachment.getAttributeValue("type") + "\nURL\t\t\t" + attachment.getAttributeValue("task.common.attachment.url");*/ } @Override public Point getToolTipShift(Object object) { return new Point(5, 5); } @Override public int getToolTipDisplayDelayTime(Object object) { return 200; } @Override public int getToolTipTimeDisplayed(Object object) { return 5000; } @Override public void update(ViewerCell cell) { Object element = cell.getElement(); cell.setText(getColumnText(element, cell.getColumnIndex())); Image image = getColumnImage(element, cell.getColumnIndex()); cell.setImage(image); cell.setBackground(getBackground(element)); cell.setForeground(getForeground(element)); cell.setFont(getFont(element)); } @Override public Color getBackground(Object element) { if (model != null && attributeEditorToolkit != null) { ITaskAttachment attachment = (ITaskAttachment) element; if (model.hasIncomingChanges(attachment.getTaskAttribute())) { return attributeEditorToolkit.getColorIncoming(); } } return null; } }