/** * 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.actions; import java.text.MessageFormat; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.MessageDialog; import com.aptana.core.CoreStrings; import com.aptana.ide.core.io.IConnectionPoint; import com.aptana.ide.syncing.core.old.VirtualFileSyncPair; import com.aptana.ide.syncing.core.old.handlers.SyncEventHandlerAdapterWithProgressMonitor; import com.aptana.ui.util.UIUtils; class SyncActionEventHandler extends SyncEventHandlerAdapterWithProgressMonitor { public static interface Client { public void syncCompleted(); } private String fTaskTitle; private int fItemCount; private IProgressMonitor fMonitor; private Client fClient; private int fSyncDoneCount; private boolean fContinue; SyncActionEventHandler(String taskTitle, int itemCount, IProgressMonitor monitor, Client client) { super(monitor); fTaskTitle = taskTitle; fItemCount = itemCount; fMonitor = monitor; fClient = client; } @Override public void syncDone(VirtualFileSyncPair item, IProgressMonitor monitor) { super.syncDone(item, monitor); fSyncDoneCount++; checkDone(); } @Override public boolean syncErrorEvent(VirtualFileSyncPair item, Exception e, IProgressMonitor monitor) { showError(e.getLocalizedMessage(), e); fSyncDoneCount++; checkDone(); return fContinue && super.syncErrorEvent(item, e, monitor); } @Override public boolean getFilesEvent(IConnectionPoint manager, String path) { fMonitor.subTask(MessageFormat.format("{0} {1}", fTaskTitle, path)); //$NON-NLS-1$ return super.getFilesEvent(manager, path); } private void checkDone() { if (fSyncDoneCount == fItemCount && fClient != null) { fClient.syncCompleted(); } } private void showError(final String message, final Exception e) { fContinue = false; UIUtils.getDisplay().syncExec(new Runnable() { public void run() { MessageDialog md = new MessageDialog(UIUtils.getActiveShell(), CoreStrings.ERROR + " " + fTaskTitle, //$NON-NLS-1$ null, message, MessageDialog.WARNING, new String[] { CoreStrings.CONTINUE, CoreStrings.CANCEL }, 1); fContinue = (md.open() == 0); } }); } }