@Override public boolean insert(int index, String key, Object value) throws ExpressionException { int len = size(); if (index < 1 || index > len) throw new ExpressionException( "invalid index to insert a value to argument scope", len == 0 ? "can't insert in a empty argument scope" : "valid index goes from 1 to " + (len - 1)); // remove all upper LinkedHashMap lhm = new LinkedHashMap(); Collection.Key[] keys = keys(); Collection.Key k; for (int i = 1; i <= keys.length; i++) { if (i < index) continue; k = keys[i - 1]; lhm.put(k.getString(), get(k, null)); removeEL(k); } // set new value setEL(key, value); // reset upper values Iterator it = lhm.entrySet().iterator(); Map.Entry entry; while (it.hasNext()) { entry = (Entry) it.next(); setEL(KeyImpl.toKey(entry.getKey()), entry.getValue()); } return true; }
@Override public Object setArgument(Object obj) throws PageException { if (obj == this) return obj; if (Decision.isStruct(obj)) { clear(); // TODO bessere impl. anstelle vererbung wrao auf struct Struct sct = Caster.toStruct(obj); Iterator<Key> it = sct.keyIterator(); Key key; while (it.hasNext()) { key = it.next(); setEL(key, sct.get(key, null)); } return obj; } throw new ExpressionException("can not overwrite arguments scope"); }