package com.appleframework.context.invoke;
import java.util.HashMap;
import java.util.Map;
import com.appleframework.context.invoke.OperatorContext;
import com.appleframework.model.Operator;
import com.appleframework.model.OperatorType;
import com.appleframework.model.OperatorUser;
public class ThreadLocalOperatorContext implements OperatorContext {
private static ThreadLocalOperatorContext context;
private static ThreadLocal<Map<String, String>> threadLocal;
static {
threadLocal = new ThreadLocal<Map<String, String>>();
context = new ThreadLocalOperatorContext();
}
public void setOperator(Operator operator) {
Map<String, String> map = this.getMap();
map.put(KEY_ID, operator.getUser().getId());
map.put(KEY_NAME, operator.getUser().getName());
map.put(KEY_EXTEND, operator.getUser().getExtend());
map.put(KEY_TYPE, String.valueOf(operator.getType().getIndex()));
threadLocal.set(map);
}
public Operator getOperator() {
Map<String, String> map = this.getMap();
String id = map.get(KEY_ID);
String extend = map.get(KEY_EXTEND);
if(null == id && null == extend) {
return null;
}
String name = map.get(KEY_NAME);
String type = map.get(KEY_TYPE);
return Operator.creat(OperatorType.get(Integer.parseInt(type)), new OperatorUser(id, name, extend));
}
public Map<String, String> getMap(){
Map<String, String> map = threadLocal.get();
if(null == map) {
map = new HashMap<String, String>();
}
return map;
}
public void set(String key, String value) {
Map<String, String> map = this.getMap();
map.put(key, value);
threadLocal.set(map);
}
public static OperatorContext instance() {
if (context == null) {
context = new ThreadLocalOperatorContext();
}
return context;
}
public static OperatorContext getInstance() {
return instance();
}
}