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.ide.core.CoreStrings;
import com.aptana.ide.core.io.IConnectionPoint;
import com.aptana.ide.core.io.syncing.VirtualFileSyncPair;
import com.aptana.ide.core.ui.CoreUIUtils;
import com.aptana.ide.syncing.ui.handlers.SyncEventHandlerAdapterWithProgressMonitor;
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;
public 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) {
super.syncDone(item);
fSyncDoneCount++;
checkDone();
}
@Override
public boolean syncErrorEvent(VirtualFileSyncPair item, Exception e) {
showError(e.getLocalizedMessage(), e);
fSyncDoneCount++;
checkDone();
return fContinue && super.syncErrorEvent(item, e);
}
@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;
CoreUIUtils.getDisplay().syncExec(new Runnable() {
public void run() {
MessageDialog md = new MessageDialog(CoreUIUtils.getActiveShell(), CoreStrings.ERROR, null, message,
MessageDialog.WARNING, new String[] { CoreStrings.CONTINUE, CoreStrings.CANCEL }, 1);
fContinue = (md.open() == 0);
}
});
}
}