package com.appleframework.distributed.context;
import com.alibaba.dubbo.rpc.RpcContext;
import com.appleframework.context.invoke.OperatorContext;
import com.appleframework.model.Operator;
import com.appleframework.model.OperatorType;
import com.appleframework.model.OperatorUser;
public class DistributedOperatorContext implements OperatorContext {
private static DistributedOperatorContext context;
static {
context = new DistributedOperatorContext();
}
public void setOperator(Operator operator) {
RpcContext.getContext().setAttachment(KEY_ID, operator.getUser().getId());
RpcContext.getContext().setAttachment(KEY_NAME, operator.getUser().getName());
RpcContext.getContext().setAttachment(KEY_EXTEND, operator.getUser().getExtend());
RpcContext.getContext().setAttachment(KEY_TYPE, String.valueOf(operator.getType().getIndex()));
}
public Operator getOperator() {
String id = RpcContext.getContext().getAttachment(KEY_ID);
String extend = RpcContext.getContext().getAttachment(KEY_EXTEND);
if(null == id && null == extend) {
return null;
}
String name = RpcContext.getContext().getAttachment(KEY_NAME);
String type = RpcContext.getContext().getAttachment(KEY_TYPE);
return Operator.creat(OperatorType.get(Integer.parseInt(type)), new OperatorUser(id, name, extend));
}
public void set(String key, String value) {
RpcContext.getContext().setAttachment(key, value);
}
public static OperatorContext instance() {
if (context == null) {
context = new DistributedOperatorContext();
}
return context;
}
public static OperatorContext getInstance() {
return instance();
}
}