package eu.dnetlib.dlms.view;



public class ParserView {
	private NodeView entryPointNode;
	private NodeView currentNode;
	private String viewName;

	public ParserView() {
		entryPointNode = null;
		currentNode = null;
	}

	public String getViewName() {
		return viewName;
	}

	public void setViewName(String viewName) {
		this.viewName = viewName;
	}

	public void addEntryPoint(String nameSet) {
		entryPointNode = new NodeView();
		entryPointNode.setNodeName(nameSet);
		entryPointNode.setFatherNode(null);
		currentNode = entryPointNode;
	}

	public void AddRelationToCurrent(String relation) {
		currentNode.addNewRelation(relation);
		currentNode = currentNode.getLastNode();
	}

	public void reachNode(String nodeName) {
		currentNode.setNodeName(nodeName);
	}

	public void relationsClose() throws Exception {
		if (currentNode == null)
			throw new Exception("Error building the view");
		currentNode = currentNode.getFatherNode();
	}
	
	public boolean isCorrectStructView(QueryManager qmanager)
	{
		if (currentNode!= entryPointNode)
			return false;
		System.out.println("Nome Entrypoint "+entryPointNode.getNodeName());
		return entryPointNode.typeChecking(qmanager);
	}
	
	public void debug()
	{
		System.out.println("-----------Debug View-----------");
		entryPointNode.debug();
	}
	
	public StringBuffer getXML()
	{
		StringBuffer output=null;
		output= new StringBuffer();
		output.append("<?xml version=\"1.0\"?>");
		output.append("<view name= \"");
		output.append(viewName);
		output.append("\" entrypoint= \"");
		output.append(entryPointNode.getNodeName());
		output.append("\"");
		entryPointNode.generateXML(output, true);
		output.append("</view>");
		
		return output;
	}

}



