/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
- *
+ * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.yangtools.yang.parser.builder.api;
+import java.util.Map;
import java.util.Set;
-
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
/**
- * Interface for all yang data-node containers [augment, case, container,
- * grouping, list, module, notification].
+ * Common builder for for all YANG {@link DataNodeContainer}
+ * <code>augment, case, container,
+ * grouping, list, module, notification</code>.
*/
public interface DataNodeContainerBuilder extends Builder {
/**
- * Get qname of this node.
- *
+ * Returns QName of this node.
+ *
* @return QName of this node
*/
QName getQName();
/**
- * Get schema path of this node.
- *
+ * Returns Schema path of this node.
+ *
* @return SchemaPath of this node
*/
SchemaPath getPath();
/**
- * Get already built child nodes.
- *
- * @return collection of child nodes
- */
- Set<DataSchemaNode> getChildNodes();
-
- /**
- * Get builders of child nodes.
- *
+ * Returns set of of child node builders.
+ *
+ * This child node builder are build, during invoking {@link #build()} and
+ * added as children to resulting {@link DataNodeContainer}.
+ *
* @return collection child nodes builders
*/
Set<DataSchemaNodeBuilder> getChildNodeBuilders();
/**
- * Get child node by name.
- *
+ * Retrieves child node builder by local name.
+ *
* @param name
* name of child to seek
* @return child node with given name if present, null otherwise
/**
* Add builder of child node to this node.
- *
+ *
* @param childNode
*/
void addChildNode(DataSchemaNodeBuilder childNode);
+ void addChildNode(DataSchemaNode childNode);
+
+ void addChildNodeToContext(DataSchemaNodeBuilder childNode);
+
/**
* Get already built groupings defined in this node.
- *
+ *
* @return collection of GroupingDefinition objects
*/
Set<GroupingDefinition> getGroupings();
/**
* Get builders of groupings defined in this node.
- *
+ *
* @return collection of grouping builders
*/
Set<GroupingBuilder> getGroupingBuilders();
/**
* Add builder of grouping statement to this node.
- *
+ *
* @param groupingBuilder
*/
void addGrouping(GroupingBuilder groupingBuilder);
/**
* Get builders of uses defined in this node.
- *
+ *
* @return collection of uses builders
*/
- Set<UsesNodeBuilder> getUsesNodes();
+ Set<UsesNodeBuilder> getUsesNodeBuilders();
/**
* Add builder of uses statement to this node.
- *
+ *
* @param usesBuilder
*/
void addUsesNode(UsesNodeBuilder usesBuilder);
/**
- * Get builders of typedef statement defined in this node.
- *
- * @return typedefBuilder
+ * Returns set of already built type definitions.
+ *
+ * @return set of already built type definitions.
+ */
+ Set<TypeDefinition<?>> getTypeDefinitions();
+
+ /**
+ * Returns builders of typedef statement defined in this node.
+ *
+ * @return builders of typedef statement defined in this node.
*/
Set<TypeDefinitionBuilder> getTypeDefinitionBuilders();
/**
* Add typedef builder to this node.
- *
- * @param typedefBuilder
+ *
+ * @param typedefBuilder Builder to add to this node.
*/
void addTypedef(TypeDefinitionBuilder typedefBuilder);
+ /**
+ * Returns an instance of product - DataNodeContainer
+ *
+ * Returns an instance of data node container with
+ * children and properties constructed as per this builder state,
+ * all nested builders are also built and their product is
+ * set to DataNodeContainer.
+ *
+ * @return Instance of DataNodeContainer
+ */
+ @Override
+ DataNodeContainer build();
+
+ Map<QName, DataSchemaNode> getChildNodes();
+
}