package org.batfish.datamodel.routing_policy.statement;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;
import org.batfish.datamodel.routing_policy.Environment;
import org.batfish.datamodel.routing_policy.Result;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "class")
@JsonSubTypes({ @JsonSubTypes.Type(value = AddCommunity.class),
@JsonSubTypes.Type(value = BufferedStatement.class),
@JsonSubTypes.Type(value = CallStatement.class),
@JsonSubTypes.Type(value = Comment.class),
@JsonSubTypes.Type(value = DeleteCommunity.class),
@JsonSubTypes.Type(value = If.class),
@JsonSubTypes.Type(value = PrependAsPath.class),
@JsonSubTypes.Type(value = RetainCommunity.class),
@JsonSubTypes.Type(value = SetCommunity.class),
@JsonSubTypes.Type(value = SetIsisLevel.class),
@JsonSubTypes.Type(value = SetIsisMetricType.class),
@JsonSubTypes.Type(value = SetLocalPreference.class),
@JsonSubTypes.Type(value = SetMetric.class),
@JsonSubTypes.Type(value = SetNextHop.class),
@JsonSubTypes.Type(value = SetOrigin.class),
@JsonSubTypes.Type(value = SetOspfMetricType.class),
@JsonSubTypes.Type(value = SetTag.class),
@JsonSubTypes.Type(value = SetVarMetricType.class),
@JsonSubTypes.Type(value = SetWeight.class) })
public abstract class Statement implements Serializable {
private static final String COMMENT_VAR = "comment";
/**
*
*/
private static final long serialVersionUID = 1L;
private String _comment;
@Override
public abstract boolean equals(Object obj);
public abstract Result execute(Environment environment);
@JsonProperty(COMMENT_VAR)
public final String getComment() {
return _comment;
}
@Override
public abstract int hashCode();
@JsonProperty(COMMENT_VAR)
public final void setComment(String comment) {
_comment = comment;
}
public List<Statement> simplify() {
return Collections.singletonList(this);
}
@Override
public String toString() {
if (_comment != null) {
return getClass().getSimpleName() + "<" + _comment + ">";
}
else {
return super.toString();
}
}
}