/** * Aptana Studio * Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the GNU Public License (GPL) v3 (with exceptions). * Please see the license.html included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package com.aptana.ide.syncing.ui.old.views; import java.text.DateFormat; import java.util.Date; import org.eclipse.core.filesystem.IFileInfo; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ITableColorProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.widgets.Display; import com.aptana.core.util.StringUtil; import com.aptana.ide.syncing.core.old.ISyncResource; import com.aptana.ide.syncing.core.old.SyncFile; import com.aptana.ide.syncing.core.old.SyncFolder; import com.aptana.ide.syncing.core.old.SyncState; import com.aptana.ide.syncing.core.old.VirtualFileSyncPair; import com.aptana.ide.syncing.ui.SyncingUIPlugin; /** * Label and color provider for the smart sync viewer. * * @author Kevin Sawicki (ksawicki@aptana.com) * @author Michael Xia (mxia@aptana.com) */ public class SmartSyncLabelProvider implements ITableLabelProvider, ITableColorProvider { private FileLabelProvider fImages; private Color fNewColor; private Color fOverwriteColor; private Color fUpdateColor; private Color fDeleteColor; private Color fMixedColor; private Display fDisplay; private int fSyncDirection; private int fPresentationType; private boolean fDeleteRemoteFiles; private boolean fDeleteLocalFiles; /** * Constructor. */ public SmartSyncLabelProvider(Display display) { fDisplay = display; fImages = new FileLabelProvider(); fNewColor = new Color(fDisplay, new RGB(96, 180, 247)); fOverwriteColor = new Color(fDisplay, new RGB(255, 165, 0)); fUpdateColor = new Color(fDisplay, new RGB(173, 216, 230)); fDeleteColor = fDisplay.getSystemColor(SWT.COLOR_RED); fMixedColor = new Color(fDisplay, new RGB(164, 164, 164)); } /** * Sets the sync direction. * * @param direction * the direction for doing the sync */ public void setSyncDirection(int direction) { fSyncDirection = direction; } /** * Sets the presentation type. * * @param type * the type of presentation for the viewer */ public void setPresentationType(int type) { fPresentationType = type; } /** * Sets the indication of if deleting remote files is selected. * * @param delete * true if deleting remote files is selected, false otherwise */ public void setDeleteRemoteFiles(boolean delete) { fDeleteRemoteFiles = delete; } /** * Sets the indication of if deleting local files is selected. * * @param delete * true if deleting local files is selected, false otherwise */ public void setDeleteLocalFiles(boolean delete) { fDeleteLocalFiles = delete; } /** * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener) */ public void addListener(ILabelProviderListener listener) { } /** * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener) */ public void removeListener(ILabelProviderListener listener) { } /** * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String) */ public boolean isLabelProperty(Object element, String property) { return false; } /** * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose() */ public void dispose() { fImages.dispose(); disposeColor(fNewColor); disposeColor(fOverwriteColor); disposeColor(fUpdateColor); disposeColor(fMixedColor); } /** * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int) */ public String getColumnText(Object element, int columnIndex) { if (element instanceof ISyncResource) { ISyncResource resource = (ISyncResource) element; switch (columnIndex) { case 0: if (fPresentationType == OptionsToolBar.TREE_VIEW) { return ((ISyncResource) element).getName(); } if (fPresentationType == OptionsToolBar.FLAT_VIEW) { return ((ISyncResource) element).getPath().toString(); } // if (fPresentationType == OptionsToolBar.COMPRESSED_VIEW) // { // if (resource instanceof SyncFile) // { // return ((ISyncResource) element).getName(); // } // if (resource instanceof SyncFolder) // { // SyncFolder folder = (SyncFolder) resource; // if (folder.getParent() != null && // !folder.getParent().containsFiles()) // { // return ((ISyncResource) // element).getPath().toString(); // } // return ((ISyncResource) element).getName(); // } // } case 2: if (resource.isSkipped()) { return Messages.SmartSyncDialog_Skipped; } if (fSyncDirection == DirectionToolBar.FORCE_UPLOAD || fSyncDirection == DirectionToolBar.UPLOAD) { return ""; //$NON-NLS-1$ } switch (resource.getSyncState()) { case SyncState.ServerItemIsNewer: if (fSyncDirection == DirectionToolBar.FORCE_DOWNLOAD) { return Messages.SmartSyncDialog_Overwrite; } return Messages.SmartSyncDialog_Update; case SyncFolder.MIXED: return Messages.SmartSyncDialog_Modified; case SyncState.ClientItemDeleted: case SyncState.ClientItemOnly: return fDeleteLocalFiles ? Messages.SmartSyncDialog_Delete : ""; //$NON-NLS-1$ case SyncState.ServerItemOnly: if (fSyncDirection == DirectionToolBar.FORCE_DOWNLOAD || fSyncDirection == DirectionToolBar.DOWNLOAD || !fDeleteRemoteFiles) { return Messages.SmartSyncDialog_New; } default: return StringUtil.EMPTY; } case 3: if (resource.isSkipped()) { return Messages.SmartSyncDialog_Skipped; } if (fSyncDirection == DirectionToolBar.FORCE_DOWNLOAD || fSyncDirection == DirectionToolBar.DOWNLOAD) { return StringUtil.EMPTY; } switch (resource.getSyncState()) { case SyncState.ClientItemIsNewer: if (fSyncDirection == DirectionToolBar.FORCE_UPLOAD) { return Messages.SmartSyncDialog_Overwrite; } return Messages.SmartSyncDialog_Update; case SyncFolder.MIXED: return Messages.SmartSyncDialog_Modified; case SyncState.ServerItemDeleted: case SyncState.ServerItemOnly: return fDeleteRemoteFiles ? Messages.SmartSyncDialog_Delete : ""; //$NON-NLS-1$ case SyncState.ClientItemOnly: if (fSyncDirection == DirectionToolBar.FORCE_UPLOAD || fSyncDirection == DirectionToolBar.UPLOAD || !fDeleteLocalFiles) { return Messages.SmartSyncDialog_New; } default: return StringUtil.EMPTY; } case 4: VirtualFileSyncPair pair = resource.getPair(); return (pair == null) ? StringUtil.EMPTY : getModificationDate(pair.getSourceFileInfo()); case 5: pair = resource.getPair(); return (pair == null) ? StringUtil.EMPTY : getModificationDate(pair.getDestinationFileInfo()); default: return StringUtil.EMPTY; } } return StringUtil.EMPTY; } /** * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int) */ public Image getColumnImage(Object element, int columnIndex) { if (columnIndex == 0) { if (element instanceof ISyncResource) { ISyncResource resource = (ISyncResource) element; int state = resource.getTransferState(); if (state == ISyncResource.ERROR) { return SyncingUIPlugin.getImage("icons/full/obj16/no.png"); //$NON-NLS-1$ } if (state == ISyncResource.SYNCED) { return SyncingUIPlugin.getImage("icons/full/obj16/ok.png"); //$NON-NLS-1$ } return SyncingUIPlugin.getImage("icons/full/obj16/empty.png"); //$NON-NLS-1$ } if (element instanceof SyncFile) { SyncFile file = (SyncFile) element; if (file.getPair() != null) { if (file.getPair().getSourceFile() != null) { return fImages.getImage(file.getPair().getSourceFile()); } if (file.getPair().getDestinationFile() != null) { return fImages.getImage(file.getPair().getDestinationFile()); } } } else if (element instanceof SyncFolder) { return SyncingUIPlugin.getImage("icons/full/obj16/folder.gif"); //$NON-NLS-1$ } } else if (columnIndex == 1) { if (element instanceof ISyncResource) { ISyncResource resource = (ISyncResource) element; if (resource.isSkipped()) { return SyncingUIPlugin.getImage("icons/full/obj16/checked.gif"); //$NON-NLS-1$ } return SyncingUIPlugin.getImage("icons/full/obj16/unchecked.gif"); //$NON-NLS-1$ } } return null; } /** * @see org.eclipse.jface.viewers.ITableColorProvider#getBackground(java.lang.Object, int) */ public Color getBackground(Object element, int columnIndex) { if (element instanceof ISyncResource) { ISyncResource resource = (ISyncResource) element; Color color = fDisplay.getSystemColor(SWT.COLOR_LIST_BACKGROUND); switch (columnIndex) { case 2: if (resource.isSkipped()) { return color; } if (fSyncDirection == DirectionToolBar.FORCE_UPLOAD || fSyncDirection == DirectionToolBar.UPLOAD) { return null; } switch (resource.getSyncState()) { case SyncState.ClientItemDeleted: case SyncState.ClientItemOnly: return fDeleteLocalFiles ? fDeleteColor : null; case SyncState.ServerItemOnly: if (fSyncDirection == DirectionToolBar.FORCE_DOWNLOAD || fSyncDirection == DirectionToolBar.DOWNLOAD || !fDeleteRemoteFiles) { return fNewColor; } return null; case SyncState.ServerItemIsNewer: if (fSyncDirection == DirectionToolBar.FORCE_DOWNLOAD) { return fOverwriteColor; } return fUpdateColor; case SyncFolder.MIXED: return fMixedColor; default: return null; } case 3: if (resource.isSkipped()) { return color; } if (fSyncDirection == DirectionToolBar.FORCE_DOWNLOAD || fSyncDirection == DirectionToolBar.DOWNLOAD) { return null; } switch (resource.getSyncState()) { case SyncState.ServerItemDeleted: case SyncState.ServerItemOnly: return fDeleteRemoteFiles ? fDeleteColor : null; case SyncState.ClientItemOnly: if (fSyncDirection == DirectionToolBar.FORCE_UPLOAD || fSyncDirection == DirectionToolBar.UPLOAD || !fDeleteLocalFiles) { return fNewColor; } return null; case SyncState.ClientItemIsNewer: if (fSyncDirection == DirectionToolBar.FORCE_UPLOAD) { return fOverwriteColor; } return fUpdateColor; case SyncFolder.MIXED: return fMixedColor; default: return null; } default: return null; } } return null; } /** * @see org.eclipse.jface.viewers.ITableColorProvider#getForeground(java.lang.Object, int) */ public Color getForeground(Object element, int columnIndex) { if (element instanceof ISyncResource) { ISyncResource resource = (ISyncResource) element; if (!resource.isSkipped()) { Color color = fDisplay.getSystemColor(SWT.COLOR_WHITE); if (columnIndex == 2) { if ((resource.getSyncState() == SyncState.ClientItemOnly || resource.getSyncState() == SyncState.ClientItemDeleted) && fDeleteLocalFiles && (fSyncDirection == DirectionToolBar.BOTH || fSyncDirection == DirectionToolBar.DOWNLOAD || fSyncDirection == DirectionToolBar.FORCE_DOWNLOAD)) { return color; } } else if (columnIndex == 3) { if ((resource.getSyncState() == SyncState.ServerItemOnly || resource.getSyncState() == SyncState.ServerItemDeleted) && fDeleteRemoteFiles && (fSyncDirection == DirectionToolBar.BOTH || fSyncDirection == DirectionToolBar.UPLOAD || fSyncDirection == DirectionToolBar.FORCE_UPLOAD)) { return color; } } } } return null; } private static void disposeColor(Color color) { if (color != null && !color.isDisposed()) { color.dispose(); } } private static String getModificationDate(IFileInfo file) { if (file == null) { return ""; //$NON-NLS-1$ } Date d; d = new Date(file.getLastModified()); DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM); return df.format(d); } }