001    /*****************************************************************************
002     * Copyright (C) NanoContainer Organization. All rights reserved.            *
003     * ------------------------------------------------------------------------- *
004     * The software in this package is published under the terms of the BSD      *
005     * style license a copy of which has been included with this distribution in *
006     * the LICENSE.txt file.                                                     *
007     *                                                                           *
008     * Original code by Paul Hammant and Aslak Hellesøy                   *
009     *****************************************************************************/
010    
011    package org.nanocontainer.script;
012    
013    import org.picocontainer.MutablePicoContainer;
014    import org.picocontainer.defaults.ComponentAdapterFactory;
015    
016    import java.util.Map;
017    
018    /**
019     * Implementors of this class can be passed to {@link org.nanocontainer.script.groovy.OldGroovyNodeBuilder}'s constructor
020     * to dynamically extend the core builder syntax.
021     *
022     * Note: Although this interface is currently only used by the Groovy {@link org.nanocontainer.script.groovy.OldGroovyNodeBuilder}
023     * class, there is nothing groovy going on here - nor in the AOP subclass {@link org.nanocontainer.aop.defaults.AopNodeBuilderDecorationDelegate}
024     * class. In other words, it should be easy to add AOP capabilities to the other scripting engines such as the XML ones.
025     *
026     * @author Paul Hammant
027     * @author Aslak Hellesøy
028     * @version $Revision: 2863 $
029     */
030    public interface NodeBuilderDecorationDelegate {
031    
032        ComponentAdapterFactory decorate(ComponentAdapterFactory componentAdapterFactory, Map attributes);
033    
034        MutablePicoContainer decorate(MutablePicoContainer picoContainer);
035    
036        Object createNode(Object name, Map attributes, Object parentElement);
037    
038        void rememberComponentKey(Map attributes);
039    }