package com.erdaoya.springcloud.comx.boot;
import com.alibaba.fastjson.JSONObject;
import com.erdaoya.springcloud.comx.context.Context;
import com.erdaoya.springcloud.comx.schema.Schema;
import com.erdaoya.springcloud.comx.schema.SchemaLoader;
import com.erdaoya.springcloud.comx.schema.datadecor.DecorException;
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.ConfigException;
import com.erdaoya.springcloud.comx.source.SourceBizException;
import com.erdaoya.springcloud.comx.utils.rest.ResponseMessage;
import com.erdaoya.springcloud.comx.utils.rest.Url;
/**
* Created by xue on 12/19/16.
*/
// 处理流程
public class Handler {
public void handle(Context context) {
try {
// 记录进入日志
Url url = context.getRequest().getUrl();
// 规范约定应当为map形式, 但最终并不强制要求是
JSONObject data = new JSONObject();
context.getLogger().info("Handle Url:" + url.getUrl());
String method = context.getRequest().getMethod();
Schema schema = SchemaLoader.load(url.get("path").toString(), method.toLowerCase());
context.setSchema(schema);
// TODO 处理登录验证
AbstractDecor rootdecor = DecorFactory.create(schema.getConf(), AbstractDecor.TYPE_ROOT);
rootdecor.decorate(data, context);
ResponseMessage responseMessage = context.getResponse();
responseMessage.setData(data);
responseMessage.setMessage("");
context.getResponse().setCode(200);
} catch (SourceBizException ex) {
ex.printStackTrace();
context.getLogger().error(ex.getMessage());
context.getResponse().setMessage(ex.getMessage());
context.getResponse().setCode(ex.getStatusCode());
} catch (ConfigException ex) {
ex.printStackTrace();
context.getLogger().error(ex.getMessage());
context.getResponse().setMessage(ex.getMessage());
context.getResponse().setCode(500);
} catch (SourceException ex){
ex.printStackTrace();
context.getLogger().error(ex.getMessage());
context.getResponse().setMessage(ex.getMessage());
context.getResponse().setCode(500);
} catch (DecorException ex) {
ex.printStackTrace();
context.getLogger().error(ex.getMessage());
context.getResponse().setMessage(ex.getMessage());
context.getResponse().setCode(500);
}
}
}