package org.deft.repository;

import java.util.Collection;
import java.util.List;

import org.deft.repository.ast.TreeNode;
import org.deft.repository.ast.annotation.AbstractFormattingTemplate;
import org.deft.repository.ast.annotation.Format;
import org.deft.repository.ast.annotation.FormattingConfiguration;
import org.deft.repository.ast.annotation.Ident;
import org.deft.repository.ast.annotation.Templates;
import org.deft.repository.ast.annotation.Format.DisplayType;
import org.deft.repository.ast.annotation.line.LineTemplate;
import org.deft.repository.query.Query;
import org.deft.repository.query.XfsrQueryManager;
import org.w3c.dom.Document;
import org.w3c.dom.Node;

public class XmlFileSystemRepository {

	XfsrQueryManager queryManager = new XfsrQueryManager();




	public Node getXmlContentTree(TreeNode ast, Query query, Format format) {
		
		if (format == null) {
			format = new Format("unchanged");
		}
		
		TreeNode queriedAst = executeQuery(ast, query, format);
		FormattingConfiguration fc = new FormattingConfiguration();
		fc.addTemplate(new LineTemplate());
		TreeNode node = queryManager.cutAndFormat(queriedAst);

		// convert new tree node into xml document
		Document doc = fc.makeXml(node);

		return doc.getDocumentElement();
	}
	
	
	

	public TreeNode executeQuery(TreeNode codeFileAst, Query query, Format format) {
		queryManager.queryAndFormat(codeFileAst, query, format, null);
		return codeFileAst;
	}
}
