package com.erdaoya.springcloud.comx.source.sourcebase;
import com.alibaba.fastjson.JSONObject;
import com.erdaoya.springcloud.comx.schema.Schema;
import com.erdaoya.springcloud.comx.boot.ComxConfLoader;
import com.erdaoya.springcloud.comx.context.Context;
import com.erdaoya.springcloud.comx.schema.SchemaLoader;
import com.erdaoya.springcloud.comx.schema.datadecor.DecorFactory;
import com.erdaoya.springcloud.comx.schema.datadecor.decors.AbstractDecor;
import com.erdaoya.springcloud.comx.source.SourceException;
import com.erdaoya.springcloud.comx.utils.config.Config;
import com.erdaoya.springcloud.comx.utils.rest.RequestMessage;
import java.util.HashMap;
import java.util.Map;
/**
* Created by xue on 1/12/17.
*/
public class InnerSourceBase extends AbstractRequestBasedSourceBase{
public InnerSourceBase(Config config) {
super(config);
}
// TODO 这里只能进行包装
protected Object doRequest(RequestMessage request, Context context) throws SourceException {
try {
Context newContext = context.copy();
newContext.setRequest(request);
String path = request.getUrl().getRelatedPath(ComxConfLoader.getUrlPrefix());
Object data = new HashMap<String, Object>();
Schema schema = SchemaLoader.load(path, "get");
newContext.setSchema(schema);
AbstractDecor rootdecor = DecorFactory.create(schema.getConf(), AbstractDecor.TYPE_ROOT);
rootdecor.decorate(data, newContext);
context.getLogger().debug("" + conf.rawData());
context.getLogger().debug("InnerSourceBase :" + new JSONObject((Map) data).toJSONString());
// TODO 验证逻辑
if (((Map) data).isEmpty()) return null;
return data;
} catch (Exception ex) {
throw new SourceException(ex);
}
}
public String getUrlPrefix(Context context) {
return ComxConfLoader.getUrlPrefix();
//return context.getUrlPrefix();
}
}