package prolog.demonstration;

import prolog.model.*;
import prolog.implementation.*;
import prolog.treeview.*;

public class DemoProgramBuilder extends ProgramBuilder
{
	protected Tree tree = null;
	protected ISymbolTable symbolTable = null;

	public DemoProgramBuilder( Tree tree )
	{
		this.tree = tree;
	}

	public IQueryList createQueryList()
	{
		return new QueryList();
	}

	public IStatementMap createStatementMap()
	{
		return new StatementMap();
	}

	public IFactDb createFactDb()
	{
		return new FactDb();
	}

	public IProgram createProgram()
	{
		return new DemoProgram( tree );
	}

	public IFact createAndStatement( int name )
	{
		return new DemoAndStatement( tree, name );
	}

	public IFact createAndStatement( IFact f )
	{
		return new DemoAndStatement( tree, f );
	}

	public IFact createConstraintStatement( int name )
	{
		return new DemoConstraintStatement( tree, name );
	}

	public IFact createConstraintStatement( int name, IRelation relation )
	{
		return new DemoConstraintStatement( tree, name, relation );
	}

	public IFact createMatchingStatement( int name )
	{
		return new DemoMatchingStatement( tree, name );
	}

	public IFact createMatchingStatement( int name, IRelation relation )
	{
		return new DemoMatchingStatement( tree, name, relation );
	}

	public ISymbolTable getSymbolTable()
	{
		if( this.symbolTable == null )
			this.symbolTable = new SymbolTable();
		return this.symbolTable;
	}
}
