X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fmd-sal%2Fsal-dom-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fdom%2Fbroker%2Futil%2FYangSchemaUtils.java;h=248a294aff38d1788b254ca5ff0be97680a1c699;hb=4ef15f7a7e3fb5bcaa6a3202d268a5c945e0aa71;hp=9a862d7a0c1b5cf33a3e63cca0805b9bc44be8dc;hpb=acb48de64c98d7a4cc2c523074b7f900357f61f0;p=controller.git diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/util/YangSchemaUtils.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/util/YangSchemaUtils.java index 9a862d7a0c..248a294aff 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/util/YangSchemaUtils.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/util/YangSchemaUtils.java @@ -1,16 +1,25 @@ +/* + * Copyright (c) 2014 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.sal.dom.broker.util; +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkState; +import com.google.common.collect.Lists; import java.util.Iterator; import java.util.List; import java.util.Set; - import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode; -import org.opendaylight.yangtools.yang.model.api.ChoiceNode; +import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode; import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; @@ -24,54 +33,35 @@ import org.opendaylight.yangtools.yang.model.api.Status; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.api.UsesNode; -import org.opendaylight.yangtools.yang.model.api.YangNode; - -import static com.google.common.base.Preconditions.*; - -import com.google.common.base.Function; -import com.google.common.collect.FluentIterable; - -public class YangSchemaUtils { - - private static final Function QNAME_FROM_PATH_ARGUMENT = new Function(){ - - @Override - public QName apply(PathArgument input) { - if(input == null) { - return null; - } - return input.getNodeType(); - } - }; - private YangSchemaUtils() { +public final class YangSchemaUtils { + private YangSchemaUtils() { throw new UnsupportedOperationException("Utility class."); } - - - public static DataSchemaNode getSchemaNode(SchemaContext schema,InstanceIdentifier path) { - checkArgument(schema != null,"YANG Schema must not be null."); - checkArgument(path != null,"Path must not be null."); - return getSchemaNode(schema, FluentIterable.from(path.getPath()).transform(QNAME_FROM_PATH_ARGUMENT)); + + public static DataSchemaNode getSchemaNode(final SchemaContext schema, final YangInstanceIdentifier path) { + checkArgument(schema != null, "YANG Schema must not be null."); + checkArgument(path != null, "Path must not be null."); + return getSchemaNode(schema, Lists.transform(path.getPathArguments(), PathArgument::getNodeType)); } - - public static DataSchemaNode getSchemaNode(SchemaContext schema,Iterable path) { - checkArgument(schema != null,"YANG Schema must not be null."); - checkArgument(path != null,"Path must not be null."); - if(!path.iterator().hasNext()){ + + public static DataSchemaNode getSchemaNode(final SchemaContext schema, final Iterable path) { + checkArgument(schema != null, "YANG Schema must not be null."); + checkArgument(path != null, "Path must not be null."); + if (!path.iterator().hasNext()) { return toRootDataNode(schema); } - + QName firstNode = path.iterator().next(); DataNodeContainer previous = schema.findModuleByNamespaceAndRevision(firstNode.getNamespace(), firstNode.getRevision()); Iterator iterator = path.iterator(); - + while (iterator.hasNext()) { - checkArgument(previous!= null, "Supplied path does not resolve into valid schema node."); + checkArgument(previous != null, "Supplied path does not resolve into valid schema node."); QName arg = iterator.next(); DataSchemaNode currentNode = previous.getDataChildByName(arg); - if (currentNode == null && previous instanceof DataNodeContainer) { + if (currentNode == null) { currentNode = searchInChoices(previous, arg); } if (currentNode instanceof DataNodeContainer) { @@ -80,17 +70,17 @@ public class YangSchemaUtils { checkArgument(!iterator.hasNext(), "Path nests inside leaf node, which is not allowed."); return currentNode; } - checkState(currentNode != null, "Current node should not be null for %s",path); + checkState(currentNode != null, "Current node should not be null for %s", path); } - checkState(previous instanceof DataSchemaNode, "Schema node for %s should be instance of DataSchemaNode. Found %s",path,previous); + checkState(previous instanceof DataSchemaNode, + "Schema node for %s should be instance of DataSchemaNode. Found %s", path, previous); return (DataSchemaNode) previous; } - private static DataSchemaNode searchInChoices(DataNodeContainer node, QName arg) { - Set children = node.getChildNodes(); - for (DataSchemaNode child : children) { - if (child instanceof ChoiceNode) { - ChoiceNode choiceNode = (ChoiceNode) child; + private static DataSchemaNode searchInChoices(final DataNodeContainer node, final QName arg) { + for (DataSchemaNode child : node.getChildNodes()) { + if (child instanceof ChoiceSchemaNode) { + ChoiceSchemaNode choiceNode = (ChoiceSchemaNode) child; DataSchemaNode potential = searchInCases(choiceNode, arg); if (potential != null) { return potential; @@ -100,7 +90,7 @@ public class YangSchemaUtils { return null; } - private static DataSchemaNode searchInCases(ChoiceNode choiceNode, QName arg) { + private static DataSchemaNode searchInCases(final ChoiceSchemaNode choiceNode, final QName arg) { Set cases = choiceNode.getCases(); for (ChoiceCaseNode caseNode : cases) { DataSchemaNode node = caseNode.getDataChildByName(arg); @@ -111,129 +101,118 @@ public class YangSchemaUtils { return null; } - private static ContainerSchemaNode toRootDataNode(SchemaContext schema) { + private static ContainerSchemaNode toRootDataNode(final SchemaContext schema) { return new NetconfDataRootNode(schema); } private static final class NetconfDataRootNode implements ContainerSchemaNode { - - public NetconfDataRootNode(SchemaContext schema) { + + NetconfDataRootNode(final SchemaContext schema) { // TODO Auto-generated constructor stub } - public YangNode getParent() { - // TODO Auto-generated method stub - return null; - } - @Override public Set> getTypeDefinitions() { // TODO Auto-generated method stub return null; } - + @Override public Set getChildNodes() { // TODO Auto-generated method stub return null; } - + @Override public Set getGroupings() { // TODO Auto-generated method stub return null; } - - @Override - public DataSchemaNode getDataChildByName(QName name) { - // TODO Auto-generated method stub - return null; - } - + @Override - public DataSchemaNode getDataChildByName(String name) { + public DataSchemaNode getDataChildByName(final QName name) { // TODO Auto-generated method stub return null; } - + @Override public Set getUses() { // TODO Auto-generated method stub return null; } - + @Override public Set getAvailableAugmentations() { // TODO Auto-generated method stub return null; } - + @Override public boolean isAugmenting() { // TODO Auto-generated method stub return false; } - + @Override public boolean isAddedByUses() { // TODO Auto-generated method stub return false; } - + @Override public boolean isConfiguration() { // TODO Auto-generated method stub return false; } - + @Override public ConstraintDefinition getConstraints() { // TODO Auto-generated method stub return null; } - + @Override public QName getQName() { // TODO Auto-generated method stub return null; } - + @Override public SchemaPath getPath() { // TODO Auto-generated method stub return null; } - + @Override public String getDescription() { // TODO Auto-generated method stub return null; } - + @Override public String getReference() { // TODO Auto-generated method stub return null; } - + @Override public Status getStatus() { // TODO Auto-generated method stub return null; } - + @Override public List getUnknownSchemaNodes() { // TODO Auto-generated method stub return null; } - + @Override public boolean isPresenceContainer() { // TODO Auto-generated method stub return false; } - + } }