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 }