import 'Tree.ecore'::tree;
import 'TallTree.ecore'::talltree;
import 'Tree2TallTree.ecore'::tree2talltree;

transformation Tree2TallTree {
	tree imports tree;
	talltree imports talltree;
	tree2talltree imports tree2talltree;

	entry __root__ input tree output talltree {
	    append nodes : tree::Node;
	    buffer node2tallNodes : tree2talltree::Node2TallNode;
	    install Node2MiddleNode {
	        node consumes nodes;
	        node2tallNodes appendsTo node2tallNodes;	
	    } 
	    install Edge2MiddleEdge {
	        node consumes nodes;
	    } 
	    install MiddleNode2TallNode {
	        node2tallNode consumes node2tallNodes;	
	    } 
	}
	
	map Node2MiddleNode {
		guard:tree node : Node; 
		append node2tallNodes : tree2talltree::Node2TallNode; 
		new:tree2talltree node2tallNode : Node2TallNode;
		set node2tallNode.node := node;
		set node2tallNode.name := node.name;
		add node2tallNodes += node2tallNode;
	}
	
	map Edge2MiddleEdge {
		guard:tree node : Node;
		var node2tallNode : Node2TallNode := node.Node2TallNode;
		check node.parent <> null;
		notify set node2tallNode.parent := node.parent.Node2TallNode;
	--		node2tallNode.name := node.name;
	}
	
	map MiddleNode2TallNode {
		guard:tree2talltree node2tallNode : Node2TallNode;
		var tallNode_name : String := node2tallNode.name;
		observe Node2TallNode::children, Node2TallNode::tallNode
		var tallNode_children : Set(TallNode) := node2tallNode.children?.tallNode->asSet();
		observe Node2TallNode::children, Node2TallNode::tallNode, TallNode::height
		var tallNode_height : Integer := if node2tallNode.children->notEmpty() then node2tallNode.children.tallNode.height->max() + 1 else 0 endif;
		new:talltree tallNode : TallNode;
		notify set node2tallNode.tallNode := tallNode;
		set	tallNode.name := tallNode_name;
		set	tallNode.children := tallNode_children;
		notify set tallNode.height := tallNode_height;
	}
}
