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.Struct;
import lucee.runtime.type.util.StructSupport;
public class SystemPropStruct extends AbsSystemStruct {
private static SystemPropStruct instance=new SystemPropStruct();
@Override
public int size() {
return System.getProperties().size();
}
@Override
public void clear() {
System.getProperties().clear();
}
@Override
public Object removeEL(Key key) {
Object k = getKey(key);
if(k!=null) return System.getProperties().remove(key);
return null;
}
@Override
public Object get(Key key) throws PageException {
Iterator<Entry<Object, Object>> it = System.getProperties().entrySet().iterator();
Entry<Object, Object> 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<Object, Object>> it = System.getProperties().entrySet().iterator();
Entry<Object, Object> 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 {
Object k = getKey(key);
if(k==null) return System.setProperty(key.getString(), Caster.toString(value));
return System.setProperty(Caster.toString(k), Caster.toString(value));
}
@Override
public Object setEL(Key key, Object value) {
Object k = getKey(key);
if(k==null) return System.setProperty(key.getString(), Caster.toString(value,value.toString()));
return System.setProperty(k.toString(), Caster.toString(value,value.toString()));
}
@Override
public boolean containsKey(Key key) {
return getKey(key)!=null;
}
private Object getKey(Key key) {
Iterator<Object> it = System.getProperties().keySet().iterator();
Object k;
while(it.hasNext()){
if(key.equals(k=it.next())) return k;
}
return null;
}
@Override
public Key[] keys() {
Set<Object> set = System.getProperties().keySet();
Iterator<Object> it = set.iterator();
Key[] keys=new Key[set.size()];
int index=0;
Object k;
while(it.hasNext()){
k=it.next();
keys[index++]=KeyImpl.toKey(k,KeyImpl.init(k.toString()));
}
return keys;
}
public static SystemPropStruct getInstance() {
return instance;
}
@Override
public int getType() {
return Struct.TYPE_REGULAR;
}
}