com.microsoft.tfs.client.common.ui.framework.diagnostics.cache.CollectionRunnable.java Source code

Java tutorial

Introduction

Here is the source code for com.microsoft.tfs.client.common.ui.framework.diagnostics.cache.CollectionRunnable.java

Source

// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See License.txt in the repository root.

package com.microsoft.tfs.client.common.ui.framework.diagnostics.cache;

import java.lang.reflect.InvocationTargetException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.operation.IRunnableWithProgress;

import com.microsoft.tfs.client.common.ui.Messages;

public class CollectionRunnable implements IRunnableWithProgress {
    private final List dataProviderWrappers = new ArrayList();
    private boolean cancelled;

    public CollectionRunnable(final DataProviderInfo[] dataProviders) {
        for (int i = 0; i < dataProviders.length; i++) {
            dataProviderWrappers.add(new DataProviderWrapper(dataProviders[i]));
        }
    }

    @Override
    public void run(final IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
        cancelled = false;
        monitor.beginTask(Messages.getString("CollectionRunnable.CollectiongDataProgressText"), //$NON-NLS-1$
                dataProviderWrappers.size());

        for (final Iterator it = dataProviderWrappers.iterator(); it.hasNext();) {
            if (monitor.isCanceled()) {
                cancelled = true;
                break;
            }

            final DataProviderWrapper wrapper = (DataProviderWrapper) it.next();
            monitor.subTask(messageForDataProvider(wrapper));
            wrapper.populate();

            if (!wrapper.isAvailable()) {
                it.remove();
            }

            // Thread.sleep(200);

            monitor.worked(1);
        }

        monitor.done();
    }

    private String messageForDataProvider(final DataProviderWrapper wrapper) {
        final String messageFormat = Messages.getString("CollectionRunnable.ProviderDescriptionFormat"); //$NON-NLS-1$
        return MessageFormat.format(messageFormat, wrapper.getDataProviderInfo().getCategory().getLabel(),
                wrapper.getDataProviderInfo().getLabel());
    }

    public DataProviderWrapper[] getDataProviderWrappers() {
        return (DataProviderWrapper[]) dataProviderWrappers
                .toArray(new DataProviderWrapper[dataProviderWrappers.size()]);
    }

    public boolean wasCancelled() {
        return cancelled;
    }
}