package org.infosec.ismp.manager.domains;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.infosec.ismp.manager.agent.AgentComponent;
import org.infosec.ismp.manager.agent.AgentLocator;
import org.infosec.ismp.util.ThreadCategory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* 管理所有的域,是Domain的所有
*
* @author lianglin
*
*/
@Component
public class DomainLocator {
private AgentLocator m_agentLocator;
@Autowired(required=true)
public void setAgentLocator(AgentLocator agentLocator) {
m_agentLocator = agentLocator;
}
/**
* 所有的域对象和域id
*/
private Map<String, DomainComponent> m_domains = new HashMap<String, DomainComponent>();
/**
* 通过域唯一标识获得该域
*
* @param domain
* @return
*/
protected DomainComponent getDomain(String domain) {
return m_domains.get(domain);
}
/**
* 获取所有域
* @return
*/
public List<DomainComponent> getAllDomains(){
List<DomainComponent> list= new ArrayList<DomainComponent>();
list.addAll(m_domains.values());
return list;
}
public DomainComponent createDomainIfNessary(String domain) {
DomainComponent domainComp = getDomain(domain);
if (domainComp == null) {
domainComp = new DomainComponent(domain);
List<AgentComponent> agentComponents = m_agentLocator.getAgentByDomain(domain);
log().info("域标识为:"+domain+"的域,对应的Agent对象是 :"+agentComponents);
domainComp.setAgentComponents(agentComponents);
m_domains.put(domain, domainComp);
}
return domainComp;
}
ThreadCategory log() {
return ThreadCategory.getInstance(getClass());
}
}