com.aptana.ide.syncing.ui.actions.SyncActionEventHandler.java Source code

Java tutorial

Introduction

Here is the source code for com.aptana.ide.syncing.ui.actions.SyncActionEventHandler.java

Source

/**
 * 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);
            }
        });
    }
}