package org.batfish.representation.cisco;
import java.util.List;
import java.util.Set;
import org.batfish.datamodel.Configuration;
import org.batfish.datamodel.routing_policy.expr.BooleanExpr;
import org.batfish.datamodel.routing_policy.expr.Disjunction;
import org.batfish.datamodel.routing_policy.expr.MatchAsPath;
import org.batfish.datamodel.routing_policy.expr.NamedAsPathSet;
import org.batfish.common.Warnings;
public class RouteMapMatchAsPathAccessListLine extends RouteMapMatchLine {
private static final long serialVersionUID = 1L;
private final Set<String> _listNames;
private final int _statementLine;
public RouteMapMatchAsPathAccessListLine(Set<String> names,
int statementLine) {
_listNames = names;
_statementLine = statementLine;
}
public Set<String> getListNames() {
return _listNames;
}
@Override
public BooleanExpr toBooleanExpr(Configuration c, CiscoConfiguration cc,
Warnings w) {
Disjunction d = new Disjunction();
List<BooleanExpr> disjuncts = d.getDisjuncts();
for (String listName : _listNames) {
IpAsPathAccessList list = cc.getAsPathAccessLists().get(listName);
if (list != null) {
list.getReferers().put(this,
"route-map match ip as-path access-list");
disjuncts.add(new MatchAsPath(new NamedAsPathSet(listName)));
}
else {
cc.undefined(CiscoStructureType.AS_PATH_ACCESS_LIST, listName,
CiscoStructureUsage.ROUTE_MAP_MATCH_AS_PATH_ACCESS_LIST,
_statementLine);
}
}
return d.simplify();
}
}