package com.taobao.zeus.store;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.taobao.zeus.model.GroupDescriptor;
public class GroupBean implements Serializable{
private static final long serialVersionUID = 1L;
private GroupBean parentGroupBean;
private final GroupDescriptor groupDescriptor;
private Map<String, JobBean> jobBeanMap=new HashMap<String, JobBean>();
private List<GroupBean> children=new ArrayList<GroupBean>();
public GroupBean(GroupDescriptor g){
this.groupDescriptor=g;
}
/**
* 获取带层次的属性
* @return
*/
public HierarchyProperties getHierarchyProperties(){
if(parentGroupBean!=null){
return new HierarchyProperties(parentGroupBean.getHierarchyProperties(), groupDescriptor.getProperties());
}
return new HierarchyProperties(groupDescriptor.getProperties());
}
public Map<String, String> getProperties(){
return groupDescriptor.getProperties();
}
public List<Map<String, String>> getHierarchyResources(){
List<Map<String, String>> local=new ArrayList<Map<String,String>>(groupDescriptor.getResources());
if(local==null){
local=new ArrayList<Map<String,String>>();
}
if(parentGroupBean!=null){
local.addAll(parentGroupBean.getHierarchyResources());
}
return local;
}
/**
* 获取所有组下组(无限级)
* @return
*/
public Map<String, GroupBean> getAllSubGroupBeans(){
Map<String, GroupBean> map=new HashMap<String, GroupBean>();
for(GroupBean gb:getChildrenGroupBeans()){
for(GroupBean child:getChildrenGroupBeans()){
map.put(child.getGroupDescriptor().getId(), child);
}
map.putAll(gb.getAllSubGroupBeans());
}
return map;
}
/**
* 获取组下(无限级)所有的任务Map
* @return
*/
public Map<String, JobBean> getAllSubJobBeans(){
Map<String, JobBean> map=new HashMap<String, JobBean>();
for(GroupBean gb:getChildrenGroupBeans()){
map.putAll(gb.getAllSubJobBeans());
}
map.putAll(jobBeanMap);
return map;
}
/**
* 获取组下(一级)所有的任务Map
* @return
*/
public Map<String, JobBean> getJobBeans(){
return jobBeanMap;
}
/**
* 获取JobBean
* @param jobId
* @return
*/
public JobBean getJobBean(String jobId){
return jobBeanMap.get(jobId);
}
/**
* 获取父级GroupBean
* @return
*/
public GroupBean getParentGroupBean(){
return parentGroupBean;
}
/**
* 获取下一级GroupBean
* @return
*/
public List<GroupBean> getChildrenGroupBeans(){
return children;
}
public GroupDescriptor getGroupDescriptor(){
return groupDescriptor;
}
public boolean isDirectory(){
return groupDescriptor.isDirectory();
}
public void setParentGroupBean(GroupBean parentGroupBean) {
this.parentGroupBean = parentGroupBean;
}
public boolean isExisted(){
return groupDescriptor.isExisted();
}
}