/* This file belongs to the Servoy development and deployment environment, Copyright (C) 1997-2010 Servoy BV This program is free software; you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program; if not, see http://www.gnu.org/licenses or write to the Free Software Foundation,Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 */ package com.servoy.j2db.scripting; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import org.mozilla.javascript.NativeJavaArray; import org.mozilla.javascript.Scriptable; import com.servoy.j2db.component.ComponentFactory; /** * JavaScript Scope to hold form elements * * @author jcompagner */ public class ElementScope extends DefaultScope { /** */ public ElementScope(Scriptable parent) { super(parent); } /** * @see com.servoy.j2db.scripting.DefaultScope#get(java.lang.String, org.mozilla.javascript.Scriptable) */ @Override public Object get(String name, Scriptable start) { if ("allnames".equals(name)) { Object[] array = getNamesArray(); return new NativeJavaArray(this, array); } return super.get(name, start); } /** * @return */ private Object[] getNamesArray() { List list = new ArrayList(allVars.keySet()); Iterator it = list.iterator(); while (it.hasNext()) { String key = (String)it.next(); if (key.startsWith(ComponentFactory.WEB_ID_PREFIX)) { it.remove(); } } Object[] array = list.toArray(new String[list.size()]); Arrays.sort(array); return array; } /** * @see com.servoy.j2db.scripting.DefaultScope#getIds() */ @Override public Object[] getIds() { // just return the names for a element scope return getNamesArray(); } }