import org.opendaylight.controller.antlrv4.code.gen.YangParser.Status_stmtContext;
import org.opendaylight.controller.antlrv4.code.gen.YangParser.Type_body_stmtsContext;
import org.opendaylight.controller.antlrv4.code.gen.YangParser.Units_stmtContext;
+import org.opendaylight.controller.antlrv4.code.gen.YangParser.When_stmtContext;
import org.opendaylight.controller.antlrv4.code.gen.YangParser.Yang_version_stmtContext;
import org.opendaylight.controller.antlrv4.code.gen.YangParserBaseListener;
import org.opendaylight.controller.yang.common.QName;
+import org.opendaylight.controller.yang.model.api.SchemaPath;
import org.opendaylight.controller.yang.model.api.Status;
import org.opendaylight.controller.yang.model.api.TypeDefinition;
import org.opendaylight.controller.yang.model.parser.builder.api.AugmentationSchemaBuilder;
import org.opendaylight.controller.yang.model.parser.builder.api.GroupingBuilder;
-import org.opendaylight.controller.yang.model.parser.builder.api.UsesNodeBuilder;
import org.opendaylight.controller.yang.model.parser.builder.impl.AnyXmlBuilder;
import org.opendaylight.controller.yang.model.parser.builder.impl.ChoiceBuilder;
import org.opendaylight.controller.yang.model.parser.builder.impl.ChoiceCaseBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-final class YangModelParserListenerImpl extends YangParserBaseListener {
-
+public final class YangModelParserListenerImpl extends YangParserBaseListener {\r
+\r
private static final Logger logger = LoggerFactory
.getLogger(YangModelParserListenerImpl.class);
private String yangModelPrefix;
private Date revision = new Date(0L);
- final static DateFormat simpleDateFormat = new SimpleDateFormat(
+ public final static DateFormat simpleDateFormat = new SimpleDateFormat(\r
"yyyy-MM-dd");
private final Stack<String> actualPath = new Stack<String>();
} else if (child instanceof Status_stmtContext) {
Status status = parseStatus((Status_stmtContext) child);
builder.setStatus(status);
+ } else if (child instanceof When_stmtContext) {
+ String when = stringFromNode(child);
+ builder.addWhenCondition(when);
}
}
}
if (YangTypesConverter.isBaseYangType(typeName)) {
if (typeBody == null) {
// if there are no constraints, just grab default base yang type
- type = YangTypesConverter.javaTypeForBaseYangType(typeName);
+ type = YangTypesConverter.javaTypeForBaseYangType(actualPath, namespace, revision, typeName);
moduleBuilder.setType(type, actualPath);
} else {
if ("union".equals(typeName)) {
- moduleBuilder.addUnionType(actualPath);
+ moduleBuilder.addUnionType(actualPath, namespace, revision);
+ } else if("identityref".equals(typeName)) {
+ SchemaPath path = createActualSchemaPath(actualPath, namespace, revision, yangModelPrefix);
+ moduleBuilder.addIdentityrefType(getIdentityrefBase(typeBody), actualPath, path);
} else {
List<String> typePath = new ArrayList<String>(actualPath);
typePath.remove(0);
@Override
public void enterUses_stmt(YangParser.Uses_stmtContext ctx) {
final String groupingPathStr = stringFromNode(ctx);
- UsesNodeBuilder builder = moduleBuilder.addUsesNode(groupingPathStr,
+ moduleBuilder.addUsesNode(groupingPathStr,
actualPath);
updatePath(groupingPathStr);
-
- final List<RefineHolder> refines = parseRefines(ctx);
- builder.setRefines(refines);
}
@Override
logger.debug("exiting " + actContainer);
}
+ @Override
+ public void enterRefine_stmt(YangParser.Refine_stmtContext ctx) {
+ String refineString = stringFromNode(ctx);
+ RefineHolder refine = parseRefine(ctx);
+ moduleBuilder.addRefine(refine, actualPath);
+ updatePath(refineString);
+ }
+
+ @Override
+ public void exitRefine_stmt(YangParser.Refine_stmtContext ctx) {
+ final String actContainer = actualPath.pop();
+ logger.debug("exiting " + actContainer);
+ }
+
@Override
public void enterLeaf_list_stmt(Leaf_list_stmtContext ctx) {
final String leafListName = stringFromNode(ctx);
// Unknown types
@Override
public void enterIdentifier_stmt(YangParser.Identifier_stmtContext ctx) {
- final String name = stringFromNode(ctx);
+ final String nodeParameter = stringFromNode(ctx);
+ QName nodeType = null;
+
+ final String nodeTypeStr = ctx.getChild(0).getText();
+ final String[] splittedElement = nodeTypeStr.split(":");
+ if (splittedElement.length == 1) {
+ nodeType = new QName(null, null, null, splittedElement[0]);
+ } else {
+ nodeType = new QName(null, null, splittedElement[0],
+ splittedElement[1]);
+ }
QName qname;
- if (name != null) {
- String[] splittedName = name.split(":");
+ if (nodeParameter != null) {
+ String[] splittedName = nodeParameter.split(":");
if (splittedName.length == 2) {
qname = new QName(null, null, splittedName[0], splittedName[1]);
} else {
splittedName[0]);
}
} else {
- qname = new QName(namespace, revision, yangModelPrefix, name);
+ qname = new QName(namespace, revision, yangModelPrefix, nodeParameter);
}
UnknownSchemaNodeBuilder builder = moduleBuilder.addUnknownSchemaNode(
qname, actualPath);
- updatePath(name);
-
+ builder.setNodeType(nodeType);
+ builder.setNodeParameter(nodeParameter);
+ updatePath(nodeParameter);
builder.setPath(createActualSchemaPath(actualPath, namespace, revision,
yangModelPrefix));
parseSchemaNodeArgs(ctx, builder);
final String targetPath = stringFromNode(ctx);
String reference = null;
String deviate = null;
- DeviationBuilder builder = moduleBuilder.addDeviation(targetPath, actualPath);
+ DeviationBuilder builder = moduleBuilder.addDeviation(targetPath,
+ actualPath);
updatePath(targetPath);
for (int i = 0; i < ctx.getChildCount(); i++) {
final QName identityQName = new QName(namespace, revision,
yangModelPrefix, identityName);
IdentitySchemaNodeBuilder builder = moduleBuilder
- .addIdentity(identityQName);
+ .addIdentity(identityQName, actualPath);
updatePath(identityName);
builder.setPath(createActualSchemaPath(actualPath, namespace, revision,