1 10 11 package org.nanocontainer.script.groovy.buildernodes; 12 13 import java.util.Map ; 14 15 import org.nanocontainer.NanoContainer; 16 import org.nanocontainer.script.NanoContainerMarkupException; 17 import groovy.lang.GroovyObject; 18 import org.nanocontainer.DefaultNanoContainer; 19 import org.picocontainer.MutablePicoContainer; 20 21 30 public class NewBuilderNode extends AbstractBuilderNode { 31 32 35 public static final String NODE_NAME = "newBuilder"; 36 37 40 public static final String CLASS_ATTRIBUTE = "class"; 41 42 49 public static final String VALIDATE_ATTRIBUTE = "validating"; 50 51 52 public NewBuilderNode() { 53 super(NODE_NAME); 54 55 addAttribute(CLASS_ATTRIBUTE); 56 addAttribute(VALIDATE_ATTRIBUTE); 57 } 58 59 public Object createNewNode(final Object current, final Map attributes) { 60 Object builderClass = attributes.remove(CLASS_ATTRIBUTE); 61 62 63 NanoContainer factory = new DefaultNanoContainer(); 64 MutablePicoContainer parentPico = ((NanoContainer) current).getPico(); 65 factory.getPico().registerComponentInstance(MutablePicoContainer.class, parentPico); 66 try { 67 if (builderClass instanceof String ) { 68 factory.registerComponentImplementation(GroovyObject.class, (String ) builderClass); 69 } else { 70 factory.getPico().registerComponentImplementation(GroovyObject.class, (Class ) builderClass); 71 } 72 } catch (ClassNotFoundException e) { 73 throw new NanoContainerMarkupException("ClassNotFoundException " + builderClass); 74 } 75 Object componentInstance = factory.getPico().getComponentInstance(GroovyObject.class); 76 return componentInstance; 77 } 78 79 } 80 | Popular Tags |