SourceEltWrapper.java
package edu.udel.cis.vsl.tass.ast.parser;
import java.io.PrintWriter;
import java.io.File;
import java.util.Map;
import edu.udel.cis.vsl.tass.util.Source;
import edu.udel.cis.vsl.tass.ast.impl.FileNode;
class SourceEltWrapper implements NodeEltWrapperIF {
private Source node;
public final static int FILE_FIELD=4;
public SourceEltWrapper(Source node) {
this.node = node;
}
public SourceEltWrapper(int startColumn, int startLine,
int endColumn, int endLine) {
this.node = new Source(null,startLine,endLine,startColumn,endColumn);
}
public void setAttr(int index, NodeEltWrapperIF attr) {
switch (index) {
case 0:
node.setFirstColumn(((IntEltWrapper)attr).getNode());
break;
case 1:
node.setFirstLine(((IntEltWrapper)attr).getNode());
break;
case 2:
node.setLastColumn(((IntEltWrapper)attr).getNode());
break;
case 3:
node.setLastLine(((IntEltWrapper)attr).getNode());
break;
case FILE_FIELD:
FileNode fileNode = ((NodeTypes.FileNode_wrapper)attr).getNode();
node.setFile(fileNode.getFile());
node.setFileContents(fileNode.getContents());
break;
default:
throw new ParserException("Invalid attr in Source element");
}
node = null;
}
public void setChild(int index, NodeEltWrapperIF child) {
throw new ParserException("Source objects have no children");
}
public Source getNode() {
return node;
}
public void toXml(String prefix,
String eltName,
IdGenerator idGen,
Map<Object,Long> refTable,
PrintWriter out) {
if (!refTable.containsKey(node)) {
refTable.put(node,idGen.getId());
}
out.println(prefix+ "<" + eltName+ "source=\"" +
node.firstLine() + "," +
node.firstColumn() + "," +
node.lastLine() + "," +
node.lastColumn() + "\" /");
// TODO: Print file attribute
}
}