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.parser.stmt.rfc6020.effective.type;
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.effective.BaseEffectiveStatementImpl;
29 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.DeclaredEffectiveStatementBase;
31 public class IdentityRefSpecificationEffectiveStatementImpl extends
32 DeclaredEffectiveStatementBase<String, IdentityRefSpecification> implements IdentityrefTypeDefinition,
33 TypeEffectiveStatement<IdentityRefSpecification> {
35 private static final QName QNAME = QName.create(YangConstants.RFC6020_YANG_MODULE, TypeUtils.IDENTITY_REF);
37 private static final String DESCRIPTION = "The identityref type is used to reference an existing identity.";
38 private static final String REFERENCE = "https://tools.ietf.org/html/rfc6020#section-9.10";
40 private static final String UNITS = "";
42 private final SchemaPath path;
44 private final IdentitySchemaNode identity;
45 private IdentityrefType identityRefTypeInstance = null;
47 public IdentityRefSpecificationEffectiveStatementImpl(
48 final StmtContext<String, IdentityRefSpecification, EffectiveStatement<String, IdentityRefSpecification>> ctx) {
51 path = ctx.getParentContext().getSchemaPath().get().createChild(QNAME);
53 final BaseEffectiveStatementImpl base = firstEffective(BaseEffectiveStatementImpl.class);
55 QName identityQName = base.argument();
56 StmtContext<?, IdentityStatement, EffectiveStatement<QName, IdentityStatement>> identityCtx = ctx.getFromNamespace(IdentityNamespace.class, identityQName);
57 identity = (IdentitySchemaNode) identityCtx.buildEffective();
64 public IdentitySchemaNode getIdentity() {
69 public IdentityrefTypeDefinition getBaseType() {
74 public String getUnits() {
79 public Object getDefaultValue() {
84 public QName getQName() {
89 public SchemaPath getPath() {
94 public List<UnknownSchemaNode> getUnknownSchemaNodes() {
95 return Collections.emptyList();
99 public String getDescription() {
104 public String getReference() {
109 public Status getStatus() {
110 return Status.CURRENT;
114 public String toString() {
115 return "identityref " + identity.getQName().getLocalName();
119 public TypeDefinition<?> getTypeDefinition() {
121 if (identityRefTypeInstance != null) {
122 return identityRefTypeInstance;
125 identityRefTypeInstance = IdentityrefType.create(path, identity);
127 return identityRefTypeInstance;