package com.mobilesorcery.sdk.html5.ui;
import java.util.Set;
import java.util.concurrent.TimeoutException;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.handlers.HandlerUtil;
import com.mobilesorcery.sdk.core.CoreMoSyncPlugin;
import com.mobilesorcery.sdk.core.IProcessConsole;
import com.mobilesorcery.sdk.core.MoSyncBuilder;
import com.mobilesorcery.sdk.html5.Html5Plugin;
import com.mobilesorcery.sdk.html5.debug.ReloadVirtualMachine;
import com.mobilesorcery.sdk.html5.live.JSODDServer;
import com.mobilesorcery.sdk.ui.MosyncUIPlugin;
/**
* An evaluation handler.
* (JSDT only supports evaluation at breakpoints, we try to support more than that)
* @author Mattias Bybro
*
*/
public class EvaluateHandler extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IEditorPart editor = HandlerUtil.getActiveEditor(event);
IEditorInput input = editor.getEditorInput();
IProject project = null;
IResource resource = (IResource) input.getAdapter(IResource.class);
if (resource != null) {
project = resource.getProject();
}
ISelection selection = editor.getSite().getSelectionProvider().getSelection();
if (project != null && selection instanceof ITextSelection) {
ITextSelection textSelection = (ITextSelection) selection;
final String expression = textSelection.getText();
Thread t = new Thread(new Runnable() {
@Override
public void run() {
// NOT THE BUILDER CONSOLE!?
IProcessConsole console = CoreMoSyncPlugin.getDefault().createConsole(MoSyncBuilder.CONSOLE_ID);
JSODDServer server = Html5Plugin.getDefault().getReloadServer();
Set<Integer> sessionIds = server.getSessions();
for (Integer sessionId : sessionIds) {
try {
// JSODDSTREAMSPROXY!?
Object result = server.evaluate(sessionId, expression, null);
String sessionIdStr = "";
if (sessionIds.size() > 1) {
ReloadVirtualMachine vm = server.getVM(sessionId);
sessionIdStr = vm.getRemoteAddr();
}
console.addMessage(sessionIdStr + ">" + result);
} catch (Exception e) {
// IGNORE!
}
}
}
});
t.start();
}
return null;
}
}