From 9a05228c4c1acc3221dde65a6106529613678c22 Mon Sep 17 00:00:00 2001 From: hns Date: Wed, 25 Jun 2003 15:15:02 +0000 Subject: [PATCH] Refactored and simplified renderSkin* methods. --- src/helma/scripting/rhino/GlobalObject.java | 79 +++++--------------- src/helma/scripting/rhino/HopObject.java | 80 +++++---------------- src/helma/scripting/rhino/JavaObject.java | 73 ++++++------------- src/helma/scripting/rhino/RhinoCore.java | 27 ++++++- 4 files changed, 84 insertions(+), 175 deletions(-) diff --git a/src/helma/scripting/rhino/GlobalObject.java b/src/helma/scripting/rhino/GlobalObject.java index 0b7e7e00..73c11a30 100644 --- a/src/helma/scripting/rhino/GlobalObject.java +++ b/src/helma/scripting/rhino/GlobalObject.java @@ -84,44 +84,22 @@ public class GlobalObject extends ScriptableObject { * * @return ... */ - public boolean renderSkin(Object skin, Object param) { - // System.err.println ("RENDERSKIN CALLED WITH PARAM "+param); + public boolean renderSkin(Object skinobj, Object paramobj) { Context cx = Context.getCurrentContext(); RequestEvaluator reval = (RequestEvaluator) cx.getThreadLocal("reval"); - Skin s; + RhinoEngine engine = (RhinoEngine) cx.getThreadLocal("engine"); + Skin skin; - if (skin instanceof Skin) { - s = (Skin) skin; + if (skinobj instanceof Skin) { + skin = (Skin) skinobj; } else { - // retrieve res.skinpath, an array of objects that tell us where to look for skins - // (strings for directory names and INodes for internal, db-stored skinsets) - Object[] skinpath = reval.res.getSkinpath(); - RhinoCore.unwrapSkinpath(skinpath); - s = core.app.getSkin(null, skin.toString(), skinpath); + skin = engine.getSkin("global", skinobj.toString()); } - Map p = null; + Map param = RhinoCore.getSkinParam(paramobj); - if ((param != null) && (param != Undefined.instance)) { - p = new HashMap(); - - if (param instanceof Scriptable) { - Scriptable sp = (Scriptable) param; - Object[] ids = sp.getIds(); - - for (int i = 0; i < ids.length; i++) { - Object obj = sp.get(ids[i].toString(), sp); - if (obj instanceof NativeJavaObject) { - p.put(ids[i], ((NativeJavaObject) obj).unwrap()); - } else { - p.put(ids[i], obj); - } - } - } - } - - if (s != null) { - s.render(reval, null, p); + if (skin != null) { + skin.render(reval, null, param); } return true; @@ -135,44 +113,23 @@ public class GlobalObject extends ScriptableObject { * * @return ... */ - public String renderSkinAsString(Object skin, Object param) { + public String renderSkinAsString(Object skinobj, Object paramobj) { Context cx = Context.getCurrentContext(); RequestEvaluator reval = (RequestEvaluator) cx.getThreadLocal("reval"); - Skin s; + RhinoEngine engine = (RhinoEngine) cx.getThreadLocal("engine"); + Skin skin; - if (skin instanceof Skin) { - s = (Skin) skin; + if (skinobj instanceof Skin) { + skin = (Skin) skinobj; } else { - // retrieve res.skinpath, an array of objects that tell us where to look for skins - // (strings for directory names and INodes for internal, db-stored skinsets) - Object[] skinpath = reval.res.getSkinpath(); - RhinoCore.unwrapSkinpath(skinpath); - s = core.app.getSkin(null, skin.toString(), skinpath); + skin = engine.getSkin("global", skinobj.toString()); } - Map p = null; + Map param = RhinoCore.getSkinParam(paramobj); - if ((param != null) && (param != Undefined.instance)) { - p = new HashMap(); - - if (param instanceof Scriptable) { - Scriptable sp = (Scriptable) param; - Object[] ids = sp.getIds(); - - for (int i = 0; i < ids.length; i++) { - Object obj = sp.get(ids[i].toString(), sp); - if (obj instanceof NativeJavaObject) { - p.put(ids[i], ((NativeJavaObject) obj).unwrap()); - } else { - p.put(ids[i], obj); - } - } - } - } - - if (s != null) { + if (skin != null) { reval.res.pushStringBuffer(); - s.render(reval, null, p); + skin.render(reval, null, param); return reval.res.popStringBuffer(); } diff --git a/src/helma/scripting/rhino/HopObject.java b/src/helma/scripting/rhino/HopObject.java index 14561c45..b6d79e7c 100644 --- a/src/helma/scripting/rhino/HopObject.java +++ b/src/helma/scripting/rhino/HopObject.java @@ -172,44 +172,22 @@ public class HopObject extends ScriptableObject { * * @return ... */ - public boolean jsFunction_renderSkin(Object skin, Object param) { - // System.err.println ("RENDERSKIN CALLED WITH PARAM "+param); + public boolean jsFunction_renderSkin(Object skinobj, Object paramobj) { Context cx = Context.getCurrentContext(); RequestEvaluator reval = (RequestEvaluator) cx.getThreadLocal("reval"); - Skin s; + RhinoEngine engine = (RhinoEngine) cx.getThreadLocal("engine"); + Skin skin; - if (skin instanceof Skin) { - s = (Skin) skin; + if (skinobj instanceof Skin) { + skin = (Skin) skinobj; } else { - // retrieve res.skinpath, an array of objects that tell us where to look for skins - // (strings for directory names and INodes for internal, db-stored skinsets) - Object[] skinpath = reval.res.getSkinpath(); - RhinoCore.unwrapSkinpath(skinpath); - s = core.app.getSkin(node, skin.toString(), skinpath); + skin = engine.getSkin(className, skinobj.toString()); } - Map p = null; + Map param = RhinoCore.getSkinParam(paramobj); - if ((param != null) && (param != Undefined.instance)) { - p = new HashMap(); - - if (param instanceof Scriptable) { - Scriptable sp = (Scriptable) param; - Object[] ids = sp.getIds(); - - for (int i = 0; i < ids.length; i++) { - Object obj = sp.get(ids[i].toString(), sp); - if (obj instanceof NativeJavaObject) { - p.put(ids[i], ((NativeJavaObject) obj).unwrap()); - } else { - p.put(ids[i], obj); - } - } - } - } - - if (s != null) { - s.render(reval, node, p); + if (skin != null) { + skin.render(reval, node, param); } return true; @@ -223,45 +201,23 @@ public class HopObject extends ScriptableObject { * * @return ... */ - public String jsFunction_renderSkinAsString(Object skin, Object param) { - // System.err.println ("RENDERSKIN CALLED WITH PARAM "+param); + public String jsFunction_renderSkinAsString(Object skinobj, Object paramobj) { Context cx = Context.getCurrentContext(); RequestEvaluator reval = (RequestEvaluator) cx.getThreadLocal("reval"); - Skin s; + RhinoEngine engine = (RhinoEngine) cx.getThreadLocal("engine"); + Skin skin; - if (skin instanceof Skin) { - s = (Skin) skin; + if (skinobj instanceof Skin) { + skin = (Skin) skinobj; } else { - // retrieve res.skinpath, an array of objects that tell us where to look for skins - // (strings for directory names and INodes for internal, db-stored skinsets) - Object[] skinpath = reval.res.getSkinpath(); - RhinoCore.unwrapSkinpath(skinpath); - s = core.app.getSkin(node, skin.toString(), skinpath); + skin = engine.getSkin(className, skinobj.toString()); } - Map p = null; + Map param = RhinoCore.getSkinParam(paramobj); - if ((param != null) && (param != Undefined.instance)) { - p = new HashMap(); - - if (param instanceof Scriptable) { - Scriptable sp = (Scriptable) param; - Object[] ids = sp.getIds(); - - for (int i = 0; i < ids.length; i++) { - Object obj = sp.get(ids[i].toString(), sp); - if (obj instanceof NativeJavaObject) { - p.put(ids[i], ((NativeJavaObject) obj).unwrap()); - } else { - p.put(ids[i], obj); - } - } - } - } - - if (s != null) { + if (skin != null) { reval.res.pushStringBuffer(); - s.render(reval, node, p); + skin.render(reval, node, param); return reval.res.popStringBuffer(); } diff --git a/src/helma/scripting/rhino/JavaObject.java b/src/helma/scripting/rhino/JavaObject.java index 8abc3a78..1cdb854f 100644 --- a/src/helma/scripting/rhino/JavaObject.java +++ b/src/helma/scripting/rhino/JavaObject.java @@ -35,6 +35,7 @@ public class JavaObject extends NativeJavaObject { RhinoCore core; Scriptable prototype; + String protoName; static HashMap overload; @@ -53,9 +54,11 @@ public class JavaObject extends NativeJavaObject { /** * Creates a new JavaObject wrapper. */ - public JavaObject(Scriptable scope, Object obj, Scriptable prototype, RhinoCore core) { + public JavaObject(Scriptable scope, Object obj, + String protoName, Scriptable prototype, RhinoCore core) { this.parent = scope; this.javaObject = obj; + this.protoName = protoName; this.prototype = prototype; this.core = core; staticType = obj.getClass(); @@ -71,38 +74,22 @@ public class JavaObject extends NativeJavaObject { * * @return ... */ - public boolean renderSkin(Object skin, Object param) { - // System.err.println ("RENDERSKIN CALLED WITH PARAM "+param); + public boolean renderSkin(Object skinobj, Object paramobj) { Context cx = Context.getCurrentContext(); RequestEvaluator reval = (RequestEvaluator) cx.getThreadLocal("reval"); - Skin s; + RhinoEngine engine = (RhinoEngine) cx.getThreadLocal("engine"); + Skin skin; - if (skin instanceof Skin) { - s = (Skin) skin; + if (skinobj instanceof Skin) { + skin = (Skin) skinobj; } else { - // retrieve res.skinpath, an array of objects that tell us where to look for skins - // (strings for directory names and INodes for internal, db-stored skinsets) - Object[] skinpath = reval.res.getSkinpath(); - RhinoCore.unwrapSkinpath(skinpath); - s = core.app.getSkin(javaObject, skin.toString(), skinpath); + skin = engine.getSkin(protoName, skinobj.toString()); } - Map p = null; + Map param = RhinoCore.getSkinParam(paramobj); - if ((param != null) && (param != Undefined.instance)) { - p = new HashMap(); - - if (param instanceof Scriptable) { - Scriptable sp = (Scriptable) param; - Object[] ids = sp.getIds(); - - for (int i = 0; i < ids.length; i++) - p.put(ids[i], sp.get(ids[i].toString(), sp)); - } - } - - if (s != null) { - s.render(reval, javaObject, p); + if (skin != null) { + skin.render(reval, javaObject, param); } return true; @@ -116,39 +103,23 @@ public class JavaObject extends NativeJavaObject { * * @return ... */ - public String renderSkinAsString(Object skin, Object param) { - // System.err.println ("RENDERSKINASSTRING CALLED WITH skin "+skin); + public String renderSkinAsString(Object skinobj, Object paramobj) { Context cx = Context.getCurrentContext(); RequestEvaluator reval = (RequestEvaluator) cx.getThreadLocal("reval"); - Skin s; + RhinoEngine engine = (RhinoEngine) cx.getThreadLocal("engine"); + Skin skin; - if (skin instanceof Skin) { - s = (Skin) skin; + if (skinobj instanceof Skin) { + skin = (Skin) skinobj; } else { - // retrieve res.skinpath, an array of objects that tell us where to look for skins - // (strings for directory names and INodes for internal, db-stored skinsets) - Object[] skinpath = reval.res.getSkinpath(); - RhinoCore.unwrapSkinpath(skinpath); - s = core.app.getSkin(javaObject, skin.toString(), skinpath); + skin = engine.getSkin(protoName, skinobj.toString()); } - Map p = null; + Map param = RhinoCore.getSkinParam(paramobj); - if ((param != null) && (param != Undefined.instance)) { - p = new HashMap(); - - if (param instanceof Scriptable) { - Scriptable sp = (Scriptable) param; - Object[] ids = sp.getIds(); - - for (int i = 0; i < ids.length; i++) - p.put(ids[i], sp.get(ids[i].toString(), sp)); - } - } - - if (s != null) { + if (skin != null) { reval.res.pushStringBuffer(); - s.render(reval, javaObject, p); + skin.render(reval, javaObject, param); return reval.res.popStringBuffer(); } diff --git a/src/helma/scripting/rhino/RhinoCore.java b/src/helma/scripting/rhino/RhinoCore.java index 52204f35..6aac2900 100644 --- a/src/helma/scripting/rhino/RhinoCore.java +++ b/src/helma/scripting/rhino/RhinoCore.java @@ -574,10 +574,11 @@ public final class RhinoCore { Scriptable op = getPrototype(prototypeName); if (op == null) { + prototypeName = "hopobject"; op = getPrototype("hopobject"); } - w = new JavaObject(global, e, op, this); + w = new JavaObject(global, e, prototypeName, op, this); wrappercache.put(e, w); } @@ -687,6 +688,30 @@ public final class RhinoCore { return skinpath; } + protected static Map getSkinParam(Object paramobj) { + Map param = null; + + if ((paramobj != null) && (paramobj != Undefined.instance)) { + param = new HashMap(); + + if (paramobj instanceof Scriptable) { + Scriptable sp = (Scriptable) paramobj; + Object[] ids = sp.getIds(); + + for (int i = 0; i < ids.length; i++) { + Object obj = sp.get(ids[i].toString(), sp); + if (obj instanceof NativeJavaObject) { + param.put(ids[i], ((NativeJavaObject) obj).unwrap()); + } else { + param.put(ids[i], obj); + } + } + } + } + + return param; + } + private synchronized void updateEvaluator(Prototype prototype, Reader reader, String sourceName, int firstline) { // context = Context.enter(context);