jaroslav@968: /** jaroslav@968: * Back 2 Browser Bytecode Translator jaroslav@968: * Copyright (C) 2012 Jaroslav Tulach jaroslav@968: * jaroslav@968: * This program is free software: you can redistribute it and/or modify jaroslav@968: * it under the terms of the GNU General Public License as published by jaroslav@968: * the Free Software Foundation, version 2 of the License. jaroslav@968: * jaroslav@968: * This program is distributed in the hope that it will be useful, jaroslav@968: * but WITHOUT ANY WARRANTY; without even the implied warranty of jaroslav@968: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the jaroslav@968: * GNU General Public License for more details. jaroslav@968: * jaroslav@968: * You should have received a copy of the GNU General Public License jaroslav@968: * along with this program. Look for COPYING file in the top folder. jaroslav@968: * If not, see http://opensource.org/licenses/GPL-2.0. jaroslav@968: */ jaroslav@968: package org.apidesign.bck2brwsr.debugger; jaroslav@968: jaroslav@968: import java.awt.event.ActionEvent; jaroslav@968: import java.awt.event.ActionListener; jaroslav@968: import java.net.MalformedURLException; jaroslav@968: import java.net.URL; jaroslav@968: import org.netbeans.api.debugger.Session; jaroslav@968: import org.netbeans.api.project.Project; jaroslav@968: import org.netbeans.modules.web.browser.api.BrowserSupport; jaroslav@968: import org.netbeans.modules.web.browser.api.WebBrowser; jaroslav@968: import org.netbeans.modules.web.browser.api.WebBrowsers; jaroslav@968: import org.netbeans.modules.web.webkit.debugging.api.WebKitDebugging; jaroslav@968: import org.netbeans.modules.web.webkit.debugging.spi.netbeansdebugger.NetBeansJavaScriptDebuggerFactory; jaroslav@968: import org.openide.awt.ActionID; jaroslav@968: import org.openide.awt.ActionReference; jaroslav@968: import org.openide.awt.ActionRegistration; jaroslav@968: import org.openide.awt.HtmlBrowser; jaroslav@968: import org.openide.util.Exceptions; jaroslav@968: import org.openide.util.Lookup; jaroslav@968: jaroslav@968: /** jaroslav@968: * jaroslav@968: * @author Jaroslav Tulach jaroslav@968: */ jaroslav@968: @ActionID(category = "Debug", id = "org.apidesign.bck2brwsr.Debug") jaroslav@968: @ActionRegistration(displayName = "Bck2brwsr debugger", asynchronous = true) jaroslav@968: @ActionReference(path = "Menu/DebugProject", position = 33333) jaroslav@968: public final class DebugBck2Brwsr implements ActionListener { jaroslav@968: private final Project project; jaroslav@968: jaroslav@968: public DebugBck2Brwsr(Project p) { jaroslav@968: this.project = p; jaroslav@968: } jaroslav@968: jaroslav@968: jaroslav@968: @Override jaroslav@968: public void actionPerformed(ActionEvent e) { jaroslav@968: try { jaroslav@968: URL url = new URL("http://localhost:8383/HTML5Application/index.html"); jaroslav@968: BrowserSupport.getDefaultEmbedded().load(url, project.getProjectDirectory()); jaroslav@968: /* jaroslav@968: for (WebBrowser web : WebBrowsers.getInstance().getAll(true)) { jaroslav@968: HtmlBrowser.Impl impl = web.getHtmlBrowserFactory().createHtmlBrowserImpl(); jaroslav@968: WebKitDebugging wkd = impl.getLookup().lookup(WebKitDebugging.class); jaroslav@968: if (wkd != null) { jaroslav@968: impl.setURL(url); jaroslav@968: Session session = startSession(wkd, project.getLookup()); jaroslav@968: System.err.println("debugging : " + session.getCurrentLanguage()); jaroslav@968: return; jaroslav@968: } jaroslav@968: // Collection res = pane.getLookup().lookupAll(Object.class); jaroslav@968: System.err.println("res: " + wkd); jaroslav@968: } jaroslav@968: */ jaroslav@968: } catch (MalformedURLException ex) { jaroslav@968: Exceptions.printStackTrace(ex); jaroslav@968: } jaroslav@968: } jaroslav@968: jaroslav@968: private static Session startSession(WebKitDebugging wkd, Lookup context) { jaroslav@968: final String sevenThree = "org.netbeans.modules.web.webkit.debugging.spi.netbeansdebugger.NetBeansJavaScriptDebuggerFactory"; jaroslav@968: final String sevenFour = "org.netbeans.modules.web.webkit.debugging.spi.JavaScriptDebuggerFactory"; jaroslav@968: jaroslav@968: Class cls; jaroslav@968: try { jaroslav@968: cls = Class.forName(sevenFour); jaroslav@968: } catch (ClassNotFoundException ex1) { jaroslav@968: try { jaroslav@968: cls = Class.forName(sevenThree); jaroslav@968: } catch (ClassNotFoundException ex) { jaroslav@968: throw new IllegalStateException("Can't start debug session", ex); jaroslav@968: } jaroslav@968: } jaroslav@968: jaroslav@968: Object inst = Lookup.getDefault().lookup(cls); jaroslav@968: jaroslav@968: try { jaroslav@968: java.lang.reflect.Method m = cls.getMethod("createDebuggingSession", WebKitDebugging.class, Lookup.class); jaroslav@968: return (Session)m.invoke(inst, wkd, context); jaroslav@968: } catch (Exception ex) { jaroslav@968: throw new IllegalStateException(ex); jaroslav@968: } jaroslav@968: } jaroslav@968: }