69ad633f07cf1504c7b35feed1017f668c974bac
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / rfc6020 / effective / type / IdentityRefSpecificationEffectiveStatementImpl.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.type;
9
10 import java.util.Collections;
11 import java.util.List;
12 import org.opendaylight.yangtools.yang.common.QName;
13 import org.opendaylight.yangtools.yang.common.YangConstants;
14 import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
15 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
16 import org.opendaylight.yangtools.yang.model.api.Status;
17 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
18 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
19 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
20 import org.opendaylight.yangtools.yang.model.api.stmt.IdentityStatement;
21 import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement;
22 import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement.IdentityRefSpecification;
23 import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition;
24 import org.opendaylight.yangtools.yang.model.util.IdentityrefType;
25 import org.opendaylight.yangtools.yang.parser.spi.IdentityNamespace;
26 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
27 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.TypeUtils;
28 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
29 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.BaseEffectiveStatementImpl;
30 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveStatementBase;
31
32 public class IdentityRefSpecificationEffectiveStatementImpl extends
33         EffectiveStatementBase<String, IdentityRefSpecification> implements IdentityrefTypeDefinition,
34         TypeEffectiveStatement<IdentityRefSpecification> {
35
36     private static final QName QNAME = QName.create(YangConstants.RFC6020_YANG_MODULE, TypeUtils.IDENTITY_REF);
37
38     private static final String DESCRIPTION = "The identityref type is used to reference an existing identity.";
39     private static final String REFERENCE = "https://tools.ietf.org/html/rfc6020#section-9.10";
40
41     private static final String UNITS = "";
42
43     private final SchemaPath path;
44
45     private final IdentitySchemaNode identity;
46     private IdentityrefType identityRefTypeInstance = null;
47
48     public IdentityRefSpecificationEffectiveStatementImpl(
49             final StmtContext<String, IdentityRefSpecification, EffectiveStatement<String, IdentityRefSpecification>> ctx) {
50         super(ctx);
51
52         path = Utils.getSchemaPath(ctx.getParentContext()).createChild(QNAME);
53
54         final BaseEffectiveStatementImpl base = firstEffective(BaseEffectiveStatementImpl.class);
55         if (base != null) {
56             QName identityQName = base.argument();
57             StmtContext<?, IdentityStatement, EffectiveStatement<QName, IdentityStatement>> identityCtx = ctx.getFromNamespace(IdentityNamespace.class, identityQName);
58             identity = (IdentitySchemaNode) identityCtx.buildEffective();
59         } else {
60             identity = null;
61         }
62     }
63
64     @Override
65     public IdentitySchemaNode getIdentity() {
66         return identity;
67     }
68
69     @Override
70     public IdentityrefTypeDefinition getBaseType() {
71         return null;
72     }
73
74     @Override
75     public String getUnits() {
76         return UNITS;
77     }
78
79     @Override
80     public Object getDefaultValue() {
81         return identity;
82     }
83
84     @Override
85     public QName getQName() {
86         return QNAME;
87     }
88
89     @Override
90     public SchemaPath getPath() {
91         return path;
92     }
93
94     @Override
95     public List<UnknownSchemaNode> getUnknownSchemaNodes() {
96         return Collections.emptyList();
97     }
98
99     @Override
100     public String getDescription() {
101         return DESCRIPTION;
102     }
103
104     @Override
105     public String getReference() {
106         return REFERENCE;
107     }
108
109     @Override
110     public Status getStatus() {
111         return Status.CURRENT;
112     }
113
114     @Override
115     public String toString() {
116         return "identityref " + identity.getQName().getLocalName();
117     }
118
119     @Override
120     public TypeDefinition<?> getTypeDefinition() {
121
122         if (identityRefTypeInstance != null) {
123             return identityRefTypeInstance;
124         }
125
126         identityRefTypeInstance = IdentityrefType.create(path, identity);
127
128         return identityRefTypeInstance;
129     }
130 }