import java.util.Deque;
import java.util.Optional;
import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.odlext.model.api.YangModeledAnyXmlSchemaNode;
+import org.opendaylight.yangtools.odlext.model.api.YangModeledAnyxmlSchemaNode;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.data.impl.schema.SchemaUtils;
-import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.AnydataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
import org.opendaylight.yangtools.yang.model.api.AugmentationTarget;
import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus;
import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
@Beta
public final class SchemaTracker {
private static final Logger LOG = LoggerFactory.getLogger(SchemaTracker.class);
- private final Deque<Object> schemaStack = new ArrayDeque<>();
+ private final Deque<WithStatus> schemaStack = new ArrayDeque<>();
private final DataNodeContainer root;
private SchemaTracker(final DataNodeContainer root) {
this.root = requireNonNull(root);
}
- /**
- * Create a new writer with the specified context as its root.
- *
- * @param context Associated {@link SchemaContext}.
- * @return A new {@link NormalizedNodeStreamWriter}
- */
- // FIXME: 3.0.0: remove this method
- public static @NonNull SchemaTracker create(final SchemaContext context) {
- return new SchemaTracker(context);
- }
-
/**
* Create a new writer with the specified node as its root.
*
}
private static SchemaNode findChildInCases(final ChoiceSchemaNode parent, final QName qname) {
- DataSchemaNode schema = null;
for (final CaseSchemaNode caze : parent.getCases().values()) {
- final DataSchemaNode potential = caze.getDataChildByName(qname);
- if (potential != null) {
- schema = potential;
- break;
+ final Optional<DataSchemaNode> potential = caze.findDataChildByName(qname);
+ if (potential.isPresent()) {
+ return potential.get();
}
}
- return schema;
+ return null;
}
private static SchemaNode findCaseByChild(final ChoiceSchemaNode parent, final QName qname) {
- DataSchemaNode schema = null;
for (final CaseSchemaNode caze : parent.getCases().values()) {
- final DataSchemaNode potential = caze.getDataChildByName(qname);
- if (potential != null) {
- schema = caze;
- break;
+ final Optional<DataSchemaNode> potential = caze.findDataChildByName(qname);
+ if (potential.isPresent()) {
+ return caze;
}
}
- return schema;
+ return null;
}
public void startList(final PathArgument name) {
public void startListItem(final PathArgument name) throws IOException {
final Object schema = getParent();
checkArgument(schema instanceof ListSchemaNode, "List item is not appropriate");
- schemaStack.push(schema);
+ schemaStack.push((ListSchemaNode) schema);
}
public LeafSchemaNode leafNode(final NodeIdentifier name) throws IOException {
return (LeafSchemaNode) schema;
}
+ public void startLeafNode(final NodeIdentifier name) throws IOException {
+ schemaStack.push(leafNode(name));
+ }
+
public LeafListSchemaNode startLeafSet(final NodeIdentifier name) {
final SchemaNode schema = getSchema(name);
return (LeafListSchemaNode) child;
}
+ public void startLeafSetEntryNode(final NodeWithValue<?> name) {
+ schemaStack.push(leafSetEntryNode(name.getNodeType()));
+ }
+
public ChoiceSchemaNode startChoiceNode(final NodeIdentifier name) {
LOG.debug("Enter choice {}", name);
final SchemaNode schema = getSchema(name);
LOG.debug("Enter yang modeled anyXml {}", name);
final SchemaNode schema = getSchema(name);
- checkArgument(schema instanceof YangModeledAnyXmlSchemaNode, "Node %s is not an yang modeled anyXml.",
+ checkArgument(schema instanceof YangModeledAnyxmlSchemaNode, "Node %s is not an yang modeled anyXml.",
schema.getPath());
- schemaStack.push(((YangModeledAnyXmlSchemaNode) schema).getSchemaOfAnyXmlData());
+ schemaStack.push(((YangModeledAnyxmlSchemaNode) schema).getSchemaOfAnyXmlData());
return schema;
}
return resolvedSchema;
}
- public AnyXmlSchemaNode anyxmlNode(final NodeIdentifier name) {
+ public AnyxmlSchemaNode anyxmlNode(final NodeIdentifier name) {
+ final SchemaNode schema = getSchema(name);
+ checkArgument(schema instanceof AnyxmlSchemaNode, "Node %s is not anyxml", schema.getPath());
+ return (AnyxmlSchemaNode)schema;
+ }
+
+ public void startAnyxmlNode(final NodeIdentifier name) {
+ schemaStack.push(anyxmlNode(name));
+ }
+
+ public AnydataSchemaNode anydataNode(final NodeIdentifier name) {
final SchemaNode schema = getSchema(name);
- checkArgument(schema instanceof AnyXmlSchemaNode, "Node %s is not anyxml", schema.getPath());
- return (AnyXmlSchemaNode)schema;
+ checkArgument(schema instanceof AnydataSchemaNode, "Node %s is not anydata", schema.getPath());
+ return (AnydataSchemaNode)schema;
+ }
+
+ public void startAnydataNode(final NodeIdentifier name) {
+ schemaStack.push(anydataNode(name));
}
public Object endNode() {