/** * FormPrinter.java * * @author Charles Groves */ package edu.sc.seis.sod.validator.tour; import edu.sc.seis.sod.validator.model.Attribute; import edu.sc.seis.sod.validator.model.Choice; import edu.sc.seis.sod.validator.model.Data; import edu.sc.seis.sod.validator.model.Empty; import edu.sc.seis.sod.validator.model.Form; import edu.sc.seis.sod.validator.model.Group; import edu.sc.seis.sod.validator.model.Interleave; import edu.sc.seis.sod.validator.model.NamedElement; import edu.sc.seis.sod.validator.model.NotAllowed; import edu.sc.seis.sod.validator.model.Text; import edu.sc.seis.sod.validator.model.Value; public class FormPrinter implements Tourist{ public FormPrinter(){ this(2); } public FormPrinter(int indentLevel){ for (int i = 0; i < indentLevel; i++){ this.indent += ' '; } } public void visit(Attribute attr) { String print = "@" + attr.getName() + " " + getCardinality(attr); printAndIncreaseDepth(print, attr); } public void visit(Choice choice) { printAndIncreaseDepth("Choice " + getCardinality(choice), choice); } private String getCardinality(Form choice) { return "Min: " + choice.getMin() + " Max: " + choice.getMax(); } public void visit(Data d) { print("Data: " + d.getDatatype() + " " + getCardinality(d), d); } public void visit(Empty e) { print("Empty", e); } public void visit(Group g) { String print ="Group" + " " + getCardinality(g); printAndIncreaseDepth(print, g); } public void visit(Interleave i) { printAndIncreaseDepth("Interleave" + " " + getCardinality(i), i); } public void visit(NotAllowed na) { print("Not Allowed", na); } public void visit(NamedElement ne) { String print = ne.getName() + " " + getCardinality(ne); printAndIncreaseDepth(print, ne); } public void visit(Text t) { print("Text", t); } public void leave(Attribute attr) { depth--; } public void leave(Choice choice) { depth--; } public void leave(Group g) { depth--; } public void leave(Interleave i) { depth--; } public void leave(NamedElement ne) { depth--; } public void visit(Value v) { print("Value: " + v.getValue() + " " + v.getDatatype() + " " + getCardinality(v), v); } private void printAndIncreaseDepth(String s, Form f) { print(s, f); depth++; } private void print(String s, Form f){ for (int i = 0; i < depth; i++) { System.out.print(indent); } System.out.println(s + " " + f.getAnnotation().getSummary()); } private int depth = 0; private String indent = ""; }