You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by fm...@apache.org on 2008/09/26 17:36:03 UTC

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

Author: fmeschbe
Date: Fri Sep 26 08:36:03 2008
New Revision: 699368

URL: http://svn.apache.org/viewvc?rev=699368&view=rev
Log:
SLING-634 Provide service interface (RhinoHostObjectProvider) to extend
Rhino and export SlingWrapper to enable extensions to implement
proper wrappers

Added:
    incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/RhinoHostObjectProvider.java
    incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/SlingWrapper.java
      - copied, changed from r688978, incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingWrapper.java
Removed:
    incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingWrapper.java
Modified:
    incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingContext.java
    incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingGlobal.java
    incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableCalendar.java
    incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptablePrintWriter.java
    incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableProperty.java
    incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableResource.java

Added: incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/RhinoHostObjectProvider.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/RhinoHostObjectProvider.java?rev=699368&view=auto
==============================================================================
--- incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/RhinoHostObjectProvider.java (added)
+++ incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/RhinoHostObjectProvider.java Fri Sep 26 08:36:03 2008
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.scripting.javascript;
+
+import org.mozilla.javascript.Scriptable;
+
+/**
+ * The <code>RhinoHostObjectProvider</code> defines the service interface to
+ * inject additional ECMAScript host objects as well as to make classes and
+ * packages known.
+ */
+public interface RhinoHostObjectProvider {
+
+    /**
+     * Returns an array of classes implementing the Rhino
+     * <code>Scriptable</code> interface. These classes will be registered
+     * with the global scope as host objects and may then be used in any
+     * server-side ECMAScript scripts.
+     * <p>
+     * Implementations may return <code>null</code> instead of an empty array
+     * if they do not provide any host objects.
+     */
+    Class<? extends Scriptable>[] getHostObjectClasses();
+
+    /**
+     * Returns an array of classes, which are transparently converted into
+     * ECMAScript host objects in the global scope.
+     * <p>
+     * Normally any Java class may be used within ECMAScript but it must be
+     * prefixed with <code>Packages</code> and the fully qualified package
+     * name of the class. For example to use the class
+     * <code>org.slf4j.Log</code> in an ECMAScript it must be noted as
+     * <code>Packages.org.slf4j.Log</code>. By registering the
+     * <code>org.slf4j.Log</code> as an imported class, it may simply be
+     * referred to as <code>Log</code> (provided there is no other object of
+     * that name, of course).
+     * <p>
+     * Implementations may return <code>null</code> instead of an empty array
+     * if they do not provide any imported classes.
+     */
+    Class<?>[] getImportedClasses();
+
+    /**
+     * Returns an array of Java package names to define name spaces in the
+     * global scope.
+     * <p>
+     * Normally any Java class may be used within ECMAScript but it must be
+     * prefixed with <code>Packages</code> and the fully qualified package
+     * name of the class. For example to use the class
+     * <code>org.slf4j.Log</code> in an ECMAScript it must be noted as
+     * <code>Packages.org.slf4j.Log</code>. By registering the
+     * <code>org.slf4j</code> package as an imported package, it may simply be
+     * referred to as <code>Log</code> (provided there is no other object of
+     * that name, of course).
+     * <p>
+     * The difference between importing packages and importing classes is that
+     * for a package import to work, the package must be visible to the
+     * ECMAScript bundle.
+     * <p>
+     * Implementations may return <code>null</code> instead of an empty array
+     * if they do not provide any package names.
+     */
+    String[] getImportedPackages();
+}

Copied: incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/SlingWrapper.java (from r688978, incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingWrapper.java)
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/SlingWrapper.java?p2=incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/SlingWrapper.java&p1=incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingWrapper.java&r1=688978&r2=699368&rev=699368&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingWrapper.java (original)
+++ incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/SlingWrapper.java Fri Sep 26 08:36:03 2008
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.sling.scripting.javascript.helper;
+package org.apache.sling.scripting.javascript;
 
 import org.mozilla.javascript.Wrapper;
 

Modified: incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingContext.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingContext.java?rev=699368&r1=699367&r2=699368&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingContext.java (original)
+++ incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingContext.java Fri Sep 26 08:36:03 2008
@@ -19,6 +19,7 @@
 package org.apache.sling.scripting.javascript.helper;
 
 import org.mozilla.javascript.Context;
+import org.mozilla.javascript.ImporterTopLevel;
 import org.mozilla.javascript.ScriptableObject;
 
 /**
@@ -33,6 +34,11 @@
             boolean sealed) {
         ScriptableObject rootScope = super.initStandardObjects(scope, sealed);
 
+        // prepare the ImporterToplevel host object because it will be
+        // used as top level scope for the RhinoJavaScriptEngine but is
+        // not initialized with the rest of the standard objects
+        ImporterTopLevel.init(this, rootScope, sealed);
+        
         // add Sling global objects
         SlingGlobal.init(rootScope, sealed);
 

Modified: incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingGlobal.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingGlobal.java?rev=699368&r1=699367&r2=699368&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingGlobal.java (original)
+++ incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingGlobal.java Fri Sep 26 08:36:03 2008
@@ -30,7 +30,7 @@
 import org.apache.sling.api.resource.ResourceUtil;
 import org.apache.sling.api.scripting.SlingBindings;
 import org.apache.sling.api.scripting.SlingScriptHelper;
-import org.apache.sling.scripting.javascript.RhinoJavaScriptEngineFactory;
+import org.apache.sling.scripting.javascript.internal.RhinoJavaScriptEngineFactory;
 import org.apache.sling.scripting.javascript.io.EspReader;
 import org.mozilla.javascript.Context;
 import org.mozilla.javascript.IdFunctionCall;

Modified: incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableCalendar.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableCalendar.java?rev=699368&r1=699367&r2=699368&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableCalendar.java (original)
+++ incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableCalendar.java Fri Sep 26 08:36:03 2008
@@ -20,7 +20,7 @@
 import java.util.Calendar;
 import java.util.GregorianCalendar;
 
-import org.apache.sling.scripting.javascript.helper.SlingWrapper;
+import org.apache.sling.scripting.javascript.SlingWrapper;
 import org.mozilla.javascript.ScriptRuntime;
 import org.mozilla.javascript.Scriptable;
 import org.mozilla.javascript.Undefined;

Modified: incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptablePrintWriter.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptablePrintWriter.java?rev=699368&r1=699367&r2=699368&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptablePrintWriter.java (original)
+++ incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptablePrintWriter.java Fri Sep 26 08:36:03 2008
@@ -22,7 +22,7 @@
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.sling.api.scripting.SlingBindings;
-import org.apache.sling.scripting.javascript.helper.SlingWrapper;
+import org.apache.sling.scripting.javascript.SlingWrapper;
 import org.mozilla.javascript.Context;
 import org.mozilla.javascript.Function;
 import org.mozilla.javascript.ScriptRuntime;

Modified: incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableProperty.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableProperty.java?rev=699368&r1=699367&r2=699368&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableProperty.java (original)
+++ incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableProperty.java Fri Sep 26 08:36:03 2008
@@ -22,7 +22,7 @@
 import javax.jcr.PropertyType;
 import javax.jcr.RepositoryException;
 
-import org.apache.sling.scripting.javascript.helper.SlingWrapper;
+import org.apache.sling.scripting.javascript.SlingWrapper;
 import org.mozilla.javascript.ScriptRuntime;
 import org.mozilla.javascript.Scriptable;
 import org.mozilla.javascript.Undefined;

Modified: incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableResource.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableResource.java?rev=699368&r1=699367&r2=699368&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableResource.java (original)
+++ incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableResource.java Fri Sep 26 08:36:03 2008
@@ -17,7 +17,7 @@
 package org.apache.sling.scripting.javascript.wrapper;
 
 import org.apache.sling.api.resource.Resource;
-import org.apache.sling.scripting.javascript.helper.SlingWrapper;
+import org.apache.sling.scripting.javascript.SlingWrapper;
 import org.mozilla.javascript.Context;
 import org.mozilla.javascript.Function;
 import org.mozilla.javascript.ScriptRuntime;