Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def treeFile = new File('tree.txt')
- class Node{
- String name;
- Node parent;
- def children= [];
- String toString(){name}
- }
- // TODO: everythin else
- def keep = false;
- def lines = []
- //preprocess
- treeFile.eachLine { line ->
- if ( line.contains("maven-dependency-plugin")){
- keep = true
- return
- }
- if (keep){
- if (line.contains('-' * 10)){
- keep = false
- return
- }
- //preprocess
- def l = line.replace('[INFO] ','')
- //println(l)
- lines += l
- }
- }
- def level_wave = []
- def root = new Node()
- //parse as a tree
- lines.each { line ->
- // every entry stars with one of these, pos gives us: depth*3 -1, root: special case
- def pos = line.indexOf('+-')
- if ( pos < 0){
- pos = line.indexOf('\\-')
- }
- println "$pos $line"
- if ( pos == -1){
- root = new Node(name: line)
- level_wave[0] = root // level 0
- } else {
- def parent = level_wave[ (int)(pos/3) ]
- def name = line.drop(pos+2).replace('(','').replace(')','') //extract artifact
- def elem = new Node(name:name , parent:parent)
- parent.children.add(elem)
- level_wave[ (int)(pos/3)+1 ] = elem
- }
- }
- print_node(root,0)
- // versioning is done bottom up, find the nodes on the deepest levels
- def max_depth = level_wave.size()
- println max_depth
- // list the elements on a given depth
- (max_depth..0).each{ depth ->
- def elems = []
- def fn = { node,d ->
- if ( d == depth){ elems+= node}
- }
- visit(root,1,fn)
- println "Level $depth:"
- elems.each {println it}
- }
- // preorder traversal
- def visit(node,depth,fn){
- if ( node == null) return;
- fn(node,depth)
- node.children.each{ c -> visit(c,depth+1,fn) }
- }
- def print_node(Node n,int depth){
- if ( n == null) return;
- print " " * depth * 2
- println n.name
- n.children.each{ c -> print_node(c,depth+1) }
- }
- System.exit(0)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement