package org.nutz.mvc.impl.chainconfig;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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文件获取配置信息.
* <p/>默认配置会首先加载,用户文件可以覆盖之
* @author wendal(wendal1985@gmail.com)
*/
public class JsonActionChainMakerConfiguretion implements ActionChainMakerConfiguration {
private static final Log log = Logs.get();
protected Map<String,Map<String,Object>> map = new HashMap<String, Map<String,Object>>();
@SuppressWarnings("unchecked")
public JsonActionChainMakerConfiguretion(String...jsonPaths) {
List<NutResource> list = Scans.me().loadResource("^(.+[.])(js|json)$", jsonPaths);
try {
map.putAll(Json.fromJson(Map.class, new InputStreamReader(getClass().getClassLoader().getResourceAsStream("org/nutz/mvc/impl/chainconfig/default-chains.js"))));
if (!list.isEmpty()) {
for (NutResource nr : list)
map.putAll(Json.fromJson(Map.class,nr.getReader()));
if (log.isDebugEnabled())
log.debug("ActionChain Config:\n" + Json.toJson(map));
}
}
catch (IOException e) {
throw Lang.wrapThrow(e);
}
}
@SuppressWarnings("unchecked")
public List<String> getProcessors(String key) {
Map<String,Object> config = map.get(key);
if(config != null && config.containsKey("ps"))
return (List<String>) config.get("ps");
return (List<String>) map.get("default").get("ps");
}
public String getErrorProcessor(String key) {
Map<String,Object> config = map.get(key);
if(config != null && config.containsKey("error"))
return (String) config.get("error");
return (String) map.get("default").get("error");
}
}