Vinod Kumar S

YANG Grouping Linker Support

Change-Id: I2fec0c0bb4d1584e82ffba3228106897ccad2bf5
Showing 40 changed files with 422 additions and 149 deletions
......@@ -26,7 +26,7 @@ public interface Resolvable {
* Returns the status of resolution. If completely resolved returns enum
* value "RESOLVED", if not returns "UNRESOLVED", in case reference of
* grouping/typedef is added to uses/type but it's not resolved
* "PARTIALLY_RESOLVED" is returned.
* "INTRA_FILE_RESOLVED" is returned.
*
* @return status of resolution
*/
......@@ -36,7 +36,7 @@ public interface Resolvable {
* Set the status of type/uses resolution. If completely resolved set enum
* value "RESOLVED", if not set it to "UNRESOLVED", in case reference of
* grouping/typedef is added to uses/type but it's not resolved
* "PARTIALLY_RESOLVED" should be set.
* "INTRA_FILE_RESOLVED" should be set.
*
* @param resolvableStatus status of resolution
*/
......
......@@ -22,17 +22,24 @@ package org.onosproject.yangutils.datamodel;
public enum ResolvableStatus {
/**
* Identifies that resolvable entity is resolved.
* Identifies that resolvable entity is unresolved.
*/
RESOLVED,
UNRESOLVED,
/**
* Identifies that resolvable entity is unresolved.
* Identifies that resolvable entity's reference is linked.
*/
UNRESOLVED,
LINKED,
/**
* Identifies that resolvable entity is partially resolved.
* Identifies that resolvable entity is IntraFile resolved (i.e. complete
* linking with in the intra file).
*/
PARTIALLY_RESOLVED;
INTRA_FILE_RESOLVED,
/**
* Identifies that resolvable entity is resolved.
*/
RESOLVED;
}
......
......@@ -75,6 +75,7 @@ import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.detectCol
* | when | 7.19.5 | 0..1 |-TODO |
* +--------------+---------+-------------+------------------+
*/
/**
* Representation of data model node to maintain information defined in YANG augment.
*/
......
/*
* 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;
/**
* Represents information about entity being resolved.
*/
public class YangEntityToResolveInfo<T> {
// Parsable node for which resolution is to be performed.
private T entityToResolve;
// Holder of the YANG construct for which resolution has to be carried out.
private YangNode holderOfEntityToResolve;
/**
* Retrieves the entity to be resolved.
*
* @return entity to be resolved
*/
public T getEntityToResolve() {
return entityToResolve;
}
/**
* Sets entity to be resolved.
*
* @param entityToResolve entity to be resolved
*/
public void setEntityToResolve(T entityToResolve) {
this.entityToResolve = entityToResolve;
}
/**
* Retrieves the parent node which contains the entity to be resolved.
*
* @return parent node which contains the entity to be resolved
*/
public YangNode getHolderOfEntityToResolve() {
return holderOfEntityToResolve;
}
/**
* Sets parent node which contains the entity to be resolved.
*
* @param holderOfEntityToResolve parent node which contains the entity to be resolved
*/
public void setHolderOfEntityToResolve(YangNode holderOfEntityToResolve) {
this.holderOfEntityToResolve = holderOfEntityToResolve;
}
public String getEntityPrefix()
throws DataModelException {
if (getEntityToResolve() == null) {
return null;
}
String prefix;
T entityToResolve = (T) getEntityToResolve();
if (entityToResolve instanceof YangType) {
prefix = ((YangType<?>) entityToResolve).getPrefix();
} else if (entityToResolve instanceof YangUses) {
prefix = ((YangUses) entityToResolve).getPrefix();
} else {
throw new DataModelException("Data Model Exception: Entity to resolved is other than type/uses");
}
return prefix;
}
}
......@@ -59,10 +59,12 @@ import org.onosproject.yangutils.utils.YangConstructType;
* | revision-date | 7.1.5.1 | 0..1 | string |
* +---------------+---------+-------------+------------------+
*/
/**
* Represents the information about the imported modules.
*/
public class YangImport implements Parsable {
public class YangImport
implements Parsable {
/**
* Name of the module that is being imported.
......@@ -75,11 +77,6 @@ public class YangImport implements Parsable {
private String prefixId;
/**
* Resolution information root node which is also the data model root node.
*/
private HasResolutionInfo resolutionInfoNode;
/**
* Reference:RFC 6020.
*
* The import's "revision-date" statement is used to specify the exact
......@@ -167,7 +164,8 @@ public class YangImport implements Parsable {
* @throws DataModelException a violation of data model rules
*/
@Override
public void validateDataOnEntry() throws DataModelException {
public void validateDataOnEntry()
throws DataModelException {
// TODO auto-generated method stub, to be implemented by parser
}
......@@ -178,26 +176,9 @@ public class YangImport implements Parsable {
* @throws DataModelException a violation of data model rules
*/
@Override
public void validateDataOnExit() throws DataModelException {
public void validateDataOnExit()
throws DataModelException {
// TODO auto-generated method stub, to be implemented by parser
}
/**
* Returns the resolution information node.
*
* @return the resolution information node
*/
public HasResolutionInfo getResolutionInfoNode() {
return resolutionInfoNode;
}
/**
* Sets the dresolution information node.
*
* @param resolutionInfoNode the resolution information node
*/
public void setResolutionInfoNode(HasResolutionInfo resolutionInfoNode) {
this.resolutionInfoNode = resolutionInfoNode;
}
}
......
......@@ -33,10 +33,12 @@ import org.onosproject.yangutils.utils.YangConstructType;
* | revision-date | 7.1.5.1 | 0..1 | string |
* +---------------+---------+-------------+------------------+
*/
/**
* Represents the information about the included sub-modules.
*/
public class YangInclude implements Parsable {
public class YangInclude
implements Parsable {
/**
* Name of the sub-module that is being included.
......@@ -50,11 +52,6 @@ public class YangInclude implements Parsable {
private String revision;
/**
* Resolution information root node which is also the data model root node.
*/
private HasResolutionInfo resolutionInfoNode;
/**
* Creates a YANG include.
*/
public YangInclude() {
......@@ -112,7 +109,8 @@ public class YangInclude implements Parsable {
* @throws DataModelException a violation of data model rules
*/
@Override
public void validateDataOnEntry() throws DataModelException {
public void validateDataOnEntry()
throws DataModelException {
// TODO auto-generated method stub, to be implemented by parser
}
......@@ -123,26 +121,10 @@ public class YangInclude implements Parsable {
* @throws DataModelException a violation of data model rules
*/
@Override
public void validateDataOnExit() throws DataModelException {
public void validateDataOnExit()
throws DataModelException {
// TODO auto-generated method stub, to be implemented by parser
}
/**
* Returns the resolution information node.
*
* @return the resolution information node
*/
public HasResolutionInfo getResolutionInfoNode() {
return resolutionInfoNode;
}
/**
* Sets the dresolution information node.
*
* @param resolutionInfoNode the resolution information node
*/
public void setResolutionInfoNode(HasResolutionInfo resolutionInfoNode) {
this.resolutionInfoNode = resolutionInfoNode;
}
}
......
......@@ -104,9 +104,9 @@ public class YangRpc extends YangNode implements YangCommonInfo, Parsable,
@Override
public void detectSelfCollision(String identifierName, YangConstructType dataType) throws DataModelException {
if (this.getName().equals(identifierName)) {
if (getName().equals(identifierName)) {
throw new DataModelException("YANG file error: Duplicate input identifier detected, same as rpc \""
+ this.getName() + "\"");
+ getName() + "\"");
}
}
......
......@@ -20,6 +20,8 @@ import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
import org.onosproject.yangutils.parser.Parsable;
import org.onosproject.yangutils.utils.YangConstructType;
import static org.onosproject.yangutils.datamodel.ResolvableStatus.INTRA_FILE_RESOLVED;
/*
* Reference:RFC 6020.
* The "type" statement takes as an argument a string that is the name
......@@ -49,7 +51,8 @@ import org.onosproject.yangutils.utils.YangConstructType;
*
* @param <T> YANG data type info
*/
public class YangType<T> implements Parsable, Resolvable {
public class YangType<T>
implements Parsable, Resolvable {
/**
* YANG node identifier.
......@@ -89,7 +92,7 @@ public class YangType<T> implements Parsable, Resolvable {
* Status of resolution. If completely resolved enum value is "RESOLVED",
* if not enum value is "UNRESOLVED", in case reference of grouping/typedef
* is added to uses/type but it's not resolved value of enum should be
* "PARTIALLY_RESOLVED".
* "INTRA_FILE_RESOLVED".
*/
private ResolvableStatus resolvableStatus;
......@@ -262,7 +265,8 @@ public class YangType<T> implements Parsable, Resolvable {
* @throws DataModelException a violation of data model rules
*/
@Override
public void validateDataOnEntry() throws DataModelException {
public void validateDataOnEntry()
throws DataModelException {
// TODO auto-generated method stub, to be implemented by parser
}
......@@ -273,7 +277,8 @@ public class YangType<T> implements Parsable, Resolvable {
* @throws DataModelException a violation of data model rules
*/
@Override
public void validateDataOnExit() throws DataModelException {
public void validateDataOnExit()
throws DataModelException {
// TODO auto-generated method stub, to be implemented by parser
}
......@@ -290,6 +295,20 @@ public class YangType<T> implements Parsable, Resolvable {
@Override
public void resolve() {
//TODO: implement the method.
/*
Inherit the Restriction from the referred typedef definition.
*/
if (getDataType() != YangDataTypes.DERIVED) {
throw new RuntimeException("Resolve should only be called for derrived data types");
}
YangDerivedInfo<?> derrivedInfo = (YangDerivedInfo<?>) getDataTypeExtendedInfo();
YangType<?> baseType = derrivedInfo.getReferredTypeDef().getTypeDefBaseType();
if (YangDataTypes.DERIVED == baseType.getDataType()) {
if (baseType.getResolvableStatus() == INTRA_FILE_RESOLVED) {
setResolvableStatus(INTRA_FILE_RESOLVED);
}
}
//TODO:
}
}
......
......@@ -179,7 +179,7 @@ public class YangTypeDef extends YangNode implements YangCommonInfo, Parsable {
*
* @return the data type
*/
public YangType<?> getDataType() {
public YangType<?> getTypeDefBaseType() {
return dataType;
}
......
......@@ -16,13 +16,13 @@
package org.onosproject.yangutils.datamodel;
import java.util.LinkedList;
import java.util.List;
import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
import org.onosproject.yangutils.parser.Parsable;
import org.onosproject.yangutils.utils.YangConstructType;
import java.util.LinkedList;
import java.util.List;
/*
* Reference RFC 6020.
*
......
......@@ -48,10 +48,13 @@ import org.onosproject.yangutils.utils.YangConstructType;
* | when | 7.19.5 | 0..1 | -TODO |
* +--------------+---------+-------------+------------------+
*/
/**
* Represents data model node to maintain information defined in YANG uses.
*/
public class YangUses extends YangNode implements YangCommonInfo, Parsable, Resolvable {
public class YangUses
extends YangNode
implements YangCommonInfo, Parsable, Resolvable {
/**
* YANG node identifier.
......@@ -82,7 +85,7 @@ public class YangUses extends YangNode implements YangCommonInfo, Parsable, Reso
* Status of resolution. If completely resolved enum value is "RESOLVED",
* if not enum value is "UNRESOLVED", in case reference of grouping/typedef
* is added to uses/type but it's not resolved value of enum should be
* "PARTIALLY_RESOLVED".
* "INTRA_FILE_RESOLVED".
*/
private ResolvableStatus resolvableStatus;
......@@ -189,7 +192,8 @@ public class YangUses extends YangNode implements YangCommonInfo, Parsable, Reso
* @throws DataModelException a violation of data model rules
*/
@Override
public void validateDataOnEntry() throws DataModelException {
public void validateDataOnEntry()
throws DataModelException {
// TODO auto-generated method stub, to be implemented by parser
}
......@@ -199,7 +203,8 @@ public class YangUses extends YangNode implements YangCommonInfo, Parsable, Reso
* @throws DataModelException a violation of data model rules
*/
@Override
public void validateDataOnExit() throws DataModelException {
public void validateDataOnExit()
throws DataModelException {
// TODO auto-generated method stub, to be implemented by parser
}
......
......@@ -20,6 +20,7 @@ import java.util.List;
import org.onosproject.yangutils.datamodel.CollisionDetector;
import org.onosproject.yangutils.datamodel.HasResolutionInfo;
import org.onosproject.yangutils.datamodel.YangImport;
import org.onosproject.yangutils.datamodel.YangLeaf;
import org.onosproject.yangutils.datamodel.YangLeafList;
import org.onosproject.yangutils.datamodel.YangLeavesHolder;
......@@ -28,6 +29,7 @@ import org.onosproject.yangutils.datamodel.YangResolutionInfo;
import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
import org.onosproject.yangutils.utils.YangConstructType;
/**
* Represents utilities for data model tree.
*/
......@@ -117,10 +119,14 @@ public final class DataModelUtils {
* be resolved
* @throws DataModelException a violation of data model rules
*/
public static void addResolutionInfo(YangResolutionInfo resolutionInfo) throws DataModelException {
public static void addResolutionInfo(YangResolutionInfo resolutionInfo)
throws DataModelException {
/* get the module node to add maintain the list of nested reference */
YangNode curNode = resolutionInfo.getHolderOfEntityToResolve();
YangNode curNode = resolutionInfo.getEntityToResolveInfo()
.getHolderOfEntityToResolve();
while (!(curNode instanceof HasResolutionInfo)) {
curNode = curNode.getParent();
if (curNode == null) {
......@@ -128,25 +134,58 @@ public final class DataModelUtils {
}
}
HasResolutionInfo resolutionNode = (HasResolutionInfo) curNode;
if (!isPrefixValid(resolutionInfo.getEntityToResolveInfo().getEntityPrefix(),
resolutionNode)) {
throw new DataModelException("The prefix used is not valid");
}
resolutionNode.addToResolutionList(resolutionInfo);
}
private static boolean isPrefixValid(String entityPrefix, HasResolutionInfo resolutionNode) {
if (entityPrefix == null) {
return true;
}
if (resolutionNode.getPrefix().contentEquals(entityPrefix)) {
return true;
}
if (resolutionNode.getImportList() != null) {
for (YangImport importedInfo : resolutionNode.getImportList()) {
if (importedInfo.getPrefixId().contentEquals(entityPrefix)) {
return true;
}
}
}
if (resolutionNode.getIncludeList() != null) {
/**
* TODO: check if the prefix matches with the imported data
for (YangInclude includedInfo : resolutionNode.getIncludeList()) {
if (includedInfo.contentEquals(prefix)) {
return true;
}
}*/
}
return false;
}
/**
* Resolve linking for a resolution list.
*
* @param resolutionList resolution list for which linking to be done
* @param resolutionInfoNode module/sub-module node
* @param dataModelRootNode module/sub-module node
* @throws DataModelException a violation of data model rules
*/
public static void resolveLinkingForResolutionList(List<YangResolutionInfo> resolutionList,
HasResolutionInfo resolutionInfoNode)
HasResolutionInfo dataModelRootNode)
throws DataModelException {
for (YangResolutionInfo resolutionInfo : resolutionList) {
if (resolutionInfo.getPrefix() == null ||
resolutionInfo.getPrefix().equals(resolutionInfoNode.getPrefix())) {
resolutionInfo.resolveLinkingForResolutionInfo(resolutionInfoNode.getPrefix());
}
resolutionInfo.resolveLinkingForResolutionInfo(dataModelRootNode.getPrefix());
}
}
}
......
......@@ -20,6 +20,7 @@ import org.onosproject.yangutils.datamodel.YangCase;
import org.onosproject.yangutils.datamodel.YangChoice;
import org.onosproject.yangutils.datamodel.YangContainer;
import org.onosproject.yangutils.datamodel.YangGrouping;
import org.onosproject.yangutils.datamodel.YangLeaf;
import org.onosproject.yangutils.datamodel.YangList;
import org.onosproject.yangutils.datamodel.YangModule;
import org.onosproject.yangutils.datamodel.YangSubModule;
......@@ -34,6 +35,7 @@ import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaCase;
import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaChoice;
import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaContainer;
import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaGrouping;
import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaLeaf;
import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaList;
import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaModule;
import org.onosproject.yangutils.translator.tojava.javamodel.YangJavaSubModule;
......@@ -51,7 +53,7 @@ import org.onosproject.yangutils.translator.exception.TranslatorException;
public final class YangDataModelFactory {
/**
* Creates a YANG data model factory object.
* Utility class, hence private to prevent creating objects.
*/
private YangDataModelFactory() {
}
......@@ -261,6 +263,23 @@ public final class YangDataModelFactory {
* generated
* @return the corresponding inherited node based on the target language
*/
public static YangLeaf getYangLeaf(GeneratedLanguage targetLanguage) {
switch (targetLanguage) {
case JAVA_GENERATION: {
return new YangJavaLeaf();
}
default: {
throw new RuntimeException("Only YANG to Java is supported.");
}
}
}
/**
* Returns based on the target language generate the inherited data model node.
*
* @param targetLanguage target language in which YANG mapping needs to be
* generated
* @return the corresponding inherited node based on the target language
*/
public static YangRpc getYangRpcNode(GeneratedLanguage targetLanguage) {
switch (targetLanguage) {
case JAVA_GENERATION: {
......
......@@ -40,8 +40,9 @@ import static org.onosproject.yangutils.utils.YangConstructType.DESCRIPTION_DATA
*/
/**
* Represents listener based call back function corresponding to the "description"
* rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
* Represents listener based call back function corresponding to the
* "description" rule defined in ANTLR grammar file for corresponding ABNF rule
* in RFC 6020.
*/
public final class DescriptionListener {
......@@ -52,9 +53,8 @@ public final class DescriptionListener {
}
/**
* It is called when parser receives an input matching the grammar
* rule (description), perform validations and updates the data model
* tree.
* It is called when parser receives an input matching the grammar rule
* (description), perform validations and updates the data model tree.
*
* @param listener listener's object
* @param ctx context object of the grammar rule
......
......@@ -45,8 +45,8 @@ import static org.onosproject.yangutils.utils.YangConstructType.KEY_DATA;
*/
/**
* Represesnts listener based call back function corresponding to the "key"
* rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
* Represesnts listener based call back function corresponding to the "key" rule
* defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
*/
public final class KeyListener {
......@@ -57,9 +57,8 @@ public final class KeyListener {
}
/**
* It is called when parser receives an input matching the grammar
* rule (key), perform validations and updates the data model
* tree.
* It is called when parser receives an input matching the grammar rule
* (key), perform validations and updates the data model tree.
*
* @param listener listener's object
* @param ctx context object of the grammar rule
......
......@@ -27,10 +27,13 @@ import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
import org.onosproject.yangutils.parser.exceptions.ParserException;
import org.onosproject.yangutils.parser.impl.TreeWalkListener;
import static org.onosproject.yangutils.datamodel.utils.GeneratedLanguage.JAVA_GENERATION;
import static org.onosproject.yangutils.datamodel.utils.YangDataModelFactory.getYangLeaf;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerCollisionDetector.detectCollidingChildUtil;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction
.constructListenerErrorMessage;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
......@@ -108,7 +111,7 @@ public final class LeafListener {
int charPositionInLine = ctx.getStart().getCharPositionInLine();
detectCollidingChildUtil(listener, line, charPositionInLine, identifier, LEAF_DATA);
YangLeaf leaf = new YangLeaf();
YangLeaf leaf = getYangLeaf(JAVA_GENERATION);
leaf.setLeafName(identifier);
Parsable tmpData = listener.getParsedDataStack().peek();
......
......@@ -16,7 +16,6 @@
package org.onosproject.yangutils.parser.impl.listeners;
import org.onosproject.yangutils.datamodel.ResolutionType;
import org.onosproject.yangutils.datamodel.YangDataTypes;
import org.onosproject.yangutils.datamodel.YangDerivedInfo;
import org.onosproject.yangutils.datamodel.YangLeaf;
......@@ -34,11 +33,14 @@ import org.onosproject.yangutils.parser.exceptions.ParserException;
import org.onosproject.yangutils.parser.impl.TreeWalkListener;
import org.onosproject.yangutils.utils.YangConstructType;
import static org.onosproject.yangutils.datamodel.ResolvableStatus.UNRESOLVED;
import static org.onosproject.yangutils.datamodel.utils.DataModelUtils.addResolutionInfo;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction
.constructExtendedListenerErrorMessage;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction
.constructListenerErrorMessage;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
......@@ -123,17 +125,15 @@ public final class TypeListener {
ctx.string().getText(), EXIT));
}
// Get the prefix information
String prefix = ((YangType<?>) type).getPrefix();
// Create empty derived info and attach it to type extended info.
YangDerivedInfo<?> yangDerivedInfo = new YangDerivedInfo<>();
((YangType<YangDerivedInfo>) type).setDataTypeExtendedInfo(yangDerivedInfo);
type.setResolvableStatus(UNRESOLVED);
// Add resolution information to the list
YangResolutionInfo resolutionInfo = new YangResolutionInfo<YangType>(type,
ResolutionType.TYPEDEF_RESOLUTION, (YangNode) parentNodeOfLeaf, prefix, errorLine,
errorPosition);
(YangNode) parentNodeOfLeaf, errorLine, errorPosition);
addToResolutionList(resolutionInfo, ctx);
}
break;
......@@ -165,8 +165,8 @@ public final class TypeListener {
((YangType<YangDerivedInfo>) type).setDataTypeExtendedInfo(yangDerivedInfo);
// Add resolution information to the list
YangResolutionInfo resolutionInfo = new YangResolutionInfo<YangType>(type,
ResolutionType.TYPEDEF_RESOLUTION, (YangNode) parentNodeOfLeafList, prefix, errorLine,
YangResolutionInfo resolutionInfo =
new YangResolutionInfo<YangType>(type, (YangNode) parentNodeOfLeafList, errorLine,
errorPosition);
addToResolutionList(resolutionInfo, ctx);
}
......@@ -201,8 +201,8 @@ public final class TypeListener {
((YangType<YangDerivedInfo>) type).setDataTypeExtendedInfo(yangDerivedInfo);
// Add resolution information to the list
YangResolutionInfo resolutionInfo = new YangResolutionInfo<YangType>(type,
ResolutionType.TYPEDEF_RESOLUTION, (YangNode) typeDef, prefix, errorLine, errorPosition);
YangResolutionInfo resolutionInfo =
new YangResolutionInfo<YangType>(type, (YangNode) typeDef, errorLine, errorPosition);
addToResolutionList(resolutionInfo, ctx);
}
break;
......
......@@ -205,7 +205,7 @@ public final class ListenerUtil {
Calendar date = Calendar.getInstance();
SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
String dateForRevision = ((dateFormat.format(date.getTime())).replaceAll(SLASH, HYPHEN)).replaceAll(SPACE,
String dateForRevision = dateFormat.format(date.getTime()).replaceAll(SLASH, HYPHEN).replaceAll(SPACE,
EMPTY_STRING);
return dateForRevision;
}
......@@ -218,8 +218,8 @@ public final class ListenerUtil {
* @param ctx yang construct's context to get the line number and character position
* @return valid node identifier
*/
public static YangNodeIdentifier getValidNodeIdentifier(String nodeIdentifierString, YangConstructType
yangConstruct, ParserRuleContext ctx) {
public static YangNodeIdentifier getValidNodeIdentifier(String nodeIdentifierString,
YangConstructType yangConstruct, ParserRuleContext ctx) {
String tmpIdentifierString = removeQuotesAndHandleConcat(nodeIdentifierString);
String[] tmpData = tmpIdentifierString.split(Pattern.quote(COLON));
if (tmpData.length == 1) {
......
/*
* Copyright 2016 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.translator.tojava;
/**
* Maintain the java qualified access details for an attribute or a class.
*/
public interface HasJavaQualifiedTypeInfo {
/**
* Obtain the java qualified details.
*
* @return java qualified type details
*/
JavaQualifiedTypeInfo getJavaQualifiedInfo();
/**
* Assign the qualified type info.
*
* @param typeInfo qualified type information
*/
void setJavaQualifiedInfo(JavaQualifiedTypeInfo typeInfo);
}
......@@ -1055,7 +1055,7 @@ public class TempJavaCodeFragmentFiles {
public void addTypeDefAttributeToTempFiles(YangNode curNode) throws IOException {
JavaAttributeInfo javaAttributeInfo = getAttributeInfoOfTypeDef(curNode,
((YangTypeDef) curNode).getDataType(),
((YangTypeDef) curNode).getTypeDefBaseType(),
((YangTypeDef) curNode).getName(), false);
addJavaSnippetInfoToApplicableTempFiles(javaAttributeInfo);
}
......
/*
* Copyright 2016 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.translator.tojava.javamodel;
import org.onosproject.yangutils.datamodel.YangLeaf;
import org.onosproject.yangutils.translator.tojava.HasJavaQualifiedTypeInfo;
import org.onosproject.yangutils.translator.tojava.JavaQualifiedTypeInfo;
/**
* Maintains java information corresponding to the YANG leaf.
*/
public class YangJavaLeaf extends YangLeaf
implements HasJavaQualifiedTypeInfo {
private JavaQualifiedTypeInfo javaQualifiedAccess;
/**
* Create a YANG leaf object with java qualified access details.
*/
public YangJavaLeaf() {
super();
setJavaQualifiedInfo(new JavaQualifiedTypeInfo());
}
@Override
public JavaQualifiedTypeInfo getJavaQualifiedInfo() {
return javaQualifiedAccess;
}
@Override
public void setJavaQualifiedInfo(JavaQualifiedTypeInfo typeInfo) {
javaQualifiedAccess = typeInfo;
}
}
......@@ -18,6 +18,7 @@ package org.onosproject.yangutils.linker;
import java.io.IOException;
import java.util.ListIterator;
import org.junit.Test;
import org.onosproject.yangutils.datamodel.ResolvableStatus;
import org.onosproject.yangutils.datamodel.YangContainer;
......@@ -46,7 +47,8 @@ public class IntraFileTypeLinkingTest {
* Checks self resolution when typedef and leaf using type are siblings.
*/
@Test
public void processSelfResolutionWhenTypeAndTypedefAtRootLevel() throws IOException, ParserException {
public void processSelfResolutionWhenTypeAndTypedefAtRootLevel()
throws IOException, ParserException {
YangNode node = manager.getDataModel("src/test/resources/SelfResolutionWhenTypeAndTypedefAtRootLevel.yang");
......@@ -79,7 +81,8 @@ public class IntraFileTypeLinkingTest {
* level where typedef is at the root.
*/
@Test
public void processSelfFileLinkingTypedefAtRootTypeTwoLevelInHierarchy() throws IOException, ParserException {
public void processSelfFileLinkingTypedefAtRootTypeTwoLevelInHierarchy()
throws IOException, ParserException {
YangNode node =
manager.getDataModel("src/test/resources/SelfFileLinkingTypedefAtRootTypeTwoLevelInHierarchy.yang");
......@@ -118,7 +121,8 @@ public class IntraFileTypeLinkingTest {
* of type.
*/
@Test
public void processSelfFileLinkingTypedefAtRootIsAfterContainerHavingType() throws IOException, ParserException {
public void processSelfFileLinkingTypedefAtRootIsAfterContainerHavingType()
throws IOException, ParserException {
YangNode node =
manager.getDataModel("src/test/resources/SelfFileLinkingTypedefAtRootIsAfterContainerHavingType.yang");
......@@ -157,7 +161,8 @@ public class IntraFileTypeLinkingTest {
* holder of type.
*/
@Test
public void processSelfFileLinkingTypedefAtMiddleLevelAfterParentHolder() throws IOException, ParserException {
public void processSelfFileLinkingTypedefAtMiddleLevelAfterParentHolder()
throws IOException, ParserException {
YangNode node =
manager.getDataModel("src/test/resources/SelfFileLinkingTypedefAtMiddleLevelAfterParentHolder.yang");
......@@ -194,7 +199,8 @@ public class IntraFileTypeLinkingTest {
* Checks self resolution when typedef hierarchical references are present.
*/
@Test
public void processSelfFileLinkingWithTypdefHierarchicalReference() throws IOException, ParserException {
public void processSelfFileLinkingWithTypdefHierarchicalReference()
throws IOException, ParserException {
YangNode node =
manager.getDataModel("src/test/resources/SelfFileLinkingWithTypdefHierarchicalReference.yang");
......@@ -227,16 +233,16 @@ public class IntraFileTypeLinkingTest {
YangTypeDef typeDef1 = (YangTypeDef) yangList.getChild();
assertThat(((YangDerivedInfo<?>) typeDef1.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
assertThat(((YangDerivedInfo<?>) typeDef1.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
is((YangTypeDef) yangContainer.getChild().getNextSibling()));
assertThat((typeDef1.getDataType().getResolvableStatus()),
assertThat((typeDef1.getTypeDefBaseType().getResolvableStatus()),
is(ResolvableStatus.RESOLVED));
YangTypeDef typeDef2 = (YangTypeDef) yangContainer.getChild().getNextSibling();
assertThat(((YangDerivedInfo<?>) typeDef2.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
assertThat(((YangDerivedInfo<?>) typeDef2.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
is((YangTypeDef) node.getChild()));
assertThat((typeDef2.getDataType().getResolvableStatus()),
assertThat((typeDef2.getTypeDefBaseType().getResolvableStatus()),
is(ResolvableStatus.RESOLVED));
}
......@@ -245,7 +251,8 @@ public class IntraFileTypeLinkingTest {
* with last type is unresolved.
*/
@Test
public void processSelfFileLinkingWithTypdefHierarchicalRefUnresolved() throws IOException, ParserException {
public void processSelfFileLinkingWithTypdefHierarchicalRefUnresolved()
throws IOException, ParserException {
YangNode node =
manager.getDataModel("src/test/resources/SelfFileLinkingWithTypdefHierarchicalRefUnresolved.yang");
......@@ -274,28 +281,29 @@ public class IntraFileTypeLinkingTest {
assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
is((YangTypeDef) yangList.getChild()));
assertThat((leafInfo.getDataType().getResolvableStatus()),
is(ResolvableStatus.PARTIALLY_RESOLVED));
is(ResolvableStatus.INTRA_FILE_RESOLVED));
YangTypeDef typeDef1 = (YangTypeDef) yangList.getChild();
assertThat(((YangDerivedInfo<?>) typeDef1.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
assertThat(((YangDerivedInfo<?>) typeDef1.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
is((YangTypeDef) yangContainer.getChild().getNextSibling()));
assertThat((typeDef1.getDataType().getResolvableStatus()),
is(ResolvableStatus.PARTIALLY_RESOLVED));
assertThat((typeDef1.getTypeDefBaseType().getResolvableStatus()),
is(ResolvableStatus.INTRA_FILE_RESOLVED));
YangTypeDef typeDef2 = (YangTypeDef) yangContainer.getChild().getNextSibling();
assertThat(((YangDerivedInfo<?>) typeDef2.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
assertThat(((YangDerivedInfo<?>) typeDef2.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
is((YangTypeDef) node.getChild()));
assertThat((typeDef2.getDataType().getResolvableStatus()),
is(ResolvableStatus.PARTIALLY_RESOLVED));
assertThat((typeDef2.getTypeDefBaseType().getResolvableStatus()),
is(ResolvableStatus.INTRA_FILE_RESOLVED));
}
/**
* Checks self resolution when type uses prefix of self module.
*/
@Test
public void processSelfFileLinkingWithTypeWithSelfModulePrefix() throws IOException, ParserException {
public void processSelfFileLinkingWithTypeWithSelfModulePrefix()
throws IOException, ParserException {
YangNode node =
manager.getDataModel("src/test/resources/SelfFileLinkingWithTypeWithSelfModulePrefix.yang");
......@@ -328,16 +336,16 @@ public class IntraFileTypeLinkingTest {
YangTypeDef typeDef1 = (YangTypeDef) yangList.getChild();
assertThat(((YangDerivedInfo<?>) typeDef1.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
assertThat(((YangDerivedInfo<?>) typeDef1.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
is((YangTypeDef) yangContainer.getChild().getNextSibling()));
assertThat((typeDef1.getDataType().getResolvableStatus()),
assertThat((typeDef1.getTypeDefBaseType().getResolvableStatus()),
is(ResolvableStatus.RESOLVED));
YangTypeDef typeDef2 = (YangTypeDef) yangContainer.getChild().getNextSibling();
assertThat(((YangDerivedInfo<?>) typeDef2.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
assertThat(((YangDerivedInfo<?>) typeDef2.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
is((YangTypeDef) node.getChild()));
assertThat((typeDef2.getDataType().getResolvableStatus()),
assertThat((typeDef2.getTypeDefBaseType().getResolvableStatus()),
is(ResolvableStatus.RESOLVED));
}
......@@ -346,7 +354,8 @@ public class IntraFileTypeLinkingTest {
* some uses external prefix.
*/
@Test
public void processSelfFileLinkingWithTypeWithSelfAndExternalPrefixMix() throws IOException, ParserException {
public void processSelfFileLinkingWithTypeWithSelfAndExternalPrefixMix()
throws IOException, ParserException {
YangNode node =
manager.getDataModel("src/test/resources/SelfFileLinkingWithTypeWithSelfAndExternalPrefixMix.yang");
......@@ -375,15 +384,15 @@ public class IntraFileTypeLinkingTest {
assertThat(((YangDerivedInfo<?>) leafInfo.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
is((YangTypeDef) yangList.getChild()));
assertThat((leafInfo.getDataType().getResolvableStatus()),
is(ResolvableStatus.PARTIALLY_RESOLVED));
is(ResolvableStatus.INTRA_FILE_RESOLVED));
YangTypeDef typeDef1 = (YangTypeDef) yangList.getChild();
YangTypeDef typeDef2 = (YangTypeDef) yangContainer.getChild().getNextSibling();
assertThat(((YangDerivedInfo<?>) typeDef2.getDataType().getDataTypeExtendedInfo()).getReferredTypeDef(),
assertThat(((YangDerivedInfo<?>) typeDef2.getTypeDefBaseType().getDataTypeExtendedInfo()).getReferredTypeDef(),
is((YangTypeDef) node.getChild()));
assertThat((typeDef2.getDataType().getResolvableStatus()),
assertThat((typeDef2.getTypeDefBaseType().getResolvableStatus()),
is(ResolvableStatus.RESOLVED));
}
......@@ -392,7 +401,8 @@ public class IntraFileTypeLinkingTest {
* file.
*/
@Test(expected = ParserException.class)
public void processSelfResolutionWhenTypeReferredTypedefNotDefined() throws IOException, ParserException {
public void processSelfResolutionWhenTypeReferredTypedefNotDefined()
throws IOException, ParserException {
YangNode node =
manager.getDataModel("src/test/resources/SelfResolutionWhenTypeReferredTypedefNotDefined.yang");
......@@ -403,7 +413,8 @@ public class IntraFileTypeLinkingTest {
* level where typedef is is not an ancestor of type.
*/
@Test(expected = ParserException.class)
public void processSelfFileLinkingTypedefNotFound() throws IOException, ParserException {
public void processSelfFileLinkingTypedefNotFound()
throws IOException, ParserException {
YangNode node = manager.getDataModel("src/test/resources/SelfFileLinkingTypedefNotFound.yang");
}
......@@ -412,7 +423,8 @@ public class IntraFileTypeLinkingTest {
* Checks hierarchical self resolution with self resolution failure scenario.
*/
@Test(expected = ParserException.class)
public void processSelfFileLinkingWithHierarchicalTypeFailureScenario() throws IOException, ParserException {
public void processSelfFileLinkingWithHierarchicalTypeFailureScenario()
throws IOException, ParserException {
YangNode node =
manager.getDataModel("src/test/resources/SelfFileLinkingWithHierarchicalTypeFailureScenario.yang");
......
......@@ -106,6 +106,6 @@ public class InputListenerTest {
YangTypeDef typeDef = (YangTypeDef) yangInput.getChild();
assertThat(typeDef.getName(), is("my-type"));
assertThat(typeDef.getStatus(), is(YangStatusType.DEPRECATED));
assertThat(typeDef.getDataType().getDataType(), is(YangDataTypes.INT32));
assertThat(typeDef.getTypeDefBaseType().getDataType(), is(YangDataTypes.INT32));
}
}
......
......@@ -128,7 +128,7 @@ public class LengthRestrictionListenerTest {
assertThat(yangNode.getName(), is("Test"));
YangTypeDef typedef = (YangTypeDef) yangNode.getChild();
YangStringRestriction stringRestriction = (YangStringRestriction) typedef.getDataType()
YangStringRestriction stringRestriction = (YangStringRestriction) typedef.getTypeDefBaseType()
.getDataTypeExtendedInfo();
YangRangeRestriction lengthRestriction = stringRestriction.getLengthRestriction();
......
......@@ -108,6 +108,6 @@ public class OutputListenerTest {
assertThat(typeDef.getStatus(), is(YangStatusType.DEPRECATED));
assertThat(typeDef.getName(), is("my-type"));
assertThat(typeDef.getStatus(), is(YangStatusType.DEPRECATED));
assertThat(typeDef.getDataType().getDataType(), is(YangDataTypes.INT32));
assertThat(typeDef.getTypeDefBaseType().getDataType(), is(YangDataTypes.INT32));
}
}
......
......@@ -108,7 +108,7 @@ public class PatternRestrictionListenerTest {
assertThat(yangNode.getName(), is("Test"));
YangTypeDef typedef = (YangTypeDef) yangNode.getChild();
YangStringRestriction stringRestriction = (YangStringRestriction) typedef.getDataType()
YangStringRestriction stringRestriction = (YangStringRestriction) typedef.getTypeDefBaseType()
.getDataTypeExtendedInfo();
YangPatternRestriction yangPatternRestriction = stringRestriction.getPatternRestriction();
......
......@@ -61,6 +61,6 @@ public class RpcListenerTest {
YangTypeDef typeDef = (YangTypeDef) yangRpc.getChild();
assertThat(typeDef.getName(), is("my-type"));
assertThat(typeDef.getStatus(), is(YangStatusType.DEPRECATED));
assertThat(typeDef.getDataType().getDataType(), is(YangDataTypes.INT32));
assertThat(typeDef.getTypeDefBaseType().getDataType(), is(YangDataTypes.INT32));
}
}
......
......@@ -2,6 +2,9 @@ module Test {
yang-version 1;
namespace http://huawei.com;
prefix Ant;
import ietf-yang-types {
prefix "P";
}
leaf invalid-interval {
type P:hello;
}
......
......@@ -2,6 +2,9 @@ module Test {
yang-version 1;
namespace http://huawei.com;
prefix Ant;
import ietf-yang-types {
prefix "P";
}
list valid {
key address;
grouping endpoint {
......
......@@ -2,20 +2,23 @@ module Test {
yang-version 1;
namespace http://huawei.com;
prefix Ant;
import ietf-yang-types {
prefix "P";
}
grouping endpoint {
leaf address {
type ip-address;
type P:ip-address;
}
leaf port {
type port-number;
type P:port-number;
}
}
grouping endpoint {
leaf address {
type ip-address;
type P:pip-address;
}
leaf port {
type port-number;
type P:port-number;
}
}
}
......
......@@ -2,6 +2,9 @@ module Test {
yang-version 1;
namespace http://huawei.com;
prefix Ant;
import ietf-yang-types {
prefix "P";
}
list valid {
key address;
leaf address {
......
......@@ -2,6 +2,9 @@ module Test {
yang-version 1;
namespace http://huawei.com;
prefix Ant;
import ietf-yang-types {
prefix "P";
}
container valid {
grouping endpoint {
leaf address {
......
......@@ -2,6 +2,9 @@ module Test {
yang-version 1;
namespace http://huawei.com;
prefix Ant;
import ietf-yang-types {
prefix "P";
}
list valid {
key address;
leaf address {
......
......@@ -2,6 +2,9 @@ module Test {
yang-version 1;
namespace http://huawei.com;
prefix Ant;
import ietf-yang-types {
prefix "P";
}
grouping endpoint {
leaf address {
type P:ip-address;
......
......@@ -2,6 +2,9 @@ module Test {
yang-version 1;
namespace http://huawei.com;
prefix Ant;
import ietf-yang-types {
prefix "P";
}
typedef Percentage {
type P:Per;
}
......
......@@ -2,6 +2,9 @@ module Test {
yang-version 1;
namespace http://huawei.com;
prefix Ant;
import ietf-yang-types {
prefix "P";
}
typedef Percentage {
type int32;
}
......
......@@ -2,6 +2,9 @@ module Test {
yang-version 1;
namespace http://huawei.com;
prefix Ant;
import ietf-yang-types {
prefix "P";
}
list valid {
key address;
leaf address {
......
......@@ -6,6 +6,9 @@ module Test {
import interface-module {
prefix "if";
}
import ietf-yang-types {
prefix "P";
}
augment "/if:interfaces/if:ifEntry" {
when "if:ifType='ds0'";
leaf ds0ChannelNumber {
......
......@@ -2,6 +2,9 @@ module rock {
namespace "http://example.net/rock";
prefix "rock";
import ietf-yang-types {
prefix "P";
}
notification link-failure {
description "A link failure has been detected";
status deprecated;
......