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 }