You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2008/01/24 18:53:51 UTC

svn commit: r614941 - in /incubator/sling/trunk/scripting/javascript: ./ src/main/java/org/apache/sling/scripting/javascript/ src/main/java/org/apache/sling/scripting/javascript/helper/

Author: bdelacretaz
Date: Thu Jan 24 09:53:45 2008
New Revision: 614941

URL: http://svn.apache.org/viewvc?rev=614941&view=rev
Log:
SLING-193 - Rhino debugger, for server-side javascript

Added:
    incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingRhinoDebugger.java   (with props)
Modified:
    incubator/sling/trunk/scripting/javascript/pom.xml
    incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/RhinoJavaScriptEngineFactory.java
    incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingContextFactory.java

Modified: incubator/sling/trunk/scripting/javascript/pom.xml
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/pom.xml?rev=614941&r1=614940&r2=614941&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/javascript/pom.xml (original)
+++ incubator/sling/trunk/scripting/javascript/pom.xml Thu Jan 24 09:53:45 2008
@@ -62,7 +62,6 @@
                         <Private-Package>
                             org.apache.sling.scripting.javascript.*,
                             org.mozilla.classfile,
-                            !org.mozilla.javascript.tools.*,
                             !org.mozilla.javascript.xml.impl.xmlbeans,
                             org.mozilla.javascript.*
                         </Private-Package>

Modified: incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/RhinoJavaScriptEngineFactory.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/RhinoJavaScriptEngineFactory.java?rev=614941&r1=614940&r2=614941&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/RhinoJavaScriptEngineFactory.java (original)
+++ incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/RhinoJavaScriptEngineFactory.java Thu Jan 24 09:53:45 2008
@@ -32,11 +32,12 @@
 import org.mozilla.javascript.Context;
 import org.mozilla.javascript.Scriptable;
 import org.mozilla.javascript.ScriptableObject;
+import org.mozilla.javascript.tools.debugger.ScopeProvider;
 
 /**
  * The <code>RhinoJavaScriptEngineFactory</code> TODO
  */
-public class RhinoJavaScriptEngineFactory extends AbstractScriptEngineFactory {
+public class RhinoJavaScriptEngineFactory extends AbstractScriptEngineFactory implements ScopeProvider {
 
     public final static String JS_SCRIPT_EXTENSION = "js";
 
@@ -48,13 +49,12 @@
         ScriptablePrintWriter.class };
 
     private final String languageVersion;
-
     private Scriptable rootScope;
 
     public RhinoJavaScriptEngineFactory() {
 
         // initialize the Rhino Context Factory
-        SlingContextFactory.setup();
+        SlingContextFactory.setup(this);
 
         Context cx = Context.enter();
         setEngineName(getEngineName() + " (" + cx.getImplementationVersion()
@@ -79,6 +79,10 @@
 
     public String getLanguageVersion() {
         return languageVersion;
+    }
+    
+    public Scriptable getScope() {
+        return getRootScope();
     }
 
     private Scriptable getRootScope() {

Modified: incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingContextFactory.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingContextFactory.java?rev=614941&r1=614940&r2=614941&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingContextFactory.java (original)
+++ incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingContextFactory.java Thu Jan 24 09:53:45 2008
@@ -18,8 +18,11 @@
  */
 package org.apache.sling.scripting.javascript.helper;
 
+import java.io.File;
+
 import org.mozilla.javascript.Context;
 import org.mozilla.javascript.ContextFactory;
+import org.mozilla.javascript.tools.debugger.ScopeProvider;
 
 /**
  * The <code>SlingContextFactory</code> extends the standard Rhino
@@ -29,17 +32,29 @@
  */
 public class SlingContextFactory extends ContextFactory {
 
+    private SlingRhinoDebugger debugger;
+    private ScopeProvider scopeProvider;
+    private boolean debuggerActive;
+    
     // conditionally setup the global ContextFactory to be ours. If
     // a global context factory has already been set, we have lost
     // and cannot set this one.
-    public static void setup() {
+    public static void setup(ScopeProvider sp) {
+        // TODO what do we do in the other case? debugger won't work
         if (!hasExplicitGlobal()) {
-            initGlobal(new SlingContextFactory());
+            initGlobal(new SlingContextFactory(sp));
         }
     }
     
     // private as instances of this class are only used by setup()
-    private SlingContextFactory() {}
+    private SlingContextFactory(ScopeProvider sp) 
+    {
+        scopeProvider = sp;
+        
+        // TODO make this configurable via OSGi
+        File f = new File("/tmp/sling.debug");
+        debuggerActive = f.exists();
+    }
     
     @Override
     protected boolean hasFeature(Context cx, int featureIndex) {
@@ -49,5 +64,27 @@
 
         return super.hasFeature(cx, featureIndex);
     }
+    
+    @Override
+    protected void onContextCreated(Context cx) {
+        super.onContextCreated(cx);
+        initDebugger(cx);
+    }
 
+    private void initDebugger(Context cx) {
+        if(!debuggerActive) {
+            return;
+        }
+        try {
+            if (debugger == null) {
+                debugger = new SlingRhinoDebugger(getClass().getSimpleName());
+                debugger.setScopeProvider(scopeProvider);
+                debugger.attachTo(this);
+            }
+        } catch (Exception e) {
+            // TODO log
+            System.err.println("SlingContextFactory.initDebugger(): " + e);
+        }
+    }
+    
 }

Added: incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingRhinoDebugger.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingRhinoDebugger.java?rev=614941&view=auto
==============================================================================
--- incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingRhinoDebugger.java (added)
+++ incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingRhinoDebugger.java Thu Jan 24 09:53:45 2008
@@ -0,0 +1,12 @@
+package org.apache.sling.scripting.javascript.helper;
+
+import org.mozilla.javascript.tools.debugger.Dim;
+import org.mozilla.javascript.tools.debugger.SwingGui;
+
+class SlingRhinoDebugger extends Dim {
+    SlingRhinoDebugger(String windowTitle) {
+        final SwingGui gui = new SwingGui(this, windowTitle);
+        gui.pack();
+        gui.setVisible(true);
+    }
+}

Propchange: incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingRhinoDebugger.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingRhinoDebugger.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL