1 package org
.argeo
.cms
.ui
.workbench
.util
;
3 import java
.security
.AccessControlContext
;
4 import java
.security
.AccessController
;
5 import java
.security
.PrivilegedAction
;
7 import javax
.security
.auth
.Subject
;
9 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
10 import org
.eclipse
.core
.runtime
.IStatus
;
11 import org
.eclipse
.core
.runtime
.jobs
.Job
;
14 * Propagate authentication to an eclipse job. Typically to execute a privileged
15 * action outside the UI thread
17 public abstract class PrivilegedJob
extends Job
{
18 private final Subject subject
;
20 public PrivilegedJob(String jobName
) {
21 this(jobName
, AccessController
.getContext());
24 public PrivilegedJob(String jobName
,
25 AccessControlContext accessControlContext
) {
27 subject
= Subject
.getSubject(accessControlContext
);
29 // Must be called *before* the job is scheduled,
30 // it is required for the progress window to appear
35 protected IStatus
run(final IProgressMonitor progressMonitor
) {
36 PrivilegedAction
<IStatus
> privilegedAction
= new PrivilegedAction
<IStatus
>() {
37 public IStatus
run() {
38 return doRun(progressMonitor
);
41 return Subject
.doAs(subject
, privilegedAction
);
45 * Implement here what should be executed with default context
48 protected abstract IStatus
doRun(IProgressMonitor progressMonitor
);