Make HopObject implement the Rhino Wrapper interface.
Replace NativeJavaObject with Wrapper when unwrapping wrapped Java objects.
This commit is contained in:
		
							parent
							
								
									4b91011578
								
							
						
					
					
						commit
						bebce2ad3d
					
				
					 6 changed files with 37 additions and 35 deletions
				
			
		| 
						 | 
					@ -295,8 +295,8 @@ public class GlobalObject extends ScriptableObject {
 | 
				
			||||||
    public Object getXmlDocument(Object src) {
 | 
					    public Object getXmlDocument(Object src) {
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            Object p = src;
 | 
					            Object p = src;
 | 
				
			||||||
            if (p instanceof NativeJavaObject) {
 | 
					            if (p instanceof Wrapper) {
 | 
				
			||||||
                p = ((NativeJavaObject) p).unwrap();
 | 
					                p = ((Wrapper) p).unwrap();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            Object doc = XmlUtils.parseXml(p);
 | 
					            Object doc = XmlUtils.parseXml(p);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -315,8 +315,8 @@ public class GlobalObject extends ScriptableObject {
 | 
				
			||||||
    public Object getHtmlDocument(Object src) {
 | 
					    public Object getHtmlDocument(Object src) {
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            Object p = src;
 | 
					            Object p = src;
 | 
				
			||||||
            if (p instanceof NativeJavaObject) {
 | 
					            if (p instanceof Wrapper) {
 | 
				
			||||||
                p = ((NativeJavaObject) p).unwrap();
 | 
					                p = ((Wrapper) p).unwrap();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            Object doc = helma.util.XmlUtils.parseHtml(p);
 | 
					            Object doc = helma.util.XmlUtils.parseHtml(p);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,7 +34,7 @@ import java.util.Map;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
public class HopObject extends ScriptableObject {
 | 
					public class HopObject extends ScriptableObject implements Wrapper {
 | 
				
			||||||
    static Method hopObjCtor;
 | 
					    static Method hopObjCtor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    static {
 | 
					    static {
 | 
				
			||||||
| 
						 | 
					@ -152,6 +152,14 @@ public class HopObject extends ScriptableObject {
 | 
				
			||||||
        return node;
 | 
					        return node;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Returns the wrapped Node. Implements unwrap() in interface Wrapper.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public Object unwrap() {
 | 
				
			||||||
 | 
					        return node;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
| 
						 | 
					@ -241,8 +249,8 @@ public class HopObject extends ScriptableObject {
 | 
				
			||||||
        String act = null;
 | 
					        String act = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (action != null) {
 | 
					        if (action != null) {
 | 
				
			||||||
            if (action instanceof NativeJavaObject) {
 | 
					            if (action instanceof Wrapper) {
 | 
				
			||||||
                act = ((NativeJavaObject) action).unwrap().toString();
 | 
					                act = ((Wrapper) action).unwrap().toString();
 | 
				
			||||||
            } else if (!(action instanceof Undefined)) {
 | 
					            } else if (!(action instanceof Undefined)) {
 | 
				
			||||||
                act = action.toString();
 | 
					                act = action.toString();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					@ -465,8 +473,8 @@ public class HopObject extends ScriptableObject {
 | 
				
			||||||
                node.setSubnodeRelation(value == null ? null : value.toString());
 | 
					                node.setSubnodeRelation(value == null ? null : value.toString());
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (value instanceof NativeJavaObject) {
 | 
					            if (value instanceof Wrapper) {
 | 
				
			||||||
                value = ((NativeJavaObject) value).unwrap();
 | 
					                value = ((Wrapper) value).unwrap();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if ((value == null) || (value == Undefined.instance)) {
 | 
					            if ((value == null) || (value == Undefined.instance)) {
 | 
				
			||||||
| 
						 | 
					@ -480,8 +488,6 @@ public class HopObject extends ScriptableObject {
 | 
				
			||||||
                    node.setString(name, ScriptRuntime.toString(s));
 | 
					                    node.setString(name, ScriptRuntime.toString(s));
 | 
				
			||||||
                } else if (s instanceof MapWrapper) {
 | 
					                } else if (s instanceof MapWrapper) {
 | 
				
			||||||
                    node.setJavaObject(name, ((MapWrapper) s).unwrap());
 | 
					                    node.setJavaObject(name, ((MapWrapper) s).unwrap());
 | 
				
			||||||
                } else if (s instanceof HopObject) {
 | 
					 | 
				
			||||||
                    node.setNode(name, ((HopObject) value).node);
 | 
					 | 
				
			||||||
                } else {
 | 
					                } else {
 | 
				
			||||||
                    node.setJavaObject(name, s);
 | 
					                    node.setJavaObject(name, s);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
| 
						 | 
					@ -495,8 +501,6 @@ public class HopObject extends ScriptableObject {
 | 
				
			||||||
                node.setDate(name, (Date) value);
 | 
					                node.setDate(name, (Date) value);
 | 
				
			||||||
            } else if (value instanceof INode) {
 | 
					            } else if (value instanceof INode) {
 | 
				
			||||||
                node.setNode(name, (INode) value);
 | 
					                node.setNode(name, (INode) value);
 | 
				
			||||||
            } else if (value instanceof HopObject) {
 | 
					 | 
				
			||||||
                node.setNode(name, ((HopObject) value).node);
 | 
					 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                node.setJavaObject(name, value);
 | 
					                node.setJavaObject(name, value);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -142,8 +142,8 @@ public class JavaObject extends NativeJavaObject {
 | 
				
			||||||
        String act = null;
 | 
					        String act = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (action != null) {
 | 
					        if (action != null) {
 | 
				
			||||||
            if (action instanceof NativeJavaObject) {
 | 
					            if (action instanceof Wrapper) {
 | 
				
			||||||
                act = ((NativeJavaObject) action).unwrap().toString();
 | 
					                act = ((Wrapper) action).unwrap().toString();
 | 
				
			||||||
            } else if (!(action instanceof Undefined)) {
 | 
					            } else if (!(action instanceof Undefined)) {
 | 
				
			||||||
                act = action.toString();
 | 
					                act = action.toString();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,7 +19,7 @@ package helma.scripting.rhino;
 | 
				
			||||||
import org.mozilla.javascript.Context;
 | 
					import org.mozilla.javascript.Context;
 | 
				
			||||||
import org.mozilla.javascript.Scriptable;
 | 
					import org.mozilla.javascript.Scriptable;
 | 
				
			||||||
import org.mozilla.javascript.ScriptableObject;
 | 
					import org.mozilla.javascript.ScriptableObject;
 | 
				
			||||||
import org.mozilla.javascript.NativeJavaObject;
 | 
					import org.mozilla.javascript.Wrapper;
 | 
				
			||||||
import java.util.HashMap;
 | 
					import java.util.HashMap;
 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -59,8 +59,8 @@ public class MapWrapper extends ScriptableObject {
 | 
				
			||||||
        if (map == null) {
 | 
					        if (map == null) {
 | 
				
			||||||
            map = new HashMap();
 | 
					            map = new HashMap();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (value instanceof NativeJavaObject) {
 | 
					        if (value instanceof Wrapper) {
 | 
				
			||||||
            map.put(name, ((NativeJavaObject) value).unwrap());
 | 
					            map.put(name, ((Wrapper) value).unwrap());
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            map.put(name, value);
 | 
					            map.put(name, value);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -126,8 +126,8 @@ public class MapWrapper extends ScriptableObject {
 | 
				
			||||||
        if (map == null) {
 | 
					        if (map == null) {
 | 
				
			||||||
            map = new HashMap();
 | 
					            map = new HashMap();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (value instanceof NativeJavaObject) {
 | 
					        if (value instanceof Wrapper) {
 | 
				
			||||||
            map.put(Integer.toString(idx), ((NativeJavaObject) value).unwrap());
 | 
					            map.put(Integer.toString(idx), ((Wrapper) value).unwrap());
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            map.put(Integer.toString(idx), value);
 | 
					            map.put(Integer.toString(idx), value);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -53,7 +53,7 @@ public final class RhinoCore {
 | 
				
			||||||
    long lastUpdate = 0;
 | 
					    long lastUpdate = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // the wrap factory
 | 
					    // the wrap factory
 | 
				
			||||||
    Wrapper wrapper;
 | 
					    WrapFactory wrapper;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // the prototype for path objects
 | 
					    // the prototype for path objects
 | 
				
			||||||
    PathWrapper pathProto;
 | 
					    PathWrapper pathProto;
 | 
				
			||||||
| 
						 | 
					@ -70,7 +70,7 @@ public final class RhinoCore {
 | 
				
			||||||
        Context context = Context.enter();
 | 
					        Context context = Context.enter();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        context.setCompileFunctionsWithDynamicScope(true);
 | 
					        context.setCompileFunctionsWithDynamicScope(true);
 | 
				
			||||||
        wrapper = new Wrapper();
 | 
					        wrapper = new WrapMaker();
 | 
				
			||||||
        context.setWrapFactory(wrapper);
 | 
					        context.setWrapFactory(wrapper);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        int optLevel = 0;
 | 
					        int optLevel = 0;
 | 
				
			||||||
| 
						 | 
					@ -466,8 +466,8 @@ public final class RhinoCore {
 | 
				
			||||||
     * convert a JavaScript Object object to a generic Java object stucture.
 | 
					     * convert a JavaScript Object object to a generic Java object stucture.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public Object processXmlRpcResponse (Object what) throws Exception {
 | 
					    public Object processXmlRpcResponse (Object what) throws Exception {
 | 
				
			||||||
        if (what instanceof NativeJavaObject) {
 | 
					        if (what instanceof Wrapper) {
 | 
				
			||||||
            what = ((NativeJavaObject) what).unwrap();
 | 
					            what = ((Wrapper) what).unwrap();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (what instanceof NativeObject) {
 | 
					        if (what instanceof NativeObject) {
 | 
				
			||||||
            NativeObject no = (NativeObject) what;
 | 
					            NativeObject no = (NativeObject) what;
 | 
				
			||||||
| 
						 | 
					@ -607,8 +607,8 @@ public final class RhinoCore {
 | 
				
			||||||
            for (int i=0; i<skinpath.length; i++) {
 | 
					            for (int i=0; i<skinpath.length; i++) {
 | 
				
			||||||
                if (skinpath[i] instanceof HopObject) {
 | 
					                if (skinpath[i] instanceof HopObject) {
 | 
				
			||||||
                    skinpath[i] = ((HopObject) skinpath[i]).getNode();
 | 
					                    skinpath[i] = ((HopObject) skinpath[i]).getNode();
 | 
				
			||||||
                } else if (skinpath[i] instanceof NativeJavaObject) {
 | 
					                } else if (skinpath[i] instanceof Wrapper) {
 | 
				
			||||||
                    skinpath[i] = ((NativeJavaObject) skinpath[i]).unwrap();
 | 
					                    skinpath[i] = ((Wrapper) skinpath[i]).unwrap();
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -627,8 +627,8 @@ public final class RhinoCore {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                for (int i = 0; i < ids.length; i++) {
 | 
					                for (int i = 0; i < ids.length; i++) {
 | 
				
			||||||
                    Object obj = sp.get(ids[i].toString(), sp);
 | 
					                    Object obj = sp.get(ids[i].toString(), sp);
 | 
				
			||||||
                    if (obj instanceof NativeJavaObject) {
 | 
					                    if (obj instanceof Wrapper) {
 | 
				
			||||||
                        param.put(ids[i], ((NativeJavaObject) obj).unwrap());
 | 
					                        param.put(ids[i], ((Wrapper) obj).unwrap());
 | 
				
			||||||
                    } else if (obj != Undefined.instance) {
 | 
					                    } else if (obj != Undefined.instance) {
 | 
				
			||||||
                        param.put(ids[i], obj);
 | 
					                        param.put(ids[i], obj);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
| 
						 | 
					@ -744,7 +744,7 @@ public final class RhinoCore {
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     *  Object wrapper class
 | 
					     *  Object wrapper class
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    class Wrapper extends WrapFactory {
 | 
					    class WrapMaker extends WrapFactory {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public Object wrap(Context cx, Scriptable scope, Object obj, Class staticType)  {
 | 
					        public Object wrap(Context cx, Scriptable scope, Object obj, Class staticType)  {
 | 
				
			||||||
            // System.err.println ("Wrapping: "+obj);
 | 
					            // System.err.println ("Wrapping: "+obj);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -265,10 +265,8 @@ public class RhinoEngine implements ScriptingEngine {
 | 
				
			||||||
                return core.processXmlRpcResponse (retval);
 | 
					                return core.processXmlRpcResponse (retval);
 | 
				
			||||||
            } else if ((retval == null) || (retval == Undefined.instance)) {
 | 
					            } else if ((retval == null) || (retval == Undefined.instance)) {
 | 
				
			||||||
                return null;
 | 
					                return null;
 | 
				
			||||||
            } else if (retval instanceof NativeJavaObject) {
 | 
					            } else if (retval instanceof Wrapper) {
 | 
				
			||||||
                return ((NativeJavaObject) retval).unwrap();
 | 
					                return ((Wrapper) retval).unwrap();
 | 
				
			||||||
            } else if (retval instanceof HopObject) {
 | 
					 | 
				
			||||||
                return ((HopObject) retval).getNode();
 | 
					 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                return retval;
 | 
					                return retval;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					@ -378,8 +376,8 @@ public class RhinoEngine implements ScriptingEngine {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if ((prop == null) || (prop == Undefined.instance)) {
 | 
					            if ((prop == null) || (prop == Undefined.instance)) {
 | 
				
			||||||
                return null;
 | 
					                return null;
 | 
				
			||||||
            } else if (prop instanceof NativeJavaObject) {
 | 
					            } else if (prop instanceof Wrapper) {
 | 
				
			||||||
                return ((NativeJavaObject) prop).unwrap();
 | 
					                return ((Wrapper) prop).unwrap();
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                return prop;
 | 
					                return prop;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue