001 package org.nanocontainer.webcontainer.groovy.adapters;
002
003 import org.nanocontainer.webcontainer.PicoContext;
004 import org.nanocontainer.NanoContainer;
005 import org.nanocontainer.DefaultNanoContainer;
006 import org.picocontainer.MutablePicoContainer;
007 import org.picocontainer.PicoContainer;
008
009 import java.util.Map;
010
011 import groovy.util.NodeBuilder;
012
013 public class NodeBuilderAdapter {
014
015 private final String nodeBuilderClassName;
016 private final PicoContext context;
017 private final MutablePicoContainer parentContainer;
018 private final Map attributes;
019
020 public NodeBuilderAdapter(String nodeBuilderClassName, PicoContext context, MutablePicoContainer parentContainer, Map attributes) {
021 this.nodeBuilderClassName = nodeBuilderClassName;
022 this.context = context;
023 this.parentContainer = parentContainer;
024 this.attributes = attributes;
025 }
026
027 public NodeBuilder getNodeBuilder() {
028 NanoContainer factory = new DefaultNanoContainer();
029 factory.getPico().registerComponentInstance(PicoContext.class, context);
030 factory.getPico().registerComponentInstance(PicoContainer.class, parentContainer);
031 factory.getPico().registerComponentInstance(Map.class, attributes);
032 try {
033 factory.registerComponentImplementation("nodeBuilder", nodeBuilderClassName);
034 return (NodeBuilder) factory.getPico().getComponentInstance("nodeBuilder");
035 } catch (ClassNotFoundException e) {
036 throw new org.nanocontainer.script.BuilderClassNotFoundException(nodeBuilderClassName + " class name not found", e);
037 }
038 }
039
040 }