

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

/**
 * Token manager declaration blocks are implemented as a {@link List} of
 * {@link String} objects representing the collected code.  They are stored
 * in order of declaration.
 *
 * @layer<collect>
 */
    
public class TokenManagerData extends ArrayList {

    public void addNode( TokenManagerNode node ) {
        String prefix = node.arg[0].arg[0].tok[0].getTokenName() ;
        String suffix = node.arg[0].arg[1].tok[0].getTokenName() ;
        add( prefix + suffix ) ;
    }

    /**
     * Formats the token manager blocks, each beginning on a separate line
     * and separated from the others by a blank line, by placing a
     * "TOKEN_MGR_DECLS" prefix and a "}" suffix.
     *
     * @layer<collect>
     */
    public String toString() {

        if ( size() < 1 )
            return "// No TOKEN_MGR_DECLS defined in Bali grammar." ;

        StringBuffer buffer = new StringBuffer() ;

        Iterator p = iterator() ;
        if ( p.hasNext() ) {
            buffer.append( "TOKEN_MGR_DECLS :" ) ;
            buffer.append( p.next() ) ;
            buffer.append( Main.LINE_SEPARATOR ) ;
            buffer.append( '}' ) ;
        }

        while ( p.hasNext() ) {
            buffer.append( Main.LINE_SEPARATOR ) ;
            buffer.append( Main.LINE_SEPARATOR ) ;
            buffer.append( "TOKEN_MGR_DECLS :" ) ;
            buffer.append( p.next() ) ;
            buffer.append( Main.LINE_SEPARATOR ) ;
            buffer.append( '}' ) ;
        }

        return buffer.toString() ;
    }

}
