package org.batfish.datamodel.routing_policy.statement;
import org.batfish.datamodel.AbstractRoute;
import org.batfish.datamodel.BgpRoute;
import org.batfish.datamodel.routing_policy.Environment;
import org.batfish.datamodel.routing_policy.Result;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
public enum Statements {
DefaultAction,
DeleteAllCommunities,
ExitAccept,
ExitReject,
FallThrough,
Return,
ReturnFalse,
ReturnLocalDefaultAction,
ReturnTrue,
SetDefaultActionAccept,
SetDefaultActionReject,
SetLocalDefaultActionAccept,
SetLocalDefaultActionReject,
SetReadIntermediateBgpAttributes,
SetWriteIntermediateBgpAttributes,
UnsetWriteIntermediateBgpAttributes;
public static class StaticStatement extends Statement {
/**
*
*/
private static final long serialVersionUID = 1L;
private static final String TYPE_VAR = "type";
private Statements _type;
@JsonCreator
public StaticStatement(@JsonProperty(TYPE_VAR) Statements type) {
_type = type;
}
@Override
public boolean equals(Object rhs) {
if (rhs instanceof StaticStatement) {
return _type.equals(((StaticStatement) rhs)._type);
}
return false;
}
@Override
public Result execute(Environment environment) {
Result result = new Result();
switch (this._type) {
case DefaultAction:
result.setExit(true);
result.setBooleanValue(environment.getDefaultAction());
break;
case DeleteAllCommunities:
break;
case ExitAccept:
result.setExit(true);
result.setBooleanValue(true);
break;
case ExitReject:
result.setExit(true);
result.setBooleanValue(false);
break;
case FallThrough:
result.setReturn(true);
result.setFallThrough(true);
break;
case Return:
result.setReturn(true);
break;
case ReturnFalse:
result.setReturn(true);
result.setBooleanValue(false);
break;
case ReturnLocalDefaultAction:
result.setReturn(true);
result.setBooleanValue(environment.getLocalDefaultAction());
break;
case ReturnTrue:
result.setReturn(true);
result.setBooleanValue(true);
break;
case SetDefaultActionAccept:
environment.setDefaultAction(true);
break;
case SetDefaultActionReject:
environment.setDefaultAction(false);
break;
case SetLocalDefaultActionAccept:
environment.setLocalDefaultAction(true);
break;
case SetLocalDefaultActionReject:
environment.setLocalDefaultAction(false);
break;
case SetReadIntermediateBgpAttributes:
environment.setReadFromIntermediateBgpAttributes(true);
break;
case SetWriteIntermediateBgpAttributes:
if (environment.getIntermediateBgpAttributes() == null) {
BgpRoute.Builder ir = new BgpRoute.Builder();
environment.setIntermediateBgpAttributes(ir);
AbstractRoute or = environment.getOriginalRoute();
ir.setMetric(or.getMetric());
ir.setTag(or.getTag());
}
environment.setWriteToIntermediateBgpAttributes(true);
break;
case UnsetWriteIntermediateBgpAttributes:
environment.setWriteToIntermediateBgpAttributes(false);
break;
default:
break;
}
return result;
}
@JsonProperty(TYPE_VAR)
public Statements getType() {
return _type;
}
@Override
public int hashCode() {
return _type.hashCode();
}
@Override
public String toString() {
return _type.toString();
}
}
public StaticStatement toStaticStatement() {
return new StaticStatement(this);
}
}