2011-09-26 3 views
1

Comment puis-je construire le schéma ci-dessus en utilisant le soutien constructeur groovysupport Builder Groovy

emp = empFileFactory.root() 
{ 
    emp(id: '3', value: '1') 

    emp(id:'24') 
    { 
    emp(id: '1', value: '2') 
    emp(id: '6', value: '7') 
    emp(id: '7', value: '1') 
    } 

    emp(id: '25') 
    { 
    emp(id: '1', value: '1') 
    emp(id: '6', value: '7') 
    } 

} 

je suis en train de construire la strucutre ci-dessus groovy quelqu'un peut expliquer comment pourrais-je acieve cette

Répondre

4

Vous pouvez faire quelque chose comme ça (cela n'a pas la gestion des erreurs, et juste renvoie null pour les méthodes que je ne pense pas être appelé):

// First define our class to hold our created 'Emp' objects 
@groovy.transform.Canonical 
class Emp { 
    String id 
    String value 
    List<Emp> children = [] 
} 

class EmpBuilder extends BuilderSupport{ 
    def children = [] 
    protected void setParent(Object parent, Object child){ 
    parent.children << child 
    } 
    protected Object createNode(Object name){ 
    if(name == 'root') { 
     this 
    } 
    else { 
     null 
    } 
    } 
    protected Object createNode(Object name, Object value){ 
    null 
    } 
    protected Object createNode(Object name, Map attributes){ 
    if(name == 'emp') { 
     new Emp(attributes) 
    } 
    else { 
     null 
    } 
    } 
    protected Object createNode(Object name, Map attributes, Object value){ 
    null 
    } 
    protected void nodeCompleted(Object parent, Object node) { 
    } 
    Iterator iterator() { children.iterator() } 
} 

Ensuite, si nous appelons cela avec votre nécessaire code constructeur comme ceci:

b = new EmpBuilder().root() { 
    emp(id: '3', value: '1') 

    emp(id:'24') { 
    emp(id: '1', value: '2') 
    emp(id: '6', value: '7') 
    emp(id: '7', value: '1') 
    } 

    emp(id: '25') { 
    emp(id: '1', value: '1') 
    emp(id: '6', value: '7') 
    } 
} 

Nous pouvons imprimer le 'arbre' comme si

b.each { println it } 

et s ee nous obtenons la structure que nous avons demandé:

Emp(3, 1, []) 
Emp(24, null, [Emp(1, 2, []), Emp(6, 7, []), Emp(7, 1, [])]) 
Emp(25, null, [Emp(1, 1, []), Emp(6, 7, [])]) 
+0

pour l'impression de l'arbre dois-je émettre db.each {println it} – anish

+0

yup ... J'ai oublié de coller ce bit à la réponse: -/ –

+0

quand le code devrait venir à else if (nom == 'root') { this } – anish

0

Vous voulez mettre en œuvre étendre la classe BuilderSupport, ce qui est assez facile à faire. Il y a a pretty nice tutorial here.

Vous devez mettre en œuvre quelques méthodes, mais la dénomination devrait être assez explicite:

  • createNode crée un nœud (chaque nœud a un attributs nom et en option et/ou une valeur)
  • setParent attribue un nœud à un autre nœud parent

C'est à peu près tout.

+0

Comment puis-je mettre parent ici – anish