package org.nutz.ioc.loader.json;
import java.io.IOException;
import java.io.Reader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.nutz.ioc.loader.map.MapLoader;
import org.nutz.json.Json;
import org.nutz.lang.Lang;
import org.nutz.log.Log;
import org.nutz.log.Logs;
import org.nutz.resource.NutResource;
import org.nutz.resource.Scans;
/**
* 从 Json 文件中读取配置信息。 支持 Merge with parent ,利用 MapLoader
* <p>
* 注,如果 JSON 配置文件被打入 Jar 包中,这个加载器将不能正常工作
*
* @author zozoh(zozohtnt@gmail.com)
* @author wendal(wendal1985@gmail.com)
*/
@SuppressWarnings("unchecked")
public class JsonLoader extends MapLoader {
private static final Log log = Logs.get();
public JsonLoader(Reader reader) {
loadFromReader(reader);
if(log.isDebugEnabled())
log.debugf("Loaded %d bean define from reader --\n%s", getMap().size(), getMap().keySet());
}
public JsonLoader(String... paths) {
this.setMap(new HashMap<String, Map<String, Object>>());
List<NutResource> list = Scans.me().loadResource("^(.+[.])(js|json)$", paths);
try {
for (NutResource nr : list)
loadFromReader(nr.getReader());
}
catch (IOException e) {
throw Lang.wrapThrow(e);
}
if(log.isDebugEnabled())
log.debugf("Loaded %d bean define from path=%s --> %s", getMap().size(), Arrays.toString(paths), getMap().keySet());
}
private void loadFromReader(Reader reader) {
String s = Lang.readAll(reader);
Map<String, Map<String, Object>> map = (Map<String, Map<String, Object>>) Json.fromJson(s);
if (null != map && map.size() > 0)
getMap().putAll(map);
}
}