1 11 12 package org.eclipse.debug.internal.ui.actions.context; 13 14 import org.eclipse.core.runtime.IAdaptable; 15 import org.eclipse.core.runtime.IProgressMonitor; 16 import org.eclipse.core.runtime.IStatus; 17 import org.eclipse.core.runtime.Status; 18 import org.eclipse.core.runtime.jobs.Job; 19 import org.eclipse.debug.core.DebugException; 20 import org.eclipse.debug.core.model.ISuspendResume; 21 import org.eclipse.debug.internal.ui.actions.provisional.IAsynchronousSuspendResumeAdapter; 22 import org.eclipse.debug.internal.ui.actions.provisional.IBooleanRequestMonitor; 23 import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousRequestMonitor; 24 import org.eclipse.debug.ui.IDebugUIConstants; 25 26 public class SuspendResumeAdapter extends StandardActionAdapter implements IAsynchronousSuspendResumeAdapter { 27 28 public void canResume(final Object element, final IBooleanRequestMonitor monitor) { 29 Job job = new Job("canResume") { protected IStatus run(IProgressMonitor pm) { 31 if (!pm.isCanceled()) { 32 ISuspendResume suspendResume = getTarget(element); 33 if (suspendResume != null) 34 monitor.setResult(suspendResume.canResume()); 35 else 36 monitor.setResult(false); 37 monitor.done(); 38 } 39 return Status.OK_STATUS; 40 } 41 }; 42 job.setSystem(true); 43 job.setRule(createUpdateSchedulingRule()); 44 job.schedule(); 45 } 46 47 public void canSuspend(final Object element, final IBooleanRequestMonitor monitor) { 48 Job job = new Job("canSuspend") { protected IStatus run(IProgressMonitor pm) { 50 if (!pm.isCanceled()) { 51 ISuspendResume suspendResume = getTarget(element); 52 if (suspendResume != null) 53 monitor.setResult(suspendResume.canSuspend()); 54 else 55 monitor.setResult(false); 56 monitor.done(); 57 } 58 return Status.OK_STATUS; 59 } 60 }; 61 job.setSystem(true); 62 job.setRule(createUpdateSchedulingRule()); 63 job.schedule(); 64 } 65 66 public void isSuspended(final Object element, final IBooleanRequestMonitor monitor) { 67 Job job = new Job("isSuspended") { protected IStatus run(IProgressMonitor pm) { 69 if (!pm.isCanceled()) { 70 ISuspendResume suspendResume = getTarget(element); 71 if (suspendResume != null) 72 monitor.setResult(suspendResume.isSuspended()); 73 else 74 monitor.setResult(false); 75 monitor.done(); 76 } 77 return Status.OK_STATUS; 78 } 79 }; 80 job.setSystem(true); 81 job.setRule(createUpdateSchedulingRule()); 82 job.schedule(); 83 } 84 85 public void resume(final Object element, final IAsynchronousRequestMonitor monitor) { 86 Job job = new Job("resume") { protected IStatus run(IProgressMonitor pm) { 88 if (!pm.isCanceled()) { 89 ISuspendResume suspendResume = getTarget(element); 90 if (suspendResume != null) { 91 try { 92 suspendResume.resume(); 93 } catch (DebugException e) { 94 monitor.setStatus(e.getStatus()); 95 } 96 } else { 97 monitor.setStatus(new Status(IStatus.ERROR, IDebugUIConstants.PLUGIN_ID, IDebugUIConstants.INTERNAL_ERROR, "element must be an instance of or adapt to ISuspendResume", null)); 99 } 100 monitor.done(); 101 } 102 return Status.OK_STATUS; 103 } 104 }; 105 job.setSystem(true); 106 job.schedule(); 107 } 108 109 public void suspend(final Object element, final IAsynchronousRequestMonitor monitor) { 110 Job job = new Job("suspend") { protected IStatus run(IProgressMonitor pm) { 112 if (!pm.isCanceled()) { 113 ISuspendResume suspendResume = getTarget(element); 114 if (suspendResume != null) { 115 try { 116 suspendResume.suspend(); 117 } catch (DebugException e) { 118 monitor.setStatus(e.getStatus()); 119 } 120 } else { 121 monitor.setStatus(new Status(IStatus.ERROR, IDebugUIConstants.PLUGIN_ID, IDebugUIConstants.INTERNAL_ERROR, "element must be an instance of or adapt to ISuspendResume", null)); 123 } 124 monitor.done(); 125 } 126 return Status.OK_STATUS; 127 } 128 }; 129 job.setSystem(true); 130 job.schedule(); 131 } 132 133 private ISuspendResume getTarget(Object element) { 134 if (element instanceof ISuspendResume) { 135 return (ISuspendResume) element; 136 } else if (element instanceof IAdaptable) { 137 return (ISuspendResume) ((IAdaptable) element).getAdapter(ISuspendResume.class); 138 } 139 return null; 140 } 141 142 } 143 | Popular Tags |