Copyright (c) 2003, 2014 IBM Corporation and others.
This program and the accompanying materials
are made available under the terms of the Eclipse Public License 2.0
which accompanies this distribution, and is available at
https://www.eclipse.org/legal/epl-2.0/
SPDX-License-Identifier: EPL-2.0
Contributors:
IBM - Initial API and implementation
/*******************************************************************************
* Copyright (c) 2003, 2014 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM - Initial API and implementation
*******************************************************************************/
package org.eclipse.core.internal.resources;
import org.eclipse.core.internal.utils.Policy;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.*;
import org.eclipse.core.runtime.jobs.Job;
Batches the activity of a job as a single operation, without obtaining the workspace
lock.
/**
* Batches the activity of a job as a single operation, without obtaining the workspace
* lock.
*/
public abstract class InternalWorkspaceJob extends Job {
private Workspace workspace;
public InternalWorkspaceJob(String name) {
super(name);
this.workspace = (Workspace) ResourcesPlugin.getWorkspace();
}
@Override
public final IStatus run(IProgressMonitor monitor) {
monitor = Policy.monitorFor(monitor);
try {
int depth = -1;
try {
workspace.prepareOperation(null, monitor);
workspace.beginOperation(true);
depth = workspace.getWorkManager().beginUnprotected();
return runInWorkspace(monitor);
} catch (OperationCanceledException e) {
workspace.getWorkManager().operationCanceled();
return Status.CANCEL_STATUS;
} finally {
if (depth >= 0)
workspace.getWorkManager().endUnprotected(depth);
workspace.endOperation(null, false);
}
} catch (CoreException e) {
return e.getStatus();
}
}
protected abstract IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException;
}