package org.batfish.question;
import java.util.SortedMap;
import java.util.TreeMap;
import org.batfish.common.Answerer;
import org.batfish.common.ParseTreeSentences;
import org.batfish.common.plugin.IBatfish;
import org.batfish.datamodel.answers.AnswerElement;
import org.batfish.datamodel.answers.ParseVendorConfigurationAnswerElement;
import org.batfish.datamodel.questions.Question;
import com.fasterxml.jackson.annotation.JsonCreator;
public class ParseTreesQuestionPlugin extends QuestionPlugin {
public static class ParseTreesAnswerElement implements AnswerElement {
private SortedMap<String, ParseTreeSentences> _parseTrees;
@JsonCreator
public ParseTreesAnswerElement() {
_parseTrees = new TreeMap<>();
}
public SortedMap<String, ParseTreeSentences> getParseTrees() {
return _parseTrees;
}
@Override
public String prettyPrint() {
StringBuilder sb = new StringBuilder();
sb.append("Parse trees of vendor configurations\n");
for (String name : _parseTrees.keySet()) {
sb.append("\n " + name + " [Parse tree]\n");
for (String sentence : _parseTrees.get(name).getSentences()) {
sb.append(" " + sentence + "\n");
}
}
return sb.toString();
}
public void setParseTrees(
SortedMap<String, ParseTreeSentences> parseTrees) {
_parseTrees = parseTrees;
}
}
public static class ParseTreesAnswerer extends Answerer {
public ParseTreesAnswerer(Question question, IBatfish batfish) {
super(question, batfish);
}
@Override
public ParseTreesAnswerElement answer() {
// ParseTreesQuestion question = (ParseTreesQuestion) _question;
_batfish.checkConfigurations();
ParseTreesAnswerElement answerElement = new ParseTreesAnswerElement();
ParseVendorConfigurationAnswerElement parseAnswer = _batfish
.loadParseVendorConfigurationAnswerElement();
answerElement._parseTrees = parseAnswer.getParseTrees();
return answerElement;
}
}
// <question_page_comment>
/**
* Outputs parse trees from test-rig initialization.
*
* @type InitInfo onefile
*
* @example bf_answer("parsetrees") Get parse trees
*/
public static class ParseTreesQuestion extends Question {
public ParseTreesQuestion() {
}
@Override
public boolean getDataPlane() {
return false;
}
@Override
public String getName() {
return "parsetrees";
}
@Override
public boolean getTraffic() {
return false;
}
@Override
public String prettyPrint() {
return getName();
}
}
@Override
protected ParseTreesAnswerer createAnswerer(Question question,
IBatfish batfish) {
return new ParseTreesAnswerer(question, batfish);
}
@Override
protected ParseTreesQuestion createQuestion() {
return new ParseTreesQuestion();
}
}