import grails.converters.JSON class JitController { def index = { } def hypertree = { } def spacetree = { injectSpacetreeData(data) [data: data] } def injectSpacetreeData(elm) { elm.data = [:] elm.children?.each { injectSpacetreeData(it) } } def hypertreeData = { render data as JSON } def rgraph = { } def treemap = { injectTreemapData(data) [data: data] } def injectTreemapData(elm) { int maxArea = 100 def rnd = new Random() elm.data = ['$area': rnd.nextInt(maxArea), '$color': rnd.nextInt(100)] elm.children?.each { injectTreemapData(it) } } def data = [id: 'Groovy', name: 'Groovy', children: [ [id: 'Language', name: 'Language', children: [ [id: 'Literals', name: 'Literals', children: [ [id: 'Strings / RegEx', name: 'Strings / RegEx', children: []], [id: 'Lists / Maps / Ranges', name: 'Lists / Maps / Ranges', children: []], [id: 'Closures', name: 'Closures', children: []] ]], [id: 'Every is an object', name: 'Every is an object', children: [ [id: 'Object operators', name: 'Object operators', children: []], [id: 'Multimethods', name: 'Multimethods', children: []], [id: 'GroovyBeans', name: 'GroovyBeans', children: []] ]], [id: 'Meta Object Protocol', name: 'Meta Object Protocol', children: [ [id: 'Method interception', name: 'Method interception', children: []], [id: 'Category use (Mixin)', name: 'Category use (Mixin)', children: []], [id: 'Dynamic methods and properties', name: 'Dynamic methods and properties', children: []] ]], [id: 'Control Flow', name: 'Control Flow', children: [ [id: 'Groovy Truth', name: 'Groovy Truth', children: []], [id: 'Switch', name: 'Switch', children: []], [id: 'Advanced operators', name: 'Advanced operators', children: []], [id: 'GPath', name: 'GPath', children: []], [id: 'Iterations', name: 'Iterations', children: []] ]], [id: 'Execution', name: 'Execution', children: [ [id: 'Scriptablility', name: 'Scriptablility', children: []], [id: 'Hot class reloading', name: 'Hot class reloading', children: []] ]] ]], [id: 'Library', name: 'Library', children: [ [id: 'SQL', name: 'SQL', children: []], [id: 'XML', name: 'XML', children: []], [id: 'Swing', name: 'Swing', children: []], [id: 'Ant', name: 'Ant', children: []], [id: 'Templates', name: 'Templates', children: []], [id: 'Groovlets', name: 'Groovlets', children: []], [id: 'Stubs and Mocks', name: 'Stubs and Mocks', children: []] ]], [id: 'GDK', name: 'GDK', children: [ [id: 'Object Inspection', name: 'Object Inspection', children: []], [id: 'Groovy-aware methods', name: 'Groovy-aware methods', children: [ [id: 'Strings', name: 'Strings', children: []], [id: 'Lists', name: 'Lists', children: []], [id: 'Maps', name: 'Maps', children: []] ]], [id: 'Files and I/O', name: 'Files and I/O', children: []], [id: 'Threads and Processes', name: 'Threads and Processes', children: []] ] ] ] ] }