public ESValue getProperty(String propertyName, int hash) throws EcmaScriptException {
public ESValue getProperty (int i) throws EcmaScriptException {
    public ESValue getProperty(String propertyName, int hash) throws EcmaScriptException {             checkNode ();	// IServer.getLogger().log ("get property called: "+propertyName);	ESValue retval = super.getProperty (propertyName, hash);	if (! (retval instanceof ESUndefined))	    return retval;             if ("cache".equalsIgnoreCase (propertyName) && cache != null)	    return cacheWrapper;	if ("created".equalsIgnoreCase (propertyName))	    return new DatePrototype (evaluator, node.created ());		if ("lastmodified".equalsIgnoreCase (propertyName))	    return new DatePrototype (evaluator, node.lastModified ());	if ("contenttype".equalsIgnoreCase (propertyName))	    return new ESString (node.getContentType ());	if ("contentlength".equalsIgnoreCase (propertyName))	    return new ESNumber (node.getContentLength ());	if ("subnodeRelation".equalsIgnoreCase (propertyName)) {	    String rel = node.getSubnodeRelation ();	    return rel == null ?  (ESValue) ESNull.theNull :  new ESString (rel);	}	// this is not very nice, but as a hack we return the id of a node as node.__id__	if (propertyName.startsWith ("__") && propertyName.endsWith ("__"))	    return getInternalProperty (propertyName);             // this _may_ do a relational query if properties are mapped to a relational type.	IProperty p = node.get (propertyName, false);	if (p != null) {	    if (p.getType () == IProperty.STRING) {	        String str = p.getStringValue ();	        if (str == null)	            return ESNull.theNull;	        else	            return new ESString (str);	    }	    if (p.getType () == IProperty.BOOLEAN)	        return ESBoolean.makeBoolean (p.getBooleanValue ());	    if (p.getType () == IProperty.DATE) 	        return new DatePrototype (evaluator, p.getDateValue ());	    if (p.getType () == IProperty.INTEGER)	        return new ESNumber ((double) p.getIntegerValue ());	    if (p.getType () == IProperty.FLOAT)	        return new ESNumber (p.getFloatValue ());	    if (p.getType () == IProperty.NODE) {	        INode nd = p.getNodeValue ();	        if (nd == null)	            return ESNull.theNull;	        else	            return eval.getNodeWrapper (nd);	    }	    if (p.getType () == IProperty.JAVAOBJECT)	        return ESLoader.normalizeObject (p.getJavaObjectValue (), evaluator);	}	// as last resort, try to get property as anonymous subnode	INode anon = node.getSubnode (propertyName);	if (anon != null)	    return eval.getNodeWrapper (anon);	return ESNull.theNull;    }