package com.mobilesorcery.sdk.html5.ui; import java.util.ArrayList; import java.util.List; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.model.IDebugTarget; import org.eclipse.debug.core.model.IStackFrame; import org.eclipse.debug.core.model.IThread; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.handlers.HandlerUtil; import org.eclipse.wst.jsdt.debug.core.model.IJavaScriptDebugTarget; import com.mobilesorcery.sdk.html5.Html5Plugin; import com.mobilesorcery.sdk.html5.debug.ReloadVirtualMachine; public class ReloadHandler extends AbstractHandler { public ReloadHandler() { //Html5Plugin.getDefault().getReloadServer().addSessionListener(this); } public void dispose() { } @Override public Object execute(ExecutionEvent event) throws ExecutionException { if (!Html5Plugin.getDefault().shouldFetchRemotely()) { IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event); MessageDialog.openInformation(window.getShell(), "Cannot refresh", "Cannot reload on-device contents.\nTo enable this feature, go to \"Preferences > MoSync Tool > JavaScript On-Device Debug\" and activate \"Load source code and resources from debug server\"."); } ArrayList<ReloadVirtualMachine> vms = new ArrayList<ReloadVirtualMachine>(); extractVMs(HandlerUtil.getCurrentSelection(event), vms); for (ReloadVirtualMachine vm : vms) { vm.reload(); } return null; } public static boolean extractVMs(Object receiver, List<ReloadVirtualMachine> result) { if (receiver instanceof IStructuredSelection) { IStructuredSelection selection = (IStructuredSelection) receiver; List potentialVMs = selection.toList(); for (Object potentialVM : potentialVMs) { extractVMs(potentialVM, result); } return !potentialVMs.isEmpty(); } if (receiver instanceof ILaunch) { ILaunch launch = (ILaunch) receiver; receiver = launch.getDebugTarget(); } if (receiver instanceof IThread) { IThread thread = (IThread) receiver; receiver = thread.getDebugTarget(); } if (receiver instanceof IStackFrame) { IStackFrame stackFrame = (IStackFrame) receiver; stackFrame.getDebugTarget(); } if (receiver instanceof IAdaptable) { IAdaptable adapt = (IAdaptable) receiver; receiver = adapt.getAdapter(IDebugTarget.class); } if (receiver instanceof IJavaScriptDebugTarget) { IJavaScriptDebugTarget debugTarget = (IJavaScriptDebugTarget) receiver; List<ReloadVirtualMachine> vms = Html5Plugin.getDefault().getReloadServer().getVMs(false); for (ReloadVirtualMachine vm : vms) { if (debugTarget == vm.getJavaScriptDebugTarget()) { if (result != null) { result.add(vm); } return true; } } } return false; } }