package gov.nasa.jpl.mbee.mdk.generator;
import gov.nasa.jpl.mbee.mdk.model.Container;
import gov.nasa.jpl.mbee.mdk.model.DocGenElement;
import gov.nasa.jpl.mbee.mdk.model.Document;
import gov.nasa.jpl.mbee.mdk.model.Query;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
/**
* process document model to set those with option "useSectionNameAsTitle"
* should probably be redone as a visitor or include in the transformation to DB
* classes
*
* @author dlam
*/
public class PostProcessor {
private Stack<String> titles;
public PostProcessor() {
titles = new Stack<String>();
}
public void process(Document d) {
titles.push(d.getTitle());
processContainer(d);
titles.pop();
}
private void processContainer(Container c) {
for (DocGenElement de : c.getChildren()) {
if (de instanceof Container) {
String title = ((Container) de).getTitle();
if ((title == null || title.isEmpty()) && de.getUseContextNameAsTitle()) {
((Container) de).setTitle(titles.peek());
}
titles.push(((Container) de).getTitle());
processContainer((Container) de);
titles.pop();
}
else if (de instanceof Query) {
List<String> title = ((Query) de).getTitles();
if ((title == null || title.isEmpty()) && de.getUseContextNameAsTitle()) {
title = new ArrayList<String>();
title.add(titles.peek());
((Query) de).setTitles(title);
}
}
}
}
}