-/**
+/*
* Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
import java.util.Iterator;
import java.util.LinkedList;
import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
+import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.model.api.SchemaPath;
-public class LeafRefUtils {
+public final class LeafRefUtils {
+ private LeafRefUtils() {
+ // Hidden on purpose
+ }
/**
- * @param leafRefPath
- * @param contextNodeSchemaPath
- * @return
+ * Create an absolute leafref path.
+ *
+ * @param leafRefPath leafRefPath
+ * @param contextNodeSchemaPath contextNodeSchemaPath
+ * @param module module
+ * @return LeafRefPath object
*/
public static LeafRefPath createAbsoluteLeafRefPath(
final LeafRefPath leafRefPath, final SchemaPath contextNodeSchemaPath,
final Module module) {
-
if (leafRefPath.isAbsolute()) {
return leafRefPath;
}
final Deque<QNameWithPredicate> absoluteLeafRefTargetPathList = schemaPathToXPathQNames(
contextNodeSchemaPath, module);
-
- final Iterable<QNameWithPredicate> leafRefTargetPathFromRoot = leafRefPath
- .getPathFromRoot();
- final Iterator<QNameWithPredicate> leafRefTgtPathFromRootIterator = leafRefTargetPathFromRoot
- .iterator();
+ final Iterator<QNameWithPredicate> leafRefTgtPathFromRootIterator = leafRefPath.getPathFromRoot().iterator();
while (leafRefTgtPathFromRootIterator.hasNext()) {
final QNameWithPredicate qname = leafRefTgtPathFromRootIterator.next();
return LeafRefPath.create(absoluteLeafRefTargetPathList, true);
}
- /**
- * @param currentNodePath
- * @param module
- * @param absoluteLeafRefTargetPathList
- */
- private static Deque<QNameWithPredicate> schemaPathToXPathQNames(
- final SchemaPath nodePath, final Module module) {
-
+ private static Deque<QNameWithPredicate> schemaPathToXPathQNames(final SchemaPath nodePath, final Module module) {
final Deque<QNameWithPredicate> xpath = new LinkedList<>();
-
- final Iterator<QName> nodePathIterator = nodePath.getPathFromRoot()
- .iterator();
+ final Iterator<QName> nodePathIterator = nodePath.getPathFromRoot().iterator();
DataNodeContainer currenDataNodeContainer = module;
while (nodePathIterator.hasNext()) {
final QName qname = nodePathIterator.next();
- final DataSchemaNode child = currenDataNodeContainer
- .getDataChildByName(qname);
+ final DataSchemaNode child = currenDataNodeContainer.dataChildByName(qname);
if (child instanceof DataNodeContainer) {
- if (!(child instanceof ChoiceCaseNode)) {
- final QNameWithPredicate newQName = new QNameWithPredicateBuilder(
- qname.getModule(), qname.getLocalName()).build();
- xpath.add(newQName);
+ if (!(child instanceof CaseSchemaNode)) {
+ xpath.add(new SimpleQNameWithPredicate(qname));
}
currenDataNodeContainer = (DataNodeContainer) child;
} else if (child instanceof ChoiceSchemaNode) {
if (nodePathIterator.hasNext()) {
- currenDataNodeContainer = ((ChoiceSchemaNode) child)
- .getCaseNodeByName(nodePathIterator.next());
+ currenDataNodeContainer = ((ChoiceSchemaNode) child).findCase(nodePathIterator.next()).orElse(null);
} else {
break;
}
- } else if (child instanceof LeafSchemaNode
- || child instanceof LeafListSchemaNode) {
-
- final QNameWithPredicate newQName = new QNameWithPredicateBuilder(
- qname.getModule(), qname.getLocalName()).build();
- xpath.add(newQName);
+ } else if (child instanceof LeafSchemaNode || child instanceof LeafListSchemaNode) {
+ xpath.add(new SimpleQNameWithPredicate(qname));
break;
-
} else if (child == null) {
- throw new IllegalArgumentException("No child " + qname
- + " found in node container " + currenDataNodeContainer
- + " in module " + module.getName());
+ throw new IllegalArgumentException("No child " + qname + " found in node container "
+ + currenDataNodeContainer + " in module " + module.getName());
} else {
- throw new IllegalStateException(
- "Illegal schema node type in the path: "
- + child.getClass());
+ throw new IllegalStateException("Illegal schema node type in the path: " + child.getClass());
}
}
return xpath;
}
- public static LeafRefPath schemaPathToLeafRefPath(final SchemaPath nodePath,
- final Module module) {
- final Deque<QNameWithPredicate> xpathQNames = schemaPathToXPathQNames(
- nodePath, module);
- return LeafRefPath.create(xpathQNames, true);
+ public static LeafRefPath schemaPathToLeafRefPath(final SchemaPath nodePath, final Module module) {
+ return LeafRefPath.create(schemaPathToXPathQNames(nodePath, module), true);
}
-
}