package net.varkhan.base.management.config;
import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
/**
* <b></b>.
* <p/>
*
* @author varkhan
* @date 9/20/14
* @time 8:56 PM
*/
public class MapContext implements SettableConfiguration.Context {
protected final String ctx;
protected final Map<String,Object> map;
public MapContext(String ctx, Map<String,Object> map) {
this.ctx=ctx==null?"":ctx;
this.map=map;
}
@Override
public String name() {
return ctx;
}
@Override
public boolean has(String key) {
return map.containsKey(key);
}
@Override
public Object get(String key) {
return map.get(key);
}
@Override
public Map<String,?> get() {
return Collections.unmodifiableMap(map);
}
public Iterator<Configuration.Entry> iterator() {
return new Iterator<Configuration.Entry>() {
private final Iterator<Map.Entry<String,Object>> it=map.entrySet().iterator();
public boolean hasNext() { return it.hasNext(); }
public Configuration.Entry next() {
final Map.Entry<String,Object> ent=it.next();
return new MapEntry(ctx,ent);
}
public void remove() { it.remove(); }
};
}
@Override
public boolean add(String key, Object val) {
Object ret=map.put(key, val);
return ret==val || ret!=null&&ret.equals(val);
}
@Override
public boolean add(Configuration.Entry cfg) {
return add(cfg.key(),cfg.value());
}
@Override
public boolean add(Map<String,?> cfgs) {
boolean mod=false;
for(Map.Entry<String,?> cfg: cfgs.entrySet()) {
Object ret=map.put(cfg.getKey(),cfg.getValue());
mod |= ret==cfg.getValue() || ret!=null&&ret.equals(cfg.getValue());
}
return mod;
}
@Override
public boolean del(String key) {
return null!=map.remove(key);
}
@Override
public String toString() {
StringBuilder buf = new StringBuilder();
buf.append("[").append(ctx==null ? "" : ctx).append("]\n");
for(Map.Entry<String,Object> e: map.entrySet()) {
buf.append("\t").append(e.getKey()).append("=").append(e.getValue()).append("\n");
}
return buf.toString();
}
}