package org.batfish.datamodel; import java.io.Serializable; import java.util.SortedMap; import java.util.SortedSet; import java.util.TreeMap; import java.util.TreeSet; import java.util.stream.Collectors; import org.batfish.common.util.ComparableStructure; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyDescription; public class OspfArea extends ComparableStructure<Long> implements Serializable { private static final String INTERFACES_VAR = "interfaces"; private static final long serialVersionUID = 1L; private static final String SUMMARIES_VAR = "summaries"; private static final String SUMMARY_FILTER_VAR = "summaryFilter"; private transient SortedSet<String> _interfaceNames; private SortedSet<Interface> _interfaces; private SortedMap<Prefix, Boolean> _summaries; private String summaryFilter; @JsonCreator public OspfArea(@JsonProperty(NAME_VAR) Long number) { super(number); _interfaces = new TreeSet<>(); _summaries = new TreeMap<>(); } @JsonProperty(INTERFACES_VAR) @JsonPropertyDescription("The interfaces assigned to this OSPF area") public SortedSet<String> getInterfaceNames() { if (_interfaces != null && !_interfaces.isEmpty()) { return new TreeSet<>(_interfaces.stream().map(i -> i.getName()) .collect(Collectors.toSet())); } else { return _interfaceNames; } } @JsonIgnore public SortedSet<Interface> getInterfaces() { return _interfaces; } @JsonProperty(SUMMARIES_VAR) public SortedMap<Prefix, Boolean> getSummaries() { return _summaries; } @JsonProperty(SUMMARY_FILTER_VAR) public String getSummaryFilter() { return summaryFilter; } public void resolveReferences(final Configuration owner) { if (_interfaceNames != null) { _interfaces = new TreeSet<>(_interfaceNames.stream() .map(ifaceName -> owner.getInterfaces().get(ifaceName)) .collect(Collectors.toSet())); } } @JsonProperty(INTERFACES_VAR) public void setInterfaceNames(SortedSet<String> interfaceNames) { _interfaceNames = interfaceNames; } @JsonIgnore public void setInterfaces(SortedSet<Interface> interfaces) { _interfaces = interfaces; } @JsonProperty(SUMMARIES_VAR) public void setSummaries(SortedMap<Prefix, Boolean> summaries) { _summaries = summaries; } @JsonProperty(SUMMARY_FILTER_VAR) public void setSummaryFilter(String summaryFilterName) { this.summaryFilter = summaryFilterName; } }