/******************************************************************************* * Copyright (c) 2011 Wind River Systems, Inc. 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: * Wind River Systems - initial API and implementation *******************************************************************************/ package org.eclipse.tm.te.tcf.filesystem.controls; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Date; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.graphics.Image; import org.eclipse.tm.te.tcf.filesystem.activator.UIPlugin; import org.eclipse.tm.te.tcf.filesystem.internal.ImageConsts; import org.eclipse.tm.te.tcf.filesystem.model.FSTreeNode; import org.eclipse.tm.te.ui.views.interfaces.IUIConstants; import org.eclipse.ui.IEditorRegistry; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.navigator.CommonNavigator; /** * File system tree control label provider implementation. */ public class FSTreeLabelProvider extends LabelProvider implements ITableLabelProvider { private IEditorRegistry editorRegistry = null; private static final SimpleDateFormat DATE_MODIFIED_FORMAT = new SimpleDateFormat("dd.MM.yyyy HH:mm"); //$NON-NLS-1$ private static final DecimalFormat SIZE_FORMAT = new DecimalFormat(); // Reference to the parent tree viewer private TreeViewer parentViewer; /** * Constructor. */ public FSTreeLabelProvider() { this(null); } /** * Constructor. * * @param viewer The tree viewer or <code>null</code>. */ public FSTreeLabelProvider(TreeViewer viewer) { super(); parentViewer = viewer; } /** * Returns the parent tree viewer instance. * * @return The parent tree viewer or <code>null</code>. */ public final TreeViewer getParentViewer() { if (parentViewer == null) { if (PlatformUI.getWorkbench() != null && PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null && PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() != null) { IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); IViewPart part = page.findView(IUIConstants.ID_EXPLORER); if (part instanceof CommonNavigator) { parentViewer = ((CommonNavigator)part).getCommonViewer(); } } } return parentViewer; } /* (non-Javadoc) * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object) */ @Override public String getText(Object element) { if (element instanceof FSTreeNode) { return ((FSTreeNode)element).name; } return super.getText(element); } /* (non-Javadoc) * @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object) */ @Override public Image getImage(Object element) { if (element != null) { boolean isExpanded = getParentViewer().getExpandedState(element); if (element instanceof FSTreeNode) { FSTreeNode node = (FSTreeNode)element; if ("FSRootDirNode".equals(node.type)) {//$NON-NLS-1$ return isExpanded ? UIPlugin.getImage(ImageConsts.ROOT_DRIVE_OPEN) : UIPlugin.getImage(ImageConsts.ROOT_DRIVE); } else if ("FSDirNode".equals(node.type)) { //$NON-NLS-1$ return isExpanded ? PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER) : UIPlugin.getImage(ImageConsts.FOLDER); } else if ("FSFileNode".equals(node.type)) { //$NON-NLS-1$ String key = node.name; Image image = UIPlugin.getImage(key); if (image == null) { ImageDescriptor descriptor = getEditorRegistry().getImageDescriptor(key); if (descriptor == null) descriptor = getEditorRegistry().getSystemExternalEditorImageDescriptor(key); if (descriptor != null) UIPlugin.getDefault().getImageRegistry().put(key, descriptor); image = UIPlugin.getImage(key); } return image; } } } return super.getImage(element); } /** * Returns the workbench's editor registry. */ private IEditorRegistry getEditorRegistry() { if (editorRegistry == null) { IWorkbench workbench = PlatformUI.getWorkbench(); if (workbench != null) editorRegistry = workbench.getEditorRegistry(); } return editorRegistry; } /* (non-Javadoc) * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int) */ @Override public Image getColumnImage(Object element, int columnIndex) { if (columnIndex == 0) return getImage(element); return null; } /* (non-Javadoc) * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int) */ @Override public String getColumnText(Object element, int columnIndex) { if (columnIndex == 0) return getText(element); if (element instanceof FSTreeNode) { FSTreeNode node = (FSTreeNode)element; if (node.type != null && node.type.startsWith("FS")) { //$NON-NLS-1$ // Pending nodes does not have column texts at all if (node.type.endsWith("PendingNode")) return ""; //$NON-NLS-1$ //$NON-NLS-2$ boolean isDirNode = node.type.endsWith("DirNode"); //$NON-NLS-1$ switch (columnIndex) { case 1: // Directory nodes does not have a size if (!isDirNode) { if (node.attr != null) { return SIZE_FORMAT.format(node.attr.size / 1024) + " KB"; //$NON-NLS-1$ } } break; case 2: if (node.attr != null) { return DATE_MODIFIED_FORMAT.format(new Date(node.attr.mtime)); } break; } } } return ""; //$NON-NLS-1$ } }