package com.intrbiz.bergamot.config.model;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElementRef;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import com.intrbiz.bergamot.config.adapter.CSVAdapter;
import com.intrbiz.bergamot.config.resolver.ResolveWith;
import com.intrbiz.bergamot.config.resolver.stratergy.MergeList;
import com.intrbiz.bergamot.config.resolver.stratergy.SmartMergeSet;
@XmlType(name = "cluster")
@XmlRootElement(name = "cluster")
public class ClusterCfg extends VirtualCheckCfg<ClusterCfg>
{
private static final long serialVersionUID = 1L;
private List<ResourceCfg> resources = new LinkedList<ResourceCfg>();
private Set<String> resoruceGroups = new LinkedHashSet<String>();
public ClusterCfg()
{
super();
}
@XmlElementRef(type = ResourceCfg.class)
@ResolveWith(MergeList.class)
public List<ResourceCfg> getResources()
{
return resources;
}
public void setResources(List<ResourceCfg> resources)
{
this.resources = resources;
}
public ResourceCfg lookupResource(String name)
{
return this.resources.stream().filter((r) -> { return name.equals(r.getName()); }).findFirst().get();
}
@XmlJavaTypeAdapter(CSVAdapter.class)
@XmlAttribute(name = "resource-groups")
@ResolveWith(SmartMergeSet.class)
public Set<String> getResoruceGroups()
{
return resoruceGroups;
}
public void setResoruceGroups(Set<String> resoruceGroups)
{
this.resoruceGroups = resoruceGroups;
}
public List<TemplatedObjectCfg<?>> getTemplatedChildObjects()
{
List<TemplatedObjectCfg<?>> r = super.getTemplatedChildObjects();
if (this.resources != null)
{
for (ResourceCfg resource : this.resources)
{
r.add(resource);
}
}
return r;
}
@Override
protected void resolveChildren(ClusterCfg resolved)
{
List<ResourceCfg> resources = new LinkedList<ResourceCfg>();
for (ResourceCfg cfg : resolved.getResources())
{
resources.add(cfg.resolve());
}
resolved.setResources(resources);
}
}