2362N/A * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. 0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 0N/A * This code is free software; you can redistribute it and/or modify it 0N/A * under the terms of the GNU General Public License version 2 only, as 2362N/A * published by the Free Software Foundation. Oracle designates this 0N/A * particular file as subject to the "Classpath" exception as provided 2362N/A * by Oracle in the LICENSE file that accompanied this code. 0N/A * This code is distributed in the hope that it will be useful, but WITHOUT 0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 0N/A * version 2 for more details (a copy is included in the LICENSE file that 0N/A * accompanied this code). 0N/A * You should have received a copy of the GNU General Public License version 0N/A * 2 along with this work; if not, write to the Free Software Foundation, 0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2362N/A * or visit www.oracle.com if you need additional information or have any 0N/A * JSAdapter is java.lang.reflect.Proxy equivalent for JavaScript. JSAdapter 0N/A * calls specially named JavaScript methods on an adaptee object when property 0N/A * access is attempted on it. 0N/A * __get__ : function (name) { ... } 0N/A * __has__ : function (name) { ... } 0N/A * __put__ : function (name, value) {...} 0N/A * __delete__ : function (name) { ... } 0N/A * __getIds__ : function () { ... } 0N/A * var x = new JSAdapter(y); 0N/A * x.i; // calls y.__get__ 0N/A * i in x; // calls y.__has__ 0N/A * x.p = 10; // calls y.__put__ 0N/A * delete x.p; // calls y.__delete__ 0N/A * for (i in x) { print(i); } // calls y.__getIds__ 0N/A * If a special JavaScript method is not found in the adaptee, then JSAdapter 0N/A * forwards the property access to the adaptee itself. 0N/A * JavaScript caller of adapter object is isolated from the fact that 0N/A * JavaScript methods on adaptee. Use cases include 'smart' 0N/A * easy client access - in short JavaScript becomes more "Self" like. 0N/A * Note that Rhino already supports special properties like __proto__ 0N/A * (to set, get prototype), __parent__ (to set, get parent scope). We 0N/A * follow the same double underscore nameing convention here. Similarly 0N/A * the name JSAdapter is derived from JavaAdapter -- which is a facility 0N/A * @author A. Sundararajan 0N/A // initializer to setup JSAdapter prototype in the given scope 0N/A // in most cases, adaptee would return native JS array 0N/A // may be attempt wrapped Java array 0N/A // just return an empty array 0N/A // some other return type, just return empty array 0N/A //-- internals only below this point 0N/A // map a property id. Property id can only be an Integer or String 0N/A // names of adaptee JavaScript functions