Package org.codemap.util

Source Code of org.codemap.util.EclipseTaskFactory$M

package org.codemap.util;

import java.util.concurrent.CancellationException;

import org.codemap.CodemapCore;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.core.runtime.jobs.Job;

import ch.akuhn.util.ProgressMonitor;
import ch.akuhn.values.TaskFactory;

public class EclipseTaskFactory extends TaskFactory {

    static class M extends ProgressMonitor {

        private IProgressMonitor monitor;
        private String name;

        public M(String name, IProgressMonitor monitor) {
            this.name = name;
            this.monitor = monitor;
        }

        @Override
        public void begin(int total) {
            monitor.beginTask(name, total);
        }

        @Override
        public CancellationException cancel() {
            monitor.setCanceled(true);
            return new CancellationException();
        }

        @Override
        public void done() {
            monitor.done();
        }

        @Override
        protected String getName() {
            return name;
        }

        @Override
        public boolean isCanceled() {
            return monitor.isCanceled();
        }

        @Override
        public void setName(String name) {
            monitor.setTaskName(this.name = name);
        }

        @Override
        public void worked(int work) {
            monitor.worked(work);
        }

        @Override
        protected void worked(double work) {
            throw new UnsupportedOperationException();
        }
       
        @Override
        public ProgressMonitor spawn(String newName, int ticks) {
            return new M(newName, new SubProgressMonitor(monitor, ticks));
        }
       
    }

    @Override
    public Task makeTask() {
        return new T("");
    }   

    static class T extends Job implements Task {

        private Callback callback;

        public T(String name) {
            super(name);
        }

        @Override
        protected IStatus run(IProgressMonitor monitor) {
            Throwable error = callback.run(new M(callback.getName(), monitor));
            if (monitor.isCanceled()) return Status.CANCEL_STATUS;
            if (error == null) return Status.OK_STATUS;
            return new Status(IStatus.ERROR, CodemapCore.PLUGIN_ID, callback.getName(), error);
        }

        @Override
        public void start(Callback taskCallback) {
            this.callback = taskCallback;
            this.schedule();
        }

        @Override
        public void stop() {
            this.cancel();
        }
       
    }
   
}
TOP

Related Classes of org.codemap.util.EclipseTaskFactory$M

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.