/***************************************************************************** * Copyright (c) 2006-2013, Cloudsmith Inc. * The code, documentation and other materials contained herein have been * licensed under the Eclipse Public License - v 1.0 by the copyright holder * listed above, as the Initial Contributor under such license. The text of * such license is available at www.eclipse.org. *****************************************************************************/ package org.eclipse.buckminster.core.materializer; import java.util.Arrays; import org.eclipse.buckminster.core.Messages; import org.eclipse.buckminster.core.RMContext; import org.eclipse.buckminster.core.metadata.StorageManager; import org.eclipse.buckminster.core.metadata.model.WorkspaceBinding; import org.eclipse.buckminster.runtime.MonitorUtils; 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.jobs.IJobChangeEvent; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.JobChangeAdapter; /** * @author Thomas Hallgren */ public class WorkspaceBindingInstallJob extends WorkspaceJob { private static class Repeater extends JobChangeAdapter { @Override public void done(IJobChangeEvent event) { Job job = active; if (job != null) job.schedule(REPEAT_DELAY); } } private static WorkspaceBindingInstallJob active = null; public static final int REPEAT_DELAY = 60000; public static void start() { if (active != null) return; active = new WorkspaceBindingInstallJob(); active.addJobChangeListener(new Repeater()); active.schedule(5000); } public static void stop() { Job job = active; active = null; if (job != null) job.cancel(); } private WorkspaceBindingInstallJob() { super(Messages.Workspace_binding_installer); setPriority(Job.BUILD); setSystem(true); setUser(false); } @Override public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException { StorageManager sm = StorageManager.getDefault(); WorkspaceBinding[] wsBindings = sm.getWorkspaceBindings().getElements(); if (wsBindings.length == 0) { MonitorUtils.complete(monitor); return Status.OK_STATUS; } monitor.beginTask(null, wsBindings.length * 100); WorkspaceMaterializer wsMaterializer = new WorkspaceMaterializer(); // Sort by timestamp // Arrays.sort(wsBindings); for (WorkspaceBinding wsBinding : wsBindings) { wsMaterializer.installLocal(wsBinding, new RMContext(wsBinding.getProperties()), MonitorUtils.subMonitor(monitor, 100)); wsBinding.remove(sm); } monitor.done(); return Status.OK_STATUS; } }