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.CoalesceEmptyString;
import com.intrbiz.bergamot.config.resolver.stratergy.MergeList;
import com.intrbiz.bergamot.config.resolver.stratergy.SmartMergeSet;
@XmlType(name = "host")
@XmlRootElement(name = "host")
public class HostCfg extends ActiveCheckCfg<HostCfg>
{
private static final long serialVersionUID = 1L;
private List<ServiceCfg> services = new LinkedList<ServiceCfg>();
private List<TrapCfg> traps = new LinkedList<TrapCfg>();
private String location;
private String address;
private Set<String> serviceGroups = new LinkedHashSet<String>();
public HostCfg()
{
super();
}
@XmlElementRef(type = ServiceCfg.class)
@ResolveWith(MergeList.class)
public List<ServiceCfg> getServices()
{
return services;
}
public void setServices(List<ServiceCfg> services)
{
this.services = services;
}
public ServiceCfg lookupService(String name)
{
return this.services.stream().filter((s) -> {
return name.equals(s.getName());
}).findFirst().get();
}
@XmlElementRef(type = TrapCfg.class)
@ResolveWith(MergeList.class)
public List<TrapCfg> getTraps()
{
return traps;
}
public void setTraps(List<TrapCfg> traps)
{
this.traps = traps;
}
public TrapCfg lookupTrap(String name)
{
return this.traps.stream().filter((t) -> {
return name.equals(t.getName());
}).findFirst().get();
}
@XmlAttribute(name = "location")
@ResolveWith(CoalesceEmptyString.class)
public String getLocation()
{
return location;
}
public void setLocation(String location)
{
this.location = location;
}
@XmlAttribute(name = "address")
@ResolveWith(CoalesceEmptyString.class)
public String getAddress()
{
return address;
}
public void setAddress(String address)
{
this.address = address;
}
@XmlJavaTypeAdapter(CSVAdapter.class)
@XmlAttribute(name = "service-groups")
@ResolveWith(SmartMergeSet.class)
public Set<String> getServiceGroups()
{
return serviceGroups;
}
public void setServiceGroups(Set<String> serviceGroups)
{
this.serviceGroups = serviceGroups;
}
public List<TemplatedObjectCfg<?>> getTemplatedChildObjects()
{
List<TemplatedObjectCfg<?>> r = super.getTemplatedChildObjects();
if (this.services != null)
r.addAll(this.services);
if (this.traps != null)
r.addAll(this.traps);
return r;
}
@Override
protected void resolveChildren(HostCfg resolved)
{
// services
List<ServiceCfg> services = new LinkedList<ServiceCfg>();
for (ServiceCfg cfg : resolved.getServices())
{
services.add(cfg.resolve());
}
resolved.setServices(services);
// traps
List<TrapCfg> traps = new LinkedList<TrapCfg>();
for (TrapCfg cfg : resolved.getTraps())
{
traps.add(cfg.resolve());
}
resolved.setTraps(traps);
}
}