/******************************************************************************* * Copyright (c) 2008, 2010 Nokia 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: * Nokia - Initial API and implementation *******************************************************************************/ package org.eclipse.cdt.debug.internal.ui.views.executables; import java.util.Date; import java.util.List; import org.eclipse.cdt.debug.core.executables.Executable; import org.eclipse.cdt.debug.core.executables.ExecutablesManager; import org.eclipse.cdt.debug.core.executables.IExecutablesChangeListener; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerCell; import org.eclipse.ui.progress.WorkbenchJob; import com.ibm.icu.text.DateFormat; class ExecutablesContentProvider extends ColumnLabelProvider implements IStructuredContentProvider, ITreeContentProvider, IExecutablesChangeListener { final private TreeViewer viewer; public ExecutablesContentProvider(final TreeViewer viewer) { this.viewer = viewer; ExecutablesManager.getExecutablesManager().addExecutablesChangeListener(this); } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } /* (non-Javadoc) * @see org.eclipse.jface.viewers.BaseLabelProvider#dispose() */ @Override public void dispose() { ExecutablesManager.getExecutablesManager().removeExecutablesChangeListener(this); } public Object[] getElements(final Object inputElement) { if (inputElement instanceof ExecutablesManager) { ExecutablesManager em = (ExecutablesManager) inputElement; return em.getExecutables().toArray(); } return new Object[] {}; } public Object getParent(Object element) { return null; } public boolean hasChildren(Object element) { return false; } @Override public void update(ViewerCell cell) { super.update(cell); Object element = cell.getElement(); if (element instanceof Executable) { Executable exe = (Executable) element; String cellText = exe.getName(); if (cell.getColumnIndex() == 1) cellText = exe.getProject().getName(); else if (cell.getColumnIndex() == 2) cellText = exe.getPath().toOSString(); else if (cell.getColumnIndex() == 3) { cellText = ""; //$NON-NLS-1$ IPath path = exe.getPath(); if (path != null && path.toFile().exists()) { long fileLength = path.toFile().length(); cellText = Long.toString(fileLength); } cell.setImage(null); } else if (cell.getColumnIndex() == 4) { cellText = ""; //$NON-NLS-1$ IPath path = exe.getPath(); if (path != null && path.toFile().exists()) { long modified = path.toFile().lastModified(); cellText = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(new Date(modified)); } cell.setImage(null); } else if (cell.getColumnIndex() == 5) { cellText = ""; //$NON-NLS-1$ String fileExtension = exe.getPath().getFileExtension(); if (fileExtension != null) cellText = fileExtension; } cell.setText(cellText); } } @Override public String getText(Object element) { if (element instanceof Executable) { return ((Executable) element).getName(); } else return super.getText(element); } public Object[] getChildren(Object parentElement) { return new Object[] {}; } /* (non-Javadoc) * @see org.eclipse.cdt.debug.core.executables.IExecutablesChangeListener#executablesListChanged() */ public void executablesListChanged() { new WorkbenchJob("execs list changed") { //$NON-NLS-1$ @Override public IStatus runInUIThread(IProgressMonitor monitor) { viewer.refresh(null); if (viewer instanceof BaseViewer) { ((BaseViewer)viewer).packColumns(); } return Status.OK_STATUS; } }.schedule(); } /* (non-Javadoc) * @see org.eclipse.cdt.debug.core.executables.IExecutablesChangeListener#executablesChanged(java.util.List) */ public void executablesChanged(List<Executable> executables) { // Our concern is only if the list of executables changed. The // content provider for the source files viewer will care about // whether the Executables themselves change } }