1 11 package org.eclipse.debug.internal.ui.actions.context; 12 13 import org.eclipse.core.runtime.IAdaptable; 14 import org.eclipse.core.runtime.IProgressMonitor; 15 import org.eclipse.core.runtime.IStatus; 16 import org.eclipse.core.runtime.Status; 17 import org.eclipse.core.runtime.jobs.Job; 18 import org.eclipse.debug.core.DebugException; 19 import org.eclipse.debug.core.model.IDisconnect; 20 import org.eclipse.debug.internal.ui.actions.provisional.IAsynchronousDisconnectAdapter; 21 import org.eclipse.debug.internal.ui.actions.provisional.IBooleanRequestMonitor; 22 import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousRequestMonitor; 23 import org.eclipse.debug.ui.IDebugUIConstants; 24 25 30 public class DisconnectAdapter extends StandardActionAdapter implements IAsynchronousDisconnectAdapter { 31 32 35 public void canDisconnect(final Object element, final IBooleanRequestMonitor requestMonitor) { 36 Job job = new Job("canDisconnect") { protected IStatus run(IProgressMonitor monitor) { 38 IDisconnect disconnect = getTarget(element); 39 if (disconnect != null) 40 requestMonitor.setResult(disconnect.canDisconnect()); 41 else 42 requestMonitor.setResult(false); 43 requestMonitor.done(); 44 return Status.OK_STATUS; 45 } 46 }; 47 job.setSystem(true); 48 job.setRule(createUpdateSchedulingRule()); 49 job.schedule(); 50 } 51 52 55 public void isDisconnected(final Object element, final IBooleanRequestMonitor requestMonitor) { 56 Job job = new Job("isDisconnected") { protected IStatus run(IProgressMonitor monitor) { 58 IDisconnect disconnect = getTarget(element); 59 if (disconnect != null) { 60 requestMonitor.setResult(disconnect.isDisconnected()); 61 } else { 62 requestMonitor.setResult(false); 63 } 64 requestMonitor.done(); 65 return Status.OK_STATUS; 66 } 67 }; 68 job.setSystem(true); 69 job.setRule(createUpdateSchedulingRule()); 70 job.schedule(); 71 } 72 73 76 public void disconnect(final Object element, final IAsynchronousRequestMonitor requestMonitor) { 77 Job job = new Job("isDisconnected") { protected IStatus run(IProgressMonitor monitor) { 79 IDisconnect disconnect = getTarget(element); 80 81 if (disconnect == null) { 82 requestMonitor.setStatus(new Status(IStatus.ERROR, IDebugUIConstants.PLUGIN_ID, IDebugUIConstants.INTERNAL_ERROR, "element must be an instance of or adapt to IDisconnect", null)); 84 } else { 85 try { 86 disconnect.disconnect(); 87 } catch (DebugException e) { 88 requestMonitor.setStatus(e.getStatus()); 89 } 90 } 91 requestMonitor.done(); 92 return Status.OK_STATUS; 93 } 94 }; 95 job.setSystem(true); 96 job.schedule(); 97 } 98 99 private IDisconnect getTarget(Object element) { 100 if (element instanceof IDisconnect) { 101 return (IDisconnect) element; 102 } else if (element instanceof IAdaptable) { 103 return (IDisconnect) ((IAdaptable) element).getAdapter(IDisconnect.class); 104 } 105 return null; 106 } 107 108 } 109 | Popular Tags |