Package org.bndtools.builder.listeners

Source Code of org.bndtools.builder.listeners.CnfSetupBuildListener$RebuildProjectsJob

package org.bndtools.builder.listeners;

import java.util.Collection;
import java.util.concurrent.atomic.AtomicReference;

import org.bndtools.build.api.AbstractBuildListener;
import org.bndtools.builder.NewBuilder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.resources.WorkspaceJob;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.SubMonitor;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.ui.progress.UIJob;

import aQute.bnd.build.Project;
import aQute.bnd.build.Workspace;
import bndtools.central.Central;
import bndtools.wizards.workspace.CnfSetupWizard;

public class CnfSetupBuildListener extends AbstractBuildListener {

    private static final long DELAY = 1500;
    private static final AtomicReference<CnfSetupJob> jobRef = new AtomicReference<CnfSetupBuildListener.CnfSetupJob>();

    @Override
    public void buildStarting(final IProject project) {
        CnfSetupJob job = new CnfSetupJob();
        if (jobRef.compareAndSet(null, job)) {
            job.schedule(DELAY);
        }
    }

    private static class CnfSetupJob extends UIJob {

        public CnfSetupJob() {
            super("Cnf Initialisation");
        }

        @Override
        public IStatus runInUIThread(IProgressMonitor monitor) {
            boolean shown = CnfSetupWizard.showIfNeeded(false);

            if (shown)
                new RebuildProjectsJob().schedule(DELAY);

            return Status.OK_STATUS;
        }

    }

    private static class RebuildProjectsJob extends WorkspaceJob {

        public RebuildProjectsJob() {
            super("Rebuilding bnd projects after creating workspace configuration.");
        }

        @Override
        public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
            Collection<Project> projects = null;
            try {
                Workspace ws = Central.getWorkspace();
                projects = ws.getBuildOrder();
            } catch (Exception e) {
                throw new CoreException(new Status(IStatus.ERROR, NewBuilder.PLUGIN_ID, 0, "Error rebuilding bnd projects after creating workspace configuration.", e));
            }
            if (projects == null || projects.isEmpty())
                return Status.OK_STATUS;

            SubMonitor progress = SubMonitor.convert(monitor, projects.size());
            for (Project project : projects) {
                IJavaProject eclipseProject = Central.getJavaProject(project);
                eclipseProject.getProject().build(IncrementalProjectBuilder.FULL_BUILD, progress.newChild(1, SubMonitor.SUPPRESS_NONE));
            }
            return Status.OK_STATUS;
        }

    }

}
TOP

Related Classes of org.bndtools.builder.listeners.CnfSetupBuildListener$RebuildProjectsJob

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.