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/04/30 13:09:08 UTC
svn commit: r652323 - in /incubator/sling/trunk/scripting/javascript/src:
main/java/org/apache/sling/scripting/javascript/
main/java/org/apache/sling/scripting/javascript/helper/
main/java/org/apache/sling/scripting/javascript/wrapper/ test/java/org/ap...
Author: bdelacretaz
Date: Wed Apr 30 04:09:08 2008
New Revision: 652323
URL: http://svn.apache.org/viewvc?rev=652323&view=rev
Log:
SLING-383 - javascript wrappers for Version and VersionHistory
Added:
incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableVersion.java (with props)
incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableVersionHistory.java (with props)
incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableVersionTest.java
- copied, changed from r652270, incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/SlingWrapFactoryTest.java
Removed:
incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/SlingWrapFactoryTest.java
Modified:
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/SlingWrapFactory.java
incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableBase.java
incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableNode.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
incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableNodeTest.java
incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableResourceTest.java
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=652323&r1=652322&r2=652323&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 Wed Apr 30 04:09:08 2008
@@ -29,6 +29,8 @@
import org.apache.sling.scripting.javascript.wrapper.ScriptablePrintWriter;
import org.apache.sling.scripting.javascript.wrapper.ScriptableProperty;
import org.apache.sling.scripting.javascript.wrapper.ScriptableResource;
+import org.apache.sling.scripting.javascript.wrapper.ScriptableVersion;
+import org.apache.sling.scripting.javascript.wrapper.ScriptableVersionHistory;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;
import org.mozilla.javascript.ScriptableObject;
@@ -47,9 +49,14 @@
public final static String ESP_SCRIPT_EXTENSION = "esp";
private static final Class<?>[] HOSTOBJECT_CLASSES = {
- ScriptableResource.class, ScriptableNode.class,
- ScriptableProperty.class, ScriptableItemMap.class,
- ScriptablePrintWriter.class };
+ ScriptableResource.class,
+ ScriptableNode.class,
+ ScriptableProperty.class,
+ ScriptableItemMap.class,
+ ScriptablePrintWriter.class,
+ ScriptableVersionHistory.class,
+ ScriptableVersion.class
+ };
/** default log */
private final Logger log = LoggerFactory.getLogger(getClass());
Modified: incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingWrapFactory.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingWrapFactory.java?rev=652323&r1=652322&r2=652323&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingWrapFactory.java (original)
+++ incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/helper/SlingWrapFactory.java Wed Apr 30 04:09:08 2008
@@ -21,9 +21,6 @@
import java.util.HashMap;
import java.util.Map;
-import javax.jcr.version.Version;
-import javax.jcr.version.VersionHistory;
-
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;
import org.mozilla.javascript.WrapFactory;
@@ -34,7 +31,8 @@
public static final SlingWrapFactory INSTANCE = new SlingWrapFactory();
- private static final Class<?>[] EXCLUDED_CLASSES = {VersionHistory.class, Version.class};
+ /** List of classes that must not be wrapped (added for SLING-382) */
+ private static final Class<?>[] EXCLUDED_CLASSES = {};
/** default log */
private final Logger log = LoggerFactory.getLogger(getClass());
@@ -83,14 +81,16 @@
}
String hostObjectName = wrappers.get(javaClass);
if (hostObjectName == null) {
- hostObjectName = getHostObjectName(javaClass.getSuperclass());
+ // before SLING-383 the superclass was tested first,
+ // but for Version and VersionHistory this would get
+ // a Node wrapper, that's not what we want
+ final Class<?>[] javaInterfaces = javaClass.getInterfaces();
+ for (int i = 0; i < javaInterfaces.length && hostObjectName == null; i++) {
+ hostObjectName = getHostObjectName(javaInterfaces[i]);
+ }
if (hostObjectName == null) {
- Class<?>[] javaInterfaces = javaClass.getInterfaces();
- for (int i = 0; i < javaInterfaces.length
- && hostObjectName == null; i++) {
- hostObjectName = getHostObjectName(javaInterfaces[i]);
- }
+ hostObjectName = getHostObjectName(javaClass.getSuperclass());
}
}
Modified: incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableBase.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableBase.java?rev=652323&r1=652322&r2=652323&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableBase.java (original)
+++ incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableBase.java Wed Apr 30 04:09:08 2008
@@ -64,6 +64,12 @@
/** @return the static type to use for NativeJavaObject wrapping */
protected abstract Class<?> getStaticType();
+ /** Used in testing, to check that the right wrapper is used.
+ * For some reason, defining the method here didn't work, it had to be
+ * defined in all descendant classes.
+ */
+ public abstract Class<?> jsGet_javascriptWrapperClass();
+
/** @return the Set of method names that clazz defines, i.e. all public methods
* with names that start with jsFunction_ */
private Set<String> getJsMethodNames() {
Modified: incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableNode.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableNode.java?rev=652323&r1=652322&r2=652323&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableNode.java (original)
+++ incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableNode.java Wed Apr 30 04:09:08 2008
@@ -200,7 +200,7 @@
public Object jsFunction_getVersionHistory() {
try {
- return node.getVersionHistory();
+ return ScriptRuntime.toObject(this, node.getVersionHistory());
} catch (RepositoryException re) {
return Undefined.instance;
}
@@ -208,7 +208,7 @@
public Object jsFunction_getBaseVersion() {
try {
- return node.getBaseVersion();
+ return ScriptRuntime.toObject(this, node.getBaseVersion());
} catch (RepositoryException re) {
return Undefined.instance;
}
@@ -402,6 +402,10 @@
}
}
+ public Class<?> jsGet_javascriptWrapperClass() {
+ return getClass();
+ }
+
@Override
public String toString() {
try {
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=652323&r1=652322&r2=652323&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 Wed Apr 30 04:09:08 2008
@@ -205,6 +205,10 @@
return property.isModified();
}
+ public Class<?> jsGet_javascriptWrapperClass() {
+ return getClass();
+ }
+
public Object jsFunction_valueOf(String hint) {
if ("undefined".equals(hint)) {
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=652323&r1=652322&r2=652323&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 Wed Apr 30 04:09:08 2008
@@ -133,6 +133,10 @@
return Undefined.instance;
}
+ public Class<?> jsGet_javascriptWrapperClass() {
+ return getClass();
+ }
+
@SuppressWarnings("unchecked")
@Override
public Object getDefaultValue(Class typeHint) {
Added: incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableVersion.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableVersion.java?rev=652323&view=auto
==============================================================================
--- incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableVersion.java (added)
+++ incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableVersion.java Wed Apr 30 04:09:08 2008
@@ -0,0 +1,59 @@
+/*
+ * 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.wrapper;
+
+import javax.jcr.version.Version;
+
+/** Scriptable wrapper for the JCR Version class */
+@SuppressWarnings("serial")
+public class ScriptableVersion extends ScriptableNode {
+
+ public static final String CLASSNAME = "Version";
+ public static final Class<?> [] WRAPPED_CLASSES = { Version.class };
+
+ private Version version;
+
+ @Override
+ public void jsConstructor(Object res) {
+ super.jsConstructor(res);
+ version = (Version)res;
+ }
+
+ @Override
+ protected Class<?> getStaticType() {
+ return Version.class;
+ }
+
+ @Override
+ public String getClassName() {
+ return CLASSNAME;
+ }
+
+ @Override
+ public Class<?>[] getWrappedClasses() {
+ return WRAPPED_CLASSES;
+ }
+
+ @Override
+ protected Object getWrappedObject() {
+ return version;
+ }
+
+ public Class<?> jsGet_javascriptWrapperClass() {
+ return getClass();
+ }
+}
\ No newline at end of file
Propchange: incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableVersion.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableVersion.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision Rev URL
Added: incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableVersionHistory.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableVersionHistory.java?rev=652323&view=auto
==============================================================================
--- incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableVersionHistory.java (added)
+++ incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableVersionHistory.java Wed Apr 30 04:09:08 2008
@@ -0,0 +1,59 @@
+/*
+ * 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.wrapper;
+
+import javax.jcr.version.VersionHistory;
+
+/** Scriptable wrapper for the JCR VersionHistory class */
+@SuppressWarnings("serial")
+public class ScriptableVersionHistory extends ScriptableNode {
+
+ public static final String CLASSNAME = "VersionHistory";
+ public static final Class<?> [] WRAPPED_CLASSES = { VersionHistory.class };
+
+ private VersionHistory versionHistory;
+
+ @Override
+ public void jsConstructor(Object res) {
+ super.jsConstructor(res);
+ versionHistory = (VersionHistory)res;
+ }
+
+ @Override
+ protected Class<?> getStaticType() {
+ return VersionHistory.class;
+ }
+
+ @Override
+ public String getClassName() {
+ return CLASSNAME;
+ }
+
+ @Override
+ public Class<?>[] getWrappedClasses() {
+ return WRAPPED_CLASSES;
+ }
+
+ @Override
+ protected Object getWrappedObject() {
+ return versionHistory;
+ }
+
+ public Class<?> jsGet_javascriptWrapperClass() {
+ return getClass();
+ }
+}
\ No newline at end of file
Propchange: incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableVersionHistory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableVersionHistory.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision Rev URL
Modified: incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableNodeTest.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableNodeTest.java?rev=652323&r1=652322&r2=652323&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableNodeTest.java (original)
+++ incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableNodeTest.java Wed Apr 30 04:09:08 2008
@@ -158,6 +158,13 @@
);
}
+ public void testPropertyWrapperClass() throws Exception {
+ assertEquals(
+ "org.apache.sling.scripting.javascript.wrapper.ScriptableProperty",
+ script.eval("node.getProperty('num').javascriptWrapperClass.getName()", data)
+ );
+ }
+
public void testPropertyAncestor() throws Exception {
// call getAncestor which is not explicitly defined in ScriptableProperty,
// to verify that all Property methods are available and that we get a
@@ -289,4 +296,11 @@
;
assertEquals("true false", script.evalToString(code, data));
}
+
+ public void testNodeWrapperClass() throws Exception {
+ assertEquals(
+ "org.apache.sling.scripting.javascript.wrapper.ScriptableNode",
+ script.eval("node.javascriptWrapperClass.getName()", data)
+ );
+ }
}
Modified: incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableResourceTest.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableResourceTest.java?rev=652323&r1=652322&r2=652323&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableResourceTest.java (original)
+++ incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableResourceTest.java Wed Apr 30 04:09:08 2008
@@ -77,6 +77,16 @@
assertEquals(Undefined.instance, script.eval(
"resource.adaptTo(Packages.java.util.Date)", data));
}
+
+ public void testResourceWrapperClass() throws Exception {
+ final ScriptEngineHelper.Data data = new ScriptEngineHelper.Data();
+ data.put("resource", new TestResource(node));
+
+ assertEquals(
+ "org.apache.sling.scripting.javascript.wrapper.ScriptableResource",
+ script.eval("resource.javascriptWrapperClass.getName()", data)
+ );
+ }
private void assertEquals(Node expected, Object actual) {
while (actual instanceof Wrapper) {
Copied: incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableVersionTest.java (from r652270, incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/SlingWrapFactoryTest.java)
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableVersionTest.java?p2=incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableVersionTest.java&p1=incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/SlingWrapFactoryTest.java&r1=652270&r2=652323&rev=652323&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/SlingWrapFactoryTest.java (original)
+++ incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableVersionTest.java Wed Apr 30 04:09:08 2008
@@ -23,15 +23,18 @@
import org.apache.sling.scripting.RepositoryScriptingTestBase;
import org.apache.sling.scripting.ScriptEngineHelper;
-public class SlingWrapFactoryTest extends RepositoryScriptingTestBase {
+/** Test access to Version and VersionHistory objects */
+public class ScriptableVersionTest extends RepositoryScriptingTestBase {
private Node node;
+ private ScriptEngineHelper.Data data = new ScriptEngineHelper.Data();
@Override
protected void setUp() throws Exception {
super.setUp();
node = getNewNode();
+ data.put("node", node);
node.addMixin("mix:versionable");
getSession().save();
@@ -39,18 +42,37 @@
getSession().save();
}
- public void testGetVersionHistoryNotWrapped() throws Exception {
- final ScriptEngineHelper.Data data = new ScriptEngineHelper.Data();
- data.put("node", node);
+ public void testVersionHistoryAccess() throws Exception {
Object result = script.eval("node.getVersionHistory().getAllVersions()", data);
assertNotNull(result);
}
- public void testVersionNotWrapped() throws Exception {
- final ScriptEngineHelper.Data data = new ScriptEngineHelper.Data();
- data.put("node", node);
+ public void testVersionHistoryIsWrapped() throws Exception {
+ assertEquals("nt:versionHistory", script.eval("node.versionHistory['jcr:primaryType']", data));
+ assertEquals("nt:version", script.eval("node.versionHistory.rootVersion['jcr:primaryType']", data));
+ }
+
+ public void testVersionHistoryWrapperClass() throws Exception {
+ assertEquals(
+ "org.apache.sling.scripting.javascript.wrapper.ScriptableVersionHistory",
+ script.eval("node.versionHistory.javascriptWrapperClass.getName()", data)
+ );
+ }
+
+ public void testVersionAccess() throws Exception {
Object result = script.eval("node.getBaseVersion().getCreated()", data);
assertNotNull(result);
}
+ public void testVersionIsWrapped() throws Exception {
+ assertEquals("nt:version", script.eval("node.baseVersion['jcr:primaryType']", data));
+ assertNotNull(script.eval("node.baseVersion.created", data));
+ }
+
+ public void testVersionWrapperClass() throws Exception {
+ assertEquals(
+ "org.apache.sling.scripting.javascript.wrapper.ScriptableVersion",
+ script.eval("node.baseVersion.javascriptWrapperClass.getName()", data)
+ );
+ }
}