package org.nutz.ioc.val; import java.util.Set; import org.nutz.el.El; import org.nutz.ioc.Ioc; import org.nutz.ioc.IocMaking; import org.nutz.ioc.ValueProxy; import org.nutz.lang.util.SimpleContext; public class EL_Value extends SimpleContext implements ValueProxy { protected El el; protected Ioc ioc; public EL_Value(String el) { this.el = new El(el); } public Object get(IocMaking ing) { this.ioc = ing.getIoc(); return el.eval(this); } public boolean has(String key) { if (key == null) return false; if ("sys".equals(key)) return true; if ("env".equals(key)) return true; if ("$ioc".equals(key)) return true; if (key.startsWith("$") && key.length() > 1) return ioc.has(key.substring(1)); return super.has(key); } public Set<String> keys() { Set<String> keys = super.keys(); keys.add("sys"); keys.add("env"); keys.add("$ioc"); for (String name : ioc.getNames()) { keys.add("$"+name); } return keys; } public int size() { return this.keys().size(); } public Object get(String key) { if (key == null) return null; if ("sys".equals(key)) return System.getProperties(); if ("env".equals(key)) return System.getenv(); if ("$ioc".equals(key)) return ioc; if (key.startsWith("$") && key.length() > 1) return ioc.get(Object.class, key.substring(1)); return super.get(key); } }