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
    }

}