package org.batfish.datamodel.routing_policy.expr;
import java.util.ArrayList;
import java.util.List;
import org.batfish.datamodel.routing_policy.Environment;
import org.batfish.datamodel.routing_policy.Result;
import org.batfish.datamodel.routing_policy.statement.Statement;
public class WithEnvironmentExpr extends BooleanExpr {
/**
*
*/
private static final long serialVersionUID = 1L;
private BooleanExpr _expr;
private List<Statement> _postStatements;
private List<Statement> _postTrueStatements;
private List<Statement> _preStatements;
public WithEnvironmentExpr() {
_preStatements = new ArrayList<>();
_postStatements = new ArrayList<>();
_postTrueStatements = new ArrayList<>();
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
WithEnvironmentExpr other = (WithEnvironmentExpr) obj;
if (_expr == null) {
if (other._expr != null) {
return false;
}
}
else if (!_expr.equals(other._expr)) {
return false;
}
if (_postStatements == null) {
if (other._postStatements != null) {
return false;
}
}
else if (!_postStatements.equals(other._postStatements)) {
return false;
}
if (_postTrueStatements == null) {
if (other._postTrueStatements != null) {
return false;
}
}
else if (!_postTrueStatements.equals(other._postTrueStatements)) {
return false;
}
if (_preStatements == null) {
if (other._preStatements != null) {
return false;
}
}
else if (!_preStatements.equals(other._preStatements)) {
return false;
}
return true;
}
@Override
public Result evaluate(Environment environment) {
for (Statement statement : _preStatements) {
statement.execute(environment);
}
Result result = _expr.evaluate(environment);
for (Statement statement : _postStatements) {
statement.execute(environment);
}
if (result.getBooleanValue()) {
for (Statement statement : _postTrueStatements) {
statement.execute(environment);
}
}
return result;
}
public BooleanExpr getExpr() {
return _expr;
}
public List<Statement> getPostStatements() {
return _postStatements;
}
public List<Statement> getPostTrueStatements() {
return _postTrueStatements;
}
public List<Statement> getPreStatements() {
return _preStatements;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((_expr == null) ? 0 : _expr.hashCode());
result = prime * result
+ ((_postStatements == null) ? 0 : _postStatements.hashCode());
result = prime * result + ((_postTrueStatements == null) ? 0
: _postTrueStatements.hashCode());
result = prime * result
+ ((_preStatements == null) ? 0 : _preStatements.hashCode());
return result;
}
public void setExpr(BooleanExpr expr) {
_expr = expr;
}
public void setPostStatements(List<Statement> postStatements) {
_postStatements = postStatements;
}
public void setPostTrueStatements(List<Statement> postTrueStatements) {
_postTrueStatements = postTrueStatements;
}
public void setPreStatements(List<Statement> preStatements) {
_preStatements = preStatements;
}
}