    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&oslash;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&oslash;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    }