package eis.iilang;
/**
* Takes an IILElement and yields its XML-representation.
*
* @author tristanbehrens
*
*/
public class XMLVisitor implements IILObjectVisitor {
private static String indent = " ";
private static String newline = "\n";
@Override
public Object visit(Action element, Object object) {
String ret = "";
ret += object.toString() + "<action name=\"" + element.name + "\">" + newline;
for ( Parameter p : element.getParameters() ) {
ret += object.toString() + indent + "<actionParameter>" + newline;
ret += p.accept(this,object.toString() + indent + indent);
ret += object.toString() + indent + "</actionParameter>" + newline;
}
ret += object.toString() + "</action>";
return ret;
}
@Override
public Object visit(DataContainer element, Object object) {
assert false : "Not expected";
return "";
}
@Override
public Object visit(Function element, Object object) {
String ret = "";
ret += object.toString() + "<function name=\"" + element.getName() + "\">" + newline;
for ( Parameter p : element.getParameters() ) {
ret += p.accept(this,object.toString() + indent);
}
ret += object.toString() + "</function>"+ newline;
return ret;
}
@Override
public Object visit(Identifier element, Object object) {
return object.toString() + "<identifier value=\"" + element.getValue() + "\"/>" + newline;
}
@Override
public Object visit(IILElement element, Object object) {
assert false : "Not expected";
return "";
}
@Override
public Object visit(Numeral element, Object object) {
return object.toString() + "<number value=\"" + element.getValue() + "\"/>" + newline;
}
@Override
public Object visit(Parameter element, Object object) {
assert false : "Not expected";
return "";
}
@Override
public Object visit(ParameterList element, Object object) {
String ret = "";
ret += object.toString() + "<parameterList>" + newline;
for ( Parameter p : element ) {
ret += p.accept(this,object.toString() + indent);
}
ret += object.toString() + "</parameterList>" + newline;
return ret;
}
@Override
public Object visit(Percept element, Object object) {
String ret = "";
ret += object.toString() + "<percept name=\"" + element.name + "\">" + newline;
for ( Parameter p : element.getParameters() ) {
ret += object.toString() + indent + "<perceptParameter>" + newline;
ret += p.accept(this,object.toString() + indent + indent);
ret += object.toString() + indent + "</perceptParameter>" + newline;
}
ret += object.toString() + "</percept>" + newline;
return ret;
}
@Override
public Object visit(TruthValue element, Object object) {
return object.toString() + "<truthvalue value=\"" + element.getValue() + "\"/>" + newline;
}
/**
* Can be used for convenience's sake. Instantiates a visitor and visits the element.
* @param element
* @return
*/
public static String staticVisit(IILElement element) {
IILObjectVisitor visitor = (IILObjectVisitor) new XMLVisitor();
return (String) element.accept(visitor,"");
}
}