package org.hsweb.web.socket.cmd;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* spring管理的处理器容器
* Created by 浩 on 2016-01-19 0019.
*/
@Component
public class SpringCmdProcessorContainer implements CmdProcessorContainer {
/**
* 命令缓存
*/
private Map<String, CmdProcessor> cache = new HashMap<>();
/**
* spring容器
*/
@Autowired
private ApplicationContext applicationContext;
@Override
public CmdProcessor getCmdProcessor(String name) {
return cache.get(name);
}
@Override
public CmdProcessor registerCmdProcessor(CmdProcessor processor) {
return cache.put(processor.getName(), processor);
}
@Override
public CmdProcessor cancelCmdProcessor(String name) {
return cache.remove(name);
}
@Override
public List<CmdProcessor> getAll() {
return new ArrayList<>(cache.values());
}
/**
* 通过获取spring管理的bean,向容器注册处理器
*/
@Override
@PostConstruct
public void init() {
Map<String, CmdProcessor> processorMap = applicationContext.getBeansOfType(CmdProcessor.class);
if (processorMap != null) {
processorMap.values().forEach(this::registerCmdProcessor);
}
}
}