Advertisement
Guest User

Untitled

a guest
Jan 16th, 2017
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. def treeFile = new File('tree.txt')
  2.  
  3. class Node{
  4. String name;
  5. Node parent;
  6. def children= [];
  7.  
  8. String toString(){name}
  9. }
  10.  
  11. // TODO: everythin else
  12.  
  13. def keep = false;
  14. def lines = []
  15. //preprocess
  16. treeFile.eachLine { line ->
  17. if ( line.contains("maven-dependency-plugin")){
  18. keep = true
  19. return
  20. }
  21. if (keep){
  22. if (line.contains('-' * 10)){
  23. keep = false
  24. return
  25. }
  26. //preprocess
  27. def l = line.replace('[INFO] ','')
  28. //println(l)
  29. lines += l
  30. }
  31. }
  32.  
  33. def level_wave = []
  34. def root = new Node()
  35. //parse as a tree
  36. lines.each { line ->
  37. // every entry stars with one of these, pos gives us: depth*3 -1, root: special case
  38. def pos = line.indexOf('+-')
  39. if ( pos < 0){
  40. pos = line.indexOf('\\-')
  41. }
  42. println "$pos $line"
  43. if ( pos == -1){
  44. root = new Node(name: line)
  45. level_wave[0] = root // level 0
  46. } else {
  47. def parent = level_wave[ (int)(pos/3) ]
  48. def name = line.drop(pos+2).replace('(','').replace(')','') //extract artifact
  49. def elem = new Node(name:name , parent:parent)
  50. parent.children.add(elem)
  51. level_wave[ (int)(pos/3)+1 ] = elem
  52. }
  53. }
  54. print_node(root,0)
  55.  
  56.  
  57. // versioning is done bottom up, find the nodes on the deepest levels
  58. def max_depth = level_wave.size()
  59. println max_depth
  60. // list the elements on a given depth
  61. (max_depth..0).each{ depth ->
  62. def elems = []
  63. def fn = { node,d ->
  64. if ( d == depth){ elems+= node}
  65. }
  66. visit(root,1,fn)
  67. println "Level $depth:"
  68. elems.each {println it}
  69. }
  70.  
  71. // preorder traversal
  72. def visit(node,depth,fn){
  73. if ( node == null) return;
  74. fn(node,depth)
  75. node.children.each{ c -> visit(c,depth+1,fn) }
  76. }
  77.  
  78. def print_node(Node n,int depth){
  79. if ( n == null) return;
  80. print " " * depth * 2
  81. println n.name
  82. n.children.each{ c -> print_node(c,depth+1) }
  83. }
  84.  
  85.  
  86. System.exit(0)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement