From a509f5735c14aff81f9ec2434932e99b45ac4b48 Mon Sep 17 00:00:00 2001 From: hns Date: Tue, 11 Sep 2001 19:14:02 +0000 Subject: [PATCH] Formerly known as ESRequestData. It is now possible to update this object, while ESRequestData was read-only. --- src/helma/scripting/fesi/ESMapWrapper.java | 155 +++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 src/helma/scripting/fesi/ESMapWrapper.java diff --git a/src/helma/scripting/fesi/ESMapWrapper.java b/src/helma/scripting/fesi/ESMapWrapper.java new file mode 100644 index 00000000..8ca6b44f --- /dev/null +++ b/src/helma/scripting/fesi/ESMapWrapper.java @@ -0,0 +1,155 @@ +// ESMapWrapper.java +// Copyright (c) Hannes Wallnöfer 1998-2000 + + +package helma.scripting.fesi; + +import helma.framework.core.*; +import helma.objectmodel.INode; +import FESI.Data.*; +import FESI.Exceptions.*; +import FESI.Interpreter.Evaluator; +import java.util.*; + + + +/** + * An EcmaScript object that makes stuff in a hashtable accessible as its properties + */ + +public class ESMapWrapper extends ESWrapper { + + private Map data; + private RequestEvaluator reval; + + public ESMapWrapper (RequestEvaluator reval) { + super (new Object(), reval.evaluator); + this.reval = reval; + } + + public ESMapWrapper (RequestEvaluator reval, Map data) { + super (new Object(), reval.evaluator); + this.reval = reval; + this.data = data; + } + + public void setData (Map data) { + this.data = data; + } + + /** + * Overridden to make the object read-only + */ + public void putProperty(String propertyName, ESValue propertyValue, int hash) throws EcmaScriptException { + if (data == null) + data = new HashMap (); + data.put (propertyName, propertyValue); + } + + public boolean deleteProperty(String propertyName, int hash) throws EcmaScriptException { + data.remove (propertyName); + return true; + } + + public ESValue getProperty(String propertyName, int hash) throws EcmaScriptException { + if (data == null) + return ESNull.theNull; + + Object val = data.get (propertyName); + + if (val == null) + return ESNull.theNull; + + if (val instanceof String) + return new ESString ((String) val); + else if (val instanceof INode) + return reval.getNodeWrapper ((INode) val); + + return ESLoader.normalizeValue(val, evaluator); + } + + + public Enumeration getAllProperties () { + return getProperties (); + } + + public Enumeration getProperties () { + Object[] keys = data == null ? null : data.keySet().toArray (); + return new Enum (keys); + } + + + class Enum implements Enumeration { + + Object[] elements; + int pos; + + Enum (Object[] elements) { + this.elements = elements; + pos = 0; + } + + public boolean hasMoreElements () { + return elements != null && pos < elements.length; + } + + public Object nextElement () { + if (elements == null || pos >= elements.length) + throw new NoSuchElementException (); + return elements[pos++]; + } + } +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +