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 2014/01/14 03:35:02 UTC
svn commit: r1557909 - in /sling/trunk/bundles/scripting/javascript: ./
src/main/java/org/apache/sling/scripting/javascript/wrapper/
Author: fmeschbe
Date: Tue Jan 14 02:35:01 2014
New Revision: 1557909
URL: http://svn.apache.org/r1557909
Log:
SLING-3308 Upgrade to Rhino 1.7R4
Apply extended patch by Rohit Kumar (Thanks alot !). Extensions to
the original patch are checking all wrapper objects whether the
wrapped field needs a null check.
Modified:
sling/trunk/bundles/scripting/javascript/pom.xml
sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableCalendar.java
sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableItemMap.java
sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableNode.java
sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableProperty.java
sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableResource.java
Modified: sling/trunk/bundles/scripting/javascript/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/javascript/pom.xml?rev=1557909&r1=1557908&r2=1557909&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/javascript/pom.xml (original)
+++ sling/trunk/bundles/scripting/javascript/pom.xml Tue Jan 14 02:35:01 2014
@@ -137,9 +137,9 @@
<artifactId>jcr</artifactId>
</dependency>
<dependency>
- <groupId>rhino</groupId>
- <artifactId>js</artifactId>
- <version>1.6R6</version>
+ <groupId>org.mozilla</groupId>
+ <artifactId>rhino</artifactId>
+ <version>1.7R4</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
Modified: sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableCalendar.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableCalendar.java?rev=1557909&r1=1557908&r2=1557909&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableCalendar.java (original)
+++ sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableCalendar.java Tue Jan 14 02:35:01 2014
@@ -19,7 +19,6 @@ package org.apache.sling.scripting.javas
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
-
import org.apache.sling.scripting.javascript.SlingWrapper;
import org.mozilla.javascript.ScriptRuntime;
import org.mozilla.javascript.Scriptable;
@@ -31,12 +30,17 @@ public class ScriptableCalendar extends
public static final String CLASSNAME = "Calendar";
private SimpleDateFormat calendarFormat;
-
+
/** Calendar is a class, not an interface - so we need to enumerate possible implementations here */
public static final Class<?> [] WRAPPED_CLASSES = { Calendar.class, GregorianCalendar.class };
+ /**
+ * The wrapped Calendar. Will be {@code null} if the
+ * {@link #jsConstructor(Object)} method is not called, which particularly
+ * is the case for the Calendar host object prototype.
+ */
private Calendar calendar;
-
+
public Class<?>[] getWrappedClasses() {
return WRAPPED_CLASSES;
}
@@ -44,7 +48,7 @@ public class ScriptableCalendar extends
public void jsConstructor(Object o) {
this.calendar = (Calendar) o;
}
-
+
@Override
public Object get(String name, Scriptable start) {
@@ -57,14 +61,14 @@ public class ScriptableCalendar extends
if(calendar == null) {
return Undefined.instance;
}
-
+
if("date".equals(name)) {
return ScriptRuntime.toObject(this, calendar.getTime());
}
-
+
return getNative(name, start);
}
-
+
@Override
protected Class<?> getStaticType() {
return Calendar.class;
@@ -92,7 +96,7 @@ public class ScriptableCalendar extends
}
return calendarFormat.format(calendar.getTime());
}
-
+
public Object unwrap() {
return calendar;
}
Modified: sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableItemMap.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableItemMap.java?rev=1557909&r1=1557908&r2=1557909&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableItemMap.java (original)
+++ sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableItemMap.java Tue Jan 14 02:35:01 2014
@@ -39,10 +39,7 @@ public class ScriptableItemMap extends S
/** default log */
private final Logger log = LoggerFactory.getLogger(getClass());
- private Map<String, Item> items = new LinkedHashMap<String, Item>();
-
- public ScriptableItemMap() {
- }
+ private final Map<String, Item> items = new LinkedHashMap<String, Item>();
public void jsConstructor(Object res) {
if (res instanceof Iterator<?>) {
Modified: sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableNode.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableNode.java?rev=1557909&r1=1557908&r2=1557909&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableNode.java (original)
+++ sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableNode.java Tue Jan 14 02:35:01 2014
@@ -55,6 +55,11 @@ public class ScriptableNode extends Scri
/** default log */
private final Logger log = LoggerFactory.getLogger(getClass());
+ /**
+ * The wrapped JCR Node instance. Will be {@code null} if the
+ * {@link #jsConstructor(Object)} method is not called, which particularly
+ * is the case for the Node host object prototype.
+ */
private Node node;
public void jsConstructor(Object res) {
@@ -68,7 +73,7 @@ public class ScriptableNode extends Scri
public Class<?> [] getWrappedClasses() {
return WRAPPED_CLASSES;
}
-
+
@Override
protected Class<?> getStaticType() {
return Node.class;
@@ -78,7 +83,7 @@ public class ScriptableNode extends Scri
protected Object getWrappedObject() {
return node;
}
-
+
public Object jsFunction_addNode(String path, String primaryType) throws RepositoryException {
Node n = null;
if(primaryType == null || "undefined".equals(primaryType)) {
@@ -118,7 +123,7 @@ public class ScriptableNode extends Scri
return toScriptableItemMap(null);
}
}
-
+
public Object jsFunction_getProperties() {
try {
return toScriptableItemMap(node.getProperties());
@@ -135,7 +140,7 @@ public class ScriptableNode extends Scri
return Undefined.instance;
}
}
-
+
public Object jsFunction_getProperty(String name) throws RepositoryException {
Object[] args = { node.getProperty(name) };
return ScriptRuntime.newObject(Context.getCurrentContext(), this,
@@ -253,7 +258,7 @@ public class ScriptableNode extends Scri
return node.toString();
}
}
-
+
public Object jsFunction_getParent() {
try {
return ScriptRuntime.toObject(this, node.getParent());
@@ -277,7 +282,7 @@ public class ScriptableNode extends Scri
public boolean jsFunction_getModified() {
return node.isModified();
}
-
+
public void jsFunction_remove() throws RepositoryException {
node.remove();
}
@@ -338,10 +343,10 @@ public class ScriptableNode extends Scri
if (items.size()==0) {
return getNative(name, start);
-
+
} else if (items.size()==1 && !isMulti) {
return items.iterator().next();
-
+
} else {
NativeArray result = new NativeArray(items.toArray());
ScriptRuntime.setObjectProtoAndParent(result, this);
@@ -392,34 +397,38 @@ public class ScriptableNode extends Scri
@SuppressWarnings("unchecked")
@Override
public Object getDefaultValue(Class typeHint) {
- try {
- return node.getPath();
- } catch(Exception e) {
- return null;
- }
+ return toString();
}
@Override
public boolean has(String name, Scriptable start) {
- try {
- // TODO should this take into account our jsFunction_ members?
- return node.hasProperty(name) || node.hasNode(name);
- } catch (RepositoryException e) {
- return false;
+ if (node != null) {
+ try {
+ // TODO should this take into account our jsFunction_ members?
+ return node.hasProperty(name) || node.hasNode(name);
+ } catch (RepositoryException e) {
+ // does not matter
+ }
}
+
+ return false;
}
public Class<?> jsGet_javascriptWrapperClass() {
return getClass();
}
-
+
@Override
public String toString() {
- try {
- return node.getPath();
- } catch (RepositoryException e) {
- return node.toString();
+ if (node != null) {
+ try {
+ return node.getPath();
+ } catch (RepositoryException e) {
+ return node.toString();
+ }
}
+
+ return String.valueOf((Object) null);
}
// ---------- Wrapper interface --------------------------------------------
@@ -428,9 +437,9 @@ public class ScriptableNode extends Scri
public Object unwrap() {
return node;
}
-
+
//---------- Helper -------------------------------------------------------
-
+
private Object toScriptableItemMap(Iterator<?> iter) {
Object[] args = (iter != null) ? new Object[] { iter } : null;
return ScriptRuntime.newObject(Context.getCurrentContext(), this,
Modified: sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableProperty.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableProperty.java?rev=1557909&r1=1557908&r2=1557909&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableProperty.java (original)
+++ sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableProperty.java Tue Jan 14 02:35:01 2014
@@ -35,6 +35,11 @@ public class ScriptableProperty extends
public static final Class<?>[] WRAPPED_CLASSES = { Property.class };
+ /**
+ * The wrapped JCR Property instance. Will be {@code null} if the
+ * {@link #jsConstructor(Object)} method is not called, which particularly
+ * is the case for the Property host object prototype.
+ */
private Property property;
public ScriptableProperty() {
@@ -208,10 +213,10 @@ public class ScriptableProperty extends
public Class<?> jsGet_javascriptWrapperClass() {
return getClass();
}
-
+
public Object jsFunction_valueOf(String hint) {
if ("undefined".equals(hint)) {
-
+
try {
switch (property.getType()) {
case PropertyType.BOOLEAN:
@@ -229,15 +234,15 @@ public class ScriptableProperty extends
// don't care, just return the string value
return toString();
}
-
+
} else if ("object".equals(hint)) {
// return this as a Scriptable :-)
return this;
-
+
} else if ("function".equals(hint)) {
// cannot return this as a Function
return Undefined.instance;
-
+
} else if ("boolean".equals(hint)) {
// boolean value
try {
@@ -245,7 +250,7 @@ public class ScriptableProperty extends
} catch (RepositoryException re) {
return false;
}
-
+
} else if ("number".equals(hint)) {
// numeric value
try {
@@ -258,7 +263,7 @@ public class ScriptableProperty extends
// unknown hint or "string"
return toString();
}
-
+
@Override
public Object get(String name, Scriptable start) {
final Object fromSuperclass = super.get(name, start);
@@ -269,7 +274,7 @@ public class ScriptableProperty extends
if(property == null) {
return Undefined.instance;
}
-
+
return getNative(name, start);
}
@@ -279,11 +284,15 @@ public class ScriptableProperty extends
@Override
public String toString() {
- try {
- return property.getValue().getString();
- } catch (RepositoryException e) {
- return property.toString();
+ if (property != null) {
+ try {
+ return property.getValue().getString();
+ } catch (RepositoryException e) {
+ return property.toString();
+ }
}
+
+ return String.valueOf((Object) null);
}
// ---------- Wrapper interface --------------------------------------------
Modified: sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableResource.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableResource.java?rev=1557909&r1=1557908&r2=1557909&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableResource.java (original)
+++ sling/trunk/bundles/scripting/javascript/src/main/java/org/apache/sling/scripting/javascript/wrapper/ScriptableResource.java Tue Jan 14 02:35:01 2014
@@ -240,7 +240,11 @@ public class ScriptableResource extends
@SuppressWarnings("unchecked")
@Override
public Object getDefaultValue(Class typeHint) {
- return resource.getPath();
+ if (resource != null) {
+ return resource.getPath();
+ }
+
+ return String.valueOf((Object) null);
}
public void setResource(Resource entry) {