001 package org.nanocontainer.script.groovy; 002 003 import java.util.Map; 004 import java.util.Set; 005 import org.nanocontainer.script.NanoContainerMarkupException; 006 007 /** 008 * In a groovy node builder environment, there is often one class per 009 * node that is possible in a builder. This interface provides the necessary 010 * validation and interaction methods for the mediator (The GroovyNodeBuilder 011 * object) to figure out who should handle what. 012 * @author Michael Rimov 013 * @version 1.0 014 */ 015 public interface BuilderNode { 016 017 /** 018 * Retrieve the name of the node. Examples could be 'container' or 'component'. 019 * @return String 020 */ 021 String getNodeName(); 022 023 /** 024 * Retrieve a map of supported attribute names. 025 * <p><strong>note:</strong>Supported attributes are currently unverified by the 026 * GroovyNodeBuilder as this would result in a change of behavior.</p> 027 * @return Set of Strings. 028 */ 029 Set getSupportedAttributes(); 030 031 032 /** 033 * Validates a given map of attributes as supplied by the GroovyNodeBuilder 034 * against the node's supported attributes. 035 * @param specifiedAttributes Map 036 * @throws NanoContainerMarkupException 037 */ 038 void validateScriptedAttributes(Map specifiedAttributes) throws NanoContainerMarkupException; 039 040 /** 041 * Execute the handler for the given node builder. 042 * @param current the current object. May be null 043 * for no parent container. 044 * @param attributes Map attributes specified in the groovy script 045 * for the builder node. 046 * in for consistency with the Groovy Builder API. Normally set to null. 047 * @return Object 048 * @throws NanoContainerMarkupException upon Nanocontainer error. 049 */ 050 Object createNewNode(Object current, Map attributes) throws NanoContainerMarkupException; 051 }