package org.batfish.datamodel; import java.util.List; import java.util.NavigableMap; import java.util.Set; import java.util.TreeSet; import java.util.regex.Pattern; import com.fasterxml.jackson.annotation.JsonCreator; public class IpAccessListsDiff extends ConfigDiffElement { private Pattern _seq; @JsonCreator() public IpAccessListsDiff() { } public IpAccessListsDiff(NavigableMap<String, IpAccessList> before, NavigableMap<String, IpAccessList> after) { super(before.keySet(), after.keySet()); _seq = Pattern.compile("(Seq [0-9]+) (.*)", Pattern.DOTALL | Pattern.CASE_INSENSITIVE); for (String name : super.common()) { if (before.get(name).unorderedEqual(after.get(name))) { _identical.add(name); } else { _diff.add(name); genDiffInfo(before, after, name); } } } private void genDiffInfo(NavigableMap<String, IpAccessList> before, NavigableMap<String, IpAccessList> after, String name) { Set<String> beforeNames = new TreeSet<>(); Set<String> afterNames = new TreeSet<>(); ConfigDiffElement di = new ConfigDiffElement(beforeNames, afterNames); List<IpAccessListLine> beforeLines = before.get(name).getLines(); List<IpAccessListLine> afterLines = after.get(name).getLines(); for (IpAccessListLine line : beforeLines) { if (afterLines.contains(line)) { di._identical.add(getAclLineWithoutSequence(line.getName())); } else { di._inBeforeOnly.add(getAclLineWithoutSequence(line.getName())); } } for (IpAccessListLine line : afterLines) { if (!beforeLines.contains(line)) { di._inAfterOnly.add(getAclLineWithoutSequence(line.getName())); } } di.summarizeIdentical(); } private String getAclLineWithoutSequence(String line) { return _seq.matcher(line).replaceAll("$2"); } }