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/23 16:57:34 UTC
svn commit: r614575 - 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 Jan 23 07:57:32 2008
New Revision: 614575
URL: http://svn.apache.org/viewvc?rev=614575&view=rev
Log:
SLING-154 - access to a Property with node.properties.propertyname works
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/ScriptableItemMap.java
incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableProperty.java
incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/RepositoryScriptingTestBase.java
incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/wrapper/ScriptableNodeTest.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=614575&r1=614574&r2=614575&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 Jan 23 07:57:32 2008
@@ -91,14 +91,18 @@
// register the host object
ScriptableObject.defineClass(rootScope, clazz);
+ final ScriptableObject host = (ScriptableObject)clazz.newInstance();
- // only register SlignWrappers with our wrapper factory
if (SlingWrapper.class.isAssignableFrom(clazz)) {
- final SlingWrapper hostObject = (SlingWrapper) clazz.newInstance();
- for (Class<?> c : hostObject.getWrappedClasses()) {
+ // SlingWrappers can map to several classes if needed
+ final SlingWrapper hostWrapper = (SlingWrapper) host;
+ for (Class<?> c : hostWrapper.getWrappedClasses()) {
SlingWrapFactory.INSTANCE.registerWrapper(c,
- hostObject.getClassName());
+ hostWrapper.getClassName());
}
+ } else {
+ // but other ScriptableObjects need to be registered as well
+ SlingWrapFactory.INSTANCE.registerWrapper(host.getClass(),host.getClassName());
}
} catch (Throwable t) {
// TODO: log
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=614575&r1=614574&r2=614575&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 Jan 23 07:57:32 2008
@@ -48,6 +48,7 @@
public Scriptable wrapAsJavaObject(Context cx, Scriptable scope,
Object javaObject, Class staticType) {
+ Scriptable result = null;
try {
String hostObjectName = getHostObjectName(staticType);
@@ -56,14 +57,18 @@
}
if (hostObjectName != null) {
- return cx.newObject(scope, hostObjectName,
+ result = cx.newObject(scope, hostObjectName,
new Object[] { javaObject });
}
} catch (Exception e) {
log.warn("Cannot Wrap " + javaObject, e);
}
- return super.wrapAsJavaObject(cx, scope, javaObject, staticType);
+ if(result==null) {
+ result = super.wrapAsJavaObject(cx, scope, javaObject, staticType);
+ }
+
+ return result;
}
private String getHostObjectName(Class<?> javaClass) {
Modified: incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableItemMap.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableItemMap.java?rev=614575&r1=614574&r2=614575&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableItemMap.java (original)
+++ incubator/sling/trunk/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableItemMap.java Wed Jan 23 07:57:32 2008
@@ -23,6 +23,7 @@
import java.util.Map;
import javax.jcr.Item;
+import javax.jcr.Property;
import javax.jcr.RepositoryException;
import org.mozilla.javascript.ScriptRuntime;
@@ -89,11 +90,14 @@
@Override
public Object get(String name, Scriptable start) {
Item item = items.get(name);
- if (item != null) {
- return ScriptRuntime.toObject(this, item);
+ Object result = Undefined.instance;
+ if (item instanceof Property) {
+ result = ScriptRuntime.toObject(this, (Property)item);
+ } else if (item != null) {
+ result = ScriptRuntime.toObject(this, item);
}
- return Undefined.instance;
+ return result;
}
@Override
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=614575&r1=614574&r2=614575&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 Jan 23 07:57:32 2008
@@ -22,12 +22,12 @@
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
+import org.apache.sling.scripting.javascript.helper.SlingWrapper;
import org.mozilla.javascript.ScriptRuntime;
import org.mozilla.javascript.ScriptableObject;
import org.mozilla.javascript.Undefined;
-import org.mozilla.javascript.Wrapper;
-public class ScriptableProperty extends ScriptableObject implements Wrapper {
+public class ScriptableProperty extends ScriptableObject implements SlingWrapper {
public static final String CLASSNAME = "Property";
public static final Class<?> [] WRAPPED_CLASSES = { Property.class };
@@ -207,9 +207,14 @@
}
@Override
+ public Object getDefaultValue(Class typeHint) {
+ return toString();
+ }
+
+ @Override
public String toString() {
try {
- return property.getString();
+ return property.getValue().getString();
} catch (RepositoryException e) {
return property.toString();
}
Modified: incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/RepositoryScriptingTestBase.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/RepositoryScriptingTestBase.java?rev=614575&r1=614574&r2=614575&view=diff
==============================================================================
--- incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/RepositoryScriptingTestBase.java (original)
+++ incubator/sling/trunk/scripting/javascript/src/test/java/org/apache/sling/scripting/RepositoryScriptingTestBase.java Wed Jan 23 07:57:32 2008
@@ -18,6 +18,10 @@
*/
package org.apache.sling.scripting;
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+import javax.naming.NamingException;
+
import org.apache.sling.commons.testing.jcr.RepositoryTestBase;
@@ -25,11 +29,16 @@
* and scripting functionality */
public class RepositoryScriptingTestBase extends RepositoryTestBase {
protected ScriptEngineHelper script;
+ private int counter;
@Override
protected void setUp() throws Exception {
super.setUp();
script = new ScriptEngineHelper();
+ }
+
+ protected Node getNewNode() throws RepositoryException, NamingException {
+ return getTestRootNode().addNode("test-" + (++counter));
}
}
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=614575&r1=614574&r2=614575&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 Jan 23 07:57:32 2008
@@ -18,6 +18,8 @@
*/
package org.apache.sling.scripting.wrapper;
+import javax.jcr.Node;
+
import org.apache.sling.scripting.RepositoryScriptingTestBase;
import org.apache.sling.scripting.ScriptEngineHelper;
@@ -27,12 +29,57 @@
*/
public class ScriptableNodeTest extends RepositoryScriptingTestBase {
+ private Node node;
+ private String testText;
+ private ScriptEngineHelper.Data data;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ node = getNewNode();
+ testText = "Test-" + System.currentTimeMillis();
+ node.setProperty("text", testText);
+
+ data = new ScriptEngineHelper.Data();
+ data.put("node", node);
+ data.put("property", node.getProperty("text"));
+ }
+
public void testPrimaryNodeType() throws Exception {
final ScriptEngineHelper.Data data = new ScriptEngineHelper.Data();
data.put("node", getTestRootNode());
assertEquals(
"nt:unstructured",
script.evalToString("out.print(node.primaryNodeType.name)", data)
+ );
+ }
+
+ public void testViaPropertyNoWrappers() throws Exception {
+ assertEquals(
+ testText,
+ script.evalToString("out.print(property.value.string)", data)
+ );
+ }
+
+ public void testViaPropertyWithWrappers() throws Exception {
+ assertEquals(
+ testText,
+ script.evalToString("out.print(property)", data)
+ );
+ }
+
+ public void testViaNodeNoWrappers() throws Exception {
+ assertEquals(
+ testText,
+ script.evalToString("out.print(node.properties.text.value.string)", data)
+ );
+ }
+
+ public void DIS_testViaNodeWithWrappers() throws Exception {
+ assertEquals(
+ testText,
+ script.evalToString("out.print(node.properties.text)", data)
);
}
}