| /* |
| * Copyright 2016-present Open Networking Laboratory |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.onosproject.yangutils.datamodel; |
| |
| import org.onosproject.yangutils.datamodel.exceptions.DataModelException; |
| import org.onosproject.yangutils.datamodel.utils.Parsable; |
| import org.onosproject.yangutils.datamodel.utils.ResolvableStatus; |
| import org.onosproject.yangutils.datamodel.utils.YangConstructType; |
| |
| import java.io.Serializable; |
| |
| /*- |
| * Reference RFC 6020. |
| * |
| * The identityref type is used to reference an existing identity. |
| * |
| * The identityref's base Statement : |
| * The "base" statement, which is a substatement to the "type" |
| * statement, MUST be present if the type is "identityref". The |
| * argument is the name of an identity, as defined by an "identity" |
| * statement. If a prefix is present on the identity name, it refers to |
| * an identity defined in the module that was imported with that prefix. |
| * Otherwise, an identity with the matching name MUST be defined in the |
| * current module or an included submodule. |
| * Valid values for an identityref are any identities derived from the |
| * identityref's base identity. On a particular server, the valid |
| * values are further restricted to the set of identities defined in the |
| * modules supported by the server. |
| */ |
| |
| /** |
| * Represents data model node to maintain information defined in YANG identityref. |
| */ |
| public class YangIdentityRef extends YangNode implements Parsable, Resolvable, Serializable { |
| |
| private static final long serialVersionUID = 806201692L; |
| |
| // Get referred identity parent information. |
| private YangIdentity referredIdentity; |
| |
| // YANG node identifier. |
| private YangNodeIdentifier baseIdentity; |
| |
| /** |
| * Status of resolution. If completely resolved enum value is "RESOLVED", |
| * if not enum value is "UNRESOLVED", in case reference of grouping/typedef/identityref/base |
| * is added to uses/type/identityref/base but it's not resolved value of enum should be |
| * "INTRA_FILE_RESOLVED". |
| */ |
| private ResolvableStatus resolvableStatus; |
| |
| // Creates a specific identityref of node. |
| public YangIdentityRef() { |
| super(YangNodeType.IDENTITYREF_NODE); |
| baseIdentity = new YangNodeIdentifier(); |
| resolvableStatus = ResolvableStatus.UNRESOLVED; |
| } |
| |
| @Override |
| public ResolvableStatus getResolvableStatus() { |
| return resolvableStatus; |
| } |
| |
| @Override |
| public void setResolvableStatus(ResolvableStatus resolvableStatus) { |
| this.resolvableStatus = resolvableStatus; |
| } |
| |
| @Override |
| public Object resolve() throws DataModelException { |
| |
| // Check if the derived info is present. |
| YangIdentity identity = getReferredIdentity(); |
| |
| if (identity == null) { |
| throw new DataModelException("Linker Error: Identity information is missing."); |
| } |
| |
| while (identity.getBaseNode() != null) { |
| if (identity.getBaseNode().getResolvableStatus() != ResolvableStatus.RESOLVED) { |
| setResolvableStatus(ResolvableStatus.INTRA_FILE_RESOLVED); |
| return null; |
| } |
| identity = identity.getBaseNode().getReferredIdentity(); |
| } |
| return null; |
| } |
| |
| /** |
| * Returns the YANG base node identifier. |
| * |
| * @return the YANG base node identifier |
| */ |
| public YangNodeIdentifier getBaseIdentity() { |
| return baseIdentity; |
| } |
| |
| /** |
| * Sets the YANG node identifier. |
| * |
| * @param baseIdentity the YANG node identifier to set |
| */ |
| public void setBaseIdentity(YangNodeIdentifier baseIdentity) { |
| this.baseIdentity = baseIdentity; |
| } |
| |
| /** |
| * Returns the name of identity. |
| * |
| * @return the identity name |
| */ |
| @Override |
| public String getName() { |
| return baseIdentity.getName(); |
| } |
| |
| /** |
| * Sets the name of identity. |
| * |
| * @param name the identity name to set |
| */ |
| @Override |
| public void setName(String name) { |
| baseIdentity.setName(name); |
| } |
| |
| /** |
| * Sets node identifier. |
| * |
| * @param nodeIdentifier the node identifier |
| */ |
| public void setNodeIdentifier(YangNodeIdentifier nodeIdentifier) { |
| this.baseIdentity = nodeIdentifier; |
| } |
| |
| /** |
| * Returns prefix associated with base. |
| * |
| * @return prefix associated with base |
| */ |
| public String getPrefix() { |
| return baseIdentity.getPrefix(); |
| } |
| |
| /** |
| * Sets prefix associated with base. |
| * |
| * @param prefix prefix associated with base |
| */ |
| public void setPrefix(String prefix) { |
| baseIdentity.setPrefix(prefix); |
| } |
| |
| @Override |
| public YangConstructType getYangConstructType() { |
| return YangConstructType.IDENTITYREF_DATA; |
| } |
| |
| @Override |
| public void validateDataOnEntry() throws DataModelException { |
| } |
| |
| @Override |
| public void validateDataOnExit() throws DataModelException { |
| } |
| |
| /** |
| * Returns the parent identity node. |
| * |
| * @return the parent identity node |
| */ |
| public YangIdentity getReferredIdentity() { |
| return referredIdentity; |
| } |
| |
| /** |
| * Sets the parent identity node. |
| * |
| * @param referredIdentity the parent identity node to set |
| */ |
| public void setReferredIdentity(YangIdentity referredIdentity) { |
| this.referredIdentity = referredIdentity; |
| } |
| } |