X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fsal%2Fyang-prototype%2Fyang%2Fyang-model-util%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fyang%2Fmodel%2Futil%2FDataNodeIterator.java;h=d55f84923c4fd6dae5cf8bf58b08c18ba9f433f0;hb=a9e6627736e99183c5c6be4dd42ec364836acb80;hp=ded4a75179113327683a084bf15425b7b3f91d8d;hpb=f9de1cd89c17888a2bd02486d5f7519f0b391bba;p=controller.git diff --git a/opendaylight/sal/yang-prototype/yang/yang-model-util/src/main/java/org/opendaylight/controller/yang/model/util/DataNodeIterator.java b/opendaylight/sal/yang-prototype/yang/yang-model-util/src/main/java/org/opendaylight/controller/yang/model/util/DataNodeIterator.java index ded4a75179..d55f84923c 100644 --- a/opendaylight/sal/yang-prototype/yang/yang-model-util/src/main/java/org/opendaylight/controller/yang/model/util/DataNodeIterator.java +++ b/opendaylight/sal/yang-prototype/yang/yang-model-util/src/main/java/org/opendaylight/controller/yang/model/util/DataNodeIterator.java @@ -1,3 +1,10 @@ +/* + * 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.controller.yang.model.util; import java.util.ArrayList; @@ -5,62 +12,53 @@ import java.util.Iterator; import java.util.List; import java.util.Set; -import org.opendaylight.controller.yang.model.api.ContainerSchemaNode; -import org.opendaylight.controller.yang.model.api.DataNodeContainer; -import org.opendaylight.controller.yang.model.api.DataSchemaNode; -import org.opendaylight.controller.yang.model.api.LeafListSchemaNode; -import org.opendaylight.controller.yang.model.api.LeafSchemaNode; -import org.opendaylight.controller.yang.model.api.ListSchemaNode; +import org.opendaylight.controller.yang.model.api.*; public class DataNodeIterator implements Iterator { - + private final DataNodeContainer container; private final List allLists; private final List allContainers; - private final List allLeafs; - private final List allLeafLists; + private final List allChoices; private final List allChilds; - + public DataNodeIterator(final DataNodeContainer container) { if (container == null) { - throw new IllegalArgumentException("Data Node Container MUST be specified!"); + throw new IllegalArgumentException("Data Node Container MUST be specified and cannot be NULL!"); } - - this.allContainers = new ArrayList(); - this.allLists = new ArrayList(); - this.allLeafs = new ArrayList(); - this.allLeafLists = new ArrayList(); - this.allChilds = new ArrayList(); - + + this.allContainers = new ArrayList<>(); + this.allLists = new ArrayList<>(); + this.allChilds = new ArrayList<>(); + this.allChoices = new ArrayList<>(); + this.container = container; - traverse(this.container); } - + public List allContainers() { return allContainers; } - + public List allLists() { return allLists; } - - public List allLeafs() { - return allLeafs; - } - - public List allLeafLists() { - return allLeafLists; + + public List allChoices() { + return allChoices; } - + private void traverse(final DataNodeContainer dataNode) { - if (!containChildDataNodeContainer(dataNode)) { + if (dataNode == null) { return; } - final Set childs = dataNode.getChildNodes(); - if (childs != null) { - for (DataSchemaNode childNode : childs) { + final Set childNodes = dataNode.getChildNodes(); + if (childNodes != null) { + for (DataSchemaNode childNode : childNodes) { + if (childNode.isAugmenting()) { + continue; + } allChilds.add(childNode); if (childNode instanceof ContainerSchemaNode) { final ContainerSchemaNode container = (ContainerSchemaNode) childNode; @@ -70,49 +68,34 @@ public class DataNodeIterator implements Iterator { final ListSchemaNode list = (ListSchemaNode) childNode; allLists.add(list); traverse(list); - } else if (childNode instanceof LeafSchemaNode) { - final LeafSchemaNode leaf = (LeafSchemaNode) childNode; - allLeafs.add(leaf); - } else if (childNode instanceof LeafListSchemaNode) { - final LeafListSchemaNode leafList = (LeafListSchemaNode) childNode; - allLeafLists.add(leafList); + } else if (childNode instanceof ChoiceNode) { + final ChoiceNode choiceNode = (ChoiceNode) childNode; + allChoices.add(choiceNode); + final Set cases = choiceNode.getCases(); + if (cases != null) { + for (final ChoiceCaseNode caseNode : cases) { + traverse(caseNode); + } + } } } } - } - /** - * Returns true if and only if the child node contain at least - * one child container schema node or child list schema node, otherwise will - * always returns false - * - * @param container - * @return true if and only if the child node contain at least - * one child container schema node or child list schema node, - * otherwise will always returns false - */ - private boolean containChildDataNodeContainer( - final DataNodeContainer container) { - if (container != null) { - final Set childs = container.getChildNodes(); - if ((childs != null) && (childs.size() > 0)) { - for (final DataSchemaNode childNode : childs) { - if (childNode instanceof DataNodeContainer) { - return true; - } - } + final Set groupings = dataNode.getGroupings(); + if (groupings != null) { + for (GroupingDefinition grouping : groupings) { + traverse(grouping); } } - return false; } - + @Override public boolean hasNext() { if (container.getChildNodes() != null) { - Set childs = container.getChildNodes(); - - if ((childs != null) && !childs.isEmpty()) { - return childs.iterator().hasNext(); + final Set childNodes = container.getChildNodes(); + + if ((childNodes != null) && !childNodes.isEmpty()) { + return childNodes.iterator().hasNext(); } } return false;