*/
package org.opendaylight.yangtools.yang.parser.builder.api;
-import org.opendaylight.yangtools.yang.common.QName;
+import java.util.Set;
+
import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
+import org.opendaylight.yangtools.yang.parser.builder.impl.UnknownSchemaNodeBuilder;
/**
* Interface for builders of 'grouping' statement.
/**
* Build GroupingDefinition object from this builder.
+ *
+ * @return Instance of {@link GroupingDefinition} described by this builder.
*/
+ @Override
GroupingDefinition build();
- void setQName(QName qname);
+ /**
+ *
+ * Returns instantiation of grouping child nodes under supplied builder.
+ *
+ * Supplied newParent is not modified.
+ *
+ * For each {@link #getChildNodeBuilders()} new builder is created,
+ * which has supplied new parent set as their {@link Builder#getParent()}
+ * and QNames have updated namespace and revision per supplied parent
+ * node.
+ *
+ * @param newParent Parent node, under which this grouping should be instantiated.
+ * @return Set of new builders representing instantiation of this grouping.
+ */
+ Set<DataSchemaNodeBuilder> instantiateChildNodes(Builder newParent);
+
+
+ /**
+ *
+ * Returns instantiation of grouping type definitions under supplied builder.
+ *
+ * Supplied newParent is not modified.
+ *
+ * For each {@link #getTypeDefinitionBuilders()} new builder is created,
+ * which has supplied new parent set as their {@link Builder#getParent()}
+ * and QNames have updated namespace and revision per supplied parent
+ * node.
+ *
+ * @param newParent Parent node, under which this grouping should be instantiated.
+ * @return Set of new builders representing instantiation of this grouping.
+ */
+ Set<TypeDefinitionBuilder> instantiateTypedefs(Builder newParent);
+
+ /**
+ *
+ * Returns instantiation of grouping definitions under supplied builder.
+ *
+ * Supplied newParent is not modified.
+ *
+ * For each {@link #getGroupingBuilders()} new builder is created,
+ * which has supplied new parent set as their {@link Builder#getParent()}
+ * and QNames have updated namespace and revision per supplied parent
+ * node.
+ *
+ * @param newParent Parent node, under which this grouping should be instantiated.
+ * @return Set of new builders representing instantiation of this grouping.
+ */
+ Set<GroupingBuilder> instantiateGroupings(Builder newParent);
+
+ /**
+ *
+ * Returns instantiation of unknown nodes under supplied builder.
+ *
+ * Supplied newParent is not modified.
+ *
+ * For each {@link #getUnknownNodes()} new builder is created,
+ * which has supplied new parent set as their {@link Builder#getParent()}
+ * and QNames have updated namespace and revision per supplied parent
+ * node.
+ *
+ * @param newParent Parent node, under which this grouping should be instantiated.
+ * @return Set of new builders representing instantiation of this grouping.
+ */
+ Set<UnknownSchemaNodeBuilder> instantiateUnknownNodes(Builder newParent);
}