X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fstmt%2Frfc6020%2Feffective%2FLeafListEffectiveStatementImpl.java;h=6d9a5f6f42d90801b7c2ac84f1f680372a2aa15b;hb=387d6385bbd6a689372c6ac9cdde4021a7162e4d;hp=1963d6b79acbfd69783065b19933866312099d08;hpb=06c9c4c08533d7566dfc7e1293d8717345f198c9;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/LeafListEffectiveStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/LeafListEffectiveStatementImpl.java index 1963d6b79a..6d9a5f6f42 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/LeafListEffectiveStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/effective/LeafListEffectiveStatementImpl.java @@ -15,16 +15,19 @@ import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.LeafListStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement; +import org.opendaylight.yangtools.yang.model.util.type.ConcreteTypeBuilder; +import org.opendaylight.yangtools.yang.model.util.type.ConcreteTypes; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.TypeUtils; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; public final class LeafListEffectiveStatementImpl extends AbstractEffectiveDataSchemaNode implements LeafListSchemaNode, DerivableSchemaNode { - private final LeafListSchemaNode original; + private static final String ORDER_BY_USER_KEYWORD = "user"; private final TypeDefinition type; + private final LeafListSchemaNode original; private final boolean userOrdered; - private static final String ORDER_BY_USER_KEYWORD = "user"; public LeafListEffectiveStatementImpl( final StmtContext> ctx) { @@ -32,15 +35,34 @@ public final class LeafListEffectiveStatementImpl extends AbstractEffectiveDataS this.original = ctx.getOriginalCtx() == null ? null : (LeafListSchemaNode) ctx.getOriginalCtx() .buildEffective(); - OrderedByEffectiveStatementImpl orderedByStmt = firstEffective(OrderedByEffectiveStatementImpl.class); - if (orderedByStmt != null && orderedByStmt.argument().equals(ORDER_BY_USER_KEYWORD)) { - this.userOrdered = true; - } else { - this.userOrdered = false; + final TypeEffectiveStatement typeStmt = firstSubstatementOfType(TypeEffectiveStatement.class); + if (typeStmt == null) { + throw new SourceException("Leaf-list is missing a 'type' statement", ctx.getStatementSourceReference()); + } + + final ConcreteTypeBuilder builder = ConcreteTypes.concreteTypeBuilder(typeStmt.getTypeDefinition(), + ctx.getSchemaPath().get()); + boolean isUserOrdered = false; + for (EffectiveStatement stmt : effectiveSubstatements()) { + if (stmt instanceof OrderedByEffectiveStatementImpl) { + isUserOrdered = ORDER_BY_USER_KEYWORD.equals(stmt.argument()); + } + + if (stmt instanceof DefaultEffectiveStatementImpl) { + builder.setDefaultValue(stmt.argument()); + } else if (stmt instanceof DescriptionEffectiveStatementImpl) { + builder.setDescription(((DescriptionEffectiveStatementImpl)stmt).argument()); + } else if (stmt instanceof ReferenceEffectiveStatementImpl) { + builder.setReference(((ReferenceEffectiveStatementImpl)stmt).argument()); + } else if (stmt instanceof StatusEffectiveStatementImpl) { + builder.setStatus(((StatusEffectiveStatementImpl)stmt).argument()); + } else if (stmt instanceof UnitsEffectiveStatementImpl) { + builder.setUnits(((UnitsEffectiveStatementImpl)stmt).argument()); + } } - EffectiveStatement typeEffectiveSubstatement = firstEffectiveSubstatementOfType(TypeDefinition.class); - this.type = TypeUtils.getTypeFromEffectiveStatement(typeEffectiveSubstatement); + type = builder.build(); + userOrdered = isUserOrdered; } @Override