package org.batfish.datamodel.collections;
import java.io.Serializable;
import org.batfish.datamodel.Prefix;
public class FibRow implements Comparable<FibRow>, Serializable {
public static final String DROP_INTERFACE = "drop";
private static final long serialVersionUID = 1L;
private String _interface;
private String _nextHop;
private String _nextHopInterface;
private Prefix _prefix;
public FibRow(Prefix prefix, String iface, String nextHop,
String nextHopInterface) {
_prefix = prefix;
_interface = iface;
_nextHop = nextHop;
_nextHopInterface = nextHopInterface;
}
@Override
public int compareTo(FibRow rhs) {
int prefixComparison = _prefix.getAddress()
.compareTo(rhs._prefix.getAddress());
if (prefixComparison == 0) {
int lengthComparison = Integer.compare(_prefix.getPrefixLength(),
rhs._prefix.getPrefixLength());
if (lengthComparison == 0) {
int interfaceComparison = _interface.compareTo(rhs._interface);
if (interfaceComparison == 0) {
int nextHopComparison = _nextHop.compareTo(rhs._nextHop);
if (nextHopComparison == 0) {
return _nextHopInterface.compareTo(rhs._nextHopInterface);
}
else {
return nextHopComparison;
}
}
else {
return interfaceComparison;
}
}
else {
return lengthComparison;
}
}
else {
return prefixComparison;
}
}
@Override
public boolean equals(Object o) {
FibRow rhs = (FibRow) o;
return (_prefix.equals(rhs._prefix) && _interface.equals(rhs._interface));
}
public String getInterface() {
return _interface;
}
public String getNextHop() {
return _nextHop;
}
public String getNextHopInterface() {
return _nextHopInterface;
}
public Prefix getPrefix() {
return _prefix;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + _interface.hashCode();
result = prime * result + _prefix.hashCode();
result = prime * result + _nextHop.hashCode();
result = prime * result + _nextHopInterface.hashCode();
return result;
}
@Override
public String toString() {
return String.format("%-19s", _prefix.toString()) + _interface;
}
}