2 * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.yang.data.impl.leafref;
10 import com.google.common.collect.ImmutableMap;
11 import java.io.IOException;
13 import org.opendaylight.yangtools.yang.common.QName;
14 import org.opendaylight.yangtools.yang.model.api.Module;
15 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
16 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
18 final public class LeafRefContext {
20 private final QName currentNodeQName;
21 private final SchemaPath currentNodePath;
22 private final SchemaContext schemaContext;
23 private final Module module;
25 private final LeafRefPath leafRefTargetPath;
26 private final LeafRefPath absoluteLeafRefTargetPath ;
27 private final String leafRefTargetPathString;
29 private final boolean isReferencedBy;
30 private final boolean isReferencing;
32 private final Map<QName, LeafRefContext> referencingChilds;
33 private final Map<QName, LeafRefContext> referencedByChilds;
34 private final Map<QName, LeafRefContext> referencedByLeafRefCtx;
36 LeafRefContext(final LeafRefContextBuilder leafRefContextBuilder) {
37 this.currentNodeQName = leafRefContextBuilder.getCurrentNodeQName();
38 this.currentNodePath = leafRefContextBuilder.getCurrentNodePath();
39 this.schemaContext = leafRefContextBuilder.getSchemaContext();
40 this.leafRefTargetPath = leafRefContextBuilder.getLeafRefTargetPath();
41 this.absoluteLeafRefTargetPath = leafRefContextBuilder
42 .getAbsoluteLeafRefTargetPath();
43 this.leafRefTargetPathString = leafRefContextBuilder
44 .getLeafRefTargetPathString();
45 this.isReferencedBy = leafRefContextBuilder.isReferencedBy();
46 this.isReferencing = leafRefContextBuilder.isReferencing();
47 this.referencingChilds = ImmutableMap.copyOf(leafRefContextBuilder.getReferencingChilds());
48 this.referencedByChilds = ImmutableMap.copyOf(leafRefContextBuilder.getReferencedByChilds());
49 this.referencedByLeafRefCtx = ImmutableMap.copyOf(leafRefContextBuilder
50 .getAllReferencedByLeafRefCtxs());
51 this.module = leafRefContextBuilder.getLeafRefContextModule();
54 public static final LeafRefContext create(final SchemaContext ctx) {
56 return new LeafRefContextTreeBuilder(ctx).buildLeafRefContextTree();
57 } catch (IOException | LeafRefYangSyntaxErrorException e) {
58 throw new RuntimeException(e);
62 public boolean hasLeafRefContextChild() {
63 return hasReferencedChild() || hasReferencingChild();
66 public boolean hasReferencedChild() {
67 return !referencedByChilds.isEmpty();
70 public boolean hasReferencingChild() {
71 return !referencingChilds.isEmpty();
74 public boolean isReferenced() {
75 return isReferencedBy;
78 public boolean isReferencing() {
82 public LeafRefContext getReferencingChildByName(final QName name) {
83 return referencingChilds.get(name);
86 public Map<QName, LeafRefContext> getReferencingChilds() {
87 return referencingChilds;
90 public LeafRefContext getReferencedChildByName(final QName name) {
91 return referencedByChilds.get(name);
94 public Map<QName, LeafRefContext> getReferencedByChilds() {
95 return referencedByChilds;
98 public SchemaPath getCurrentNodePath() {
99 return currentNodePath;
102 public LeafRefPath getLeafRefTargetPath() {
103 return leafRefTargetPath;
106 public String getLeafRefTargetPathString() {
107 return leafRefTargetPathString;
110 public QName getNodeName() {
111 return currentNodeQName;
114 SchemaContext getSchemaContext() {
115 return schemaContext;
118 public LeafRefPath getAbsoluteLeafRefTargetPath() {
119 return absoluteLeafRefTargetPath;
122 public Module getLeafRefContextModule() {
126 public LeafRefContext getReferencedByLeafRefCtxByName(final QName qname) {
127 return referencedByLeafRefCtx.get(qname);
130 public Map<QName, LeafRefContext> getAllReferencedByLeafRefCtxs() {
131 return referencedByLeafRefCtx;