package lucee.runtime.type.scope.util; import java.util.Iterator; import java.util.Set; import lucee.runtime.exp.PageException; import lucee.runtime.op.Caster; import lucee.runtime.type.KeyImpl; import lucee.runtime.type.util.StructSupport; import lucee.runtime.type.util.StructUtil; public class EnvStruct extends AbsSystemStruct { private static EnvStruct instance=new EnvStruct(); @Override public int size() { return System.getenv().size(); } @Override public void clear() { System.getenv().clear(); } @Override public Object removeEL(Key key) { String k = getKey(key); if(k!=null) return System.getenv().remove(key); return null; } @Override public Object get(Key key) throws PageException { Iterator<Entry<String, String>> it = System.getenv().entrySet().iterator(); Entry<String, String> e; if(key==null) throw StructSupport.invalidKey(null,this,key,null); while(it.hasNext()){ e = it.next(); if(key.equals(e.getKey())) return e.getValue(); } throw StructSupport.invalidKey(null,this,key,null); } @Override public Object get(Key key, Object defaultValue) { Iterator<Entry<String, String>> it = System.getenv().entrySet().iterator(); Entry<String, String> e; if(key==null) return defaultValue; while(it.hasNext()){ e = it.next(); if(key.equals(e.getKey())) return e.getValue(); } return defaultValue; } @Override public Object set(Key key, Object value) throws PageException { String k = getKey(key); if(k==null) return System.getenv().put(key.getString(), Caster.toString(value)); return System.getenv().put(k, Caster.toString(value)); } @Override public Object setEL(Key key, Object value) { String k = getKey(key); if(k==null) return System.getenv().put(key.getString(), Caster.toString(value,value.toString())); return System.getenv().put(k, Caster.toString(value,value.toString())); } @Override public boolean containsKey(Key key) { return getKey(key)!=null; } private String getKey(Key key) { Iterator<String> it = System.getenv().keySet().iterator(); String k; while(it.hasNext()){ if(key.equals(k=it.next())) return k; } return null; } @Override public Key[] keys() { Set<String> set = System.getenv().keySet(); Iterator<String> it = set.iterator(); Key[] keys=new Key[set.size()]; int index=0; String k; while(it.hasNext()){ k=it.next(); keys[index++]=KeyImpl.toKey(k,KeyImpl.init(k)); } return keys; } public static EnvStruct getInstance() { return instance; } @Override public int getType() { return StructUtil.getType(System.getenv()); } }