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%2FUsesStatementImpl.java;h=a5872bd614f440a02497893ed86210e1cd7359f7;hb=04fa25a4fe8957f6492618aa9a1e9a4f9af39df4;hp=631fb31795418774dc8158ac15e6314d408cce03;hpb=f1c55073f8d7631007c01a401346cc83383e5745;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UsesStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UsesStatementImpl.java index 631fb31795..a5872bd614 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UsesStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UsesStatementImpl.java @@ -7,16 +7,11 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; -import static org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase.FULL_DECLARATION; - +import static org.opendaylight.yangtools.yang.parser.spi.SubstatementValidator.MAX; import java.util.Collection; - import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; -import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; -import org.opendaylight.yangtools.yang.model.api.meta.StatementSource; import org.opendaylight.yangtools.yang.model.api.stmt.AugmentStatement; import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionStatement; import org.opendaylight.yangtools.yang.model.api.stmt.IfFeatureStatement; @@ -26,20 +21,38 @@ import org.opendaylight.yangtools.yang.model.api.stmt.StatusStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement; import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement; import org.opendaylight.yangtools.yang.parser.spi.GroupingNamespace; +import org.opendaylight.yangtools.yang.parser.spi.SubstatementValidator; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException; import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder; import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.InferenceAction; import org.opendaylight.yangtools.yang.parser.spi.meta.ModelActionBuilder.Prerequisite; +import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase; import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.UsesEffectiveStatementImpl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -public class UsesStatementImpl extends AbstractDeclaredStatement implements UsesStatement { - protected UsesStatementImpl(StmtContext context) { +public class UsesStatementImpl extends AbstractDeclaredStatement implements UsesStatement { + private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(Rfc6020Mapping + .USES) + .add(Rfc6020Mapping.AUGMENT, 0, MAX) + .add(Rfc6020Mapping.DESCRIPTION, 0, 1) + .add(Rfc6020Mapping.IF_FEATURE, 0, MAX) + .add(Rfc6020Mapping.REFINE, 0, MAX) + .add(Rfc6020Mapping.REFERENCE, 0, 1) + .add(Rfc6020Mapping.STATUS, 0, 1) + .add(Rfc6020Mapping.WHEN, 0, 1) + .build(); + + private static final Logger LOG = LoggerFactory.getLogger(UsesStatementImpl.class); + + protected UsesStatementImpl(final StmtContext context) { super(context); } @@ -51,62 +64,61 @@ public class UsesStatementImpl extends AbstractDeclaredStatement implemen } @Override - public QName parseArgumentValue(StmtContext ctx, String value) { + public QName parseArgumentValue(final StmtContext ctx, final String value) { return Utils.qNameFromArgument(ctx, value); } @Override public void onFullDefinitionDeclared( final StmtContext.Mutable> usesNode) - throws InferenceException, SourceException { + throws SourceException { + SUBSTATEMENT_VALIDATOR.validate(usesNode); + + if (StmtContextUtils.isInExtensionBody(usesNode)) { + return; + } - ModelActionBuilder usesAction = usesNode.newInferenceAction(FULL_DECLARATION); + ModelActionBuilder usesAction = usesNode.newInferenceAction(ModelProcessingPhase.EFFECTIVE_MODEL); final QName groupingName = usesNode.getStatementArgument(); final Prerequisite> sourceGroupingPre = usesAction.requiresCtx(usesNode, - GroupingNamespace.class, groupingName, FULL_DECLARATION); - final Prerequisite> targetNodePre = usesAction.mutatesCtx( - usesNode.getParentContext(), FULL_DECLARATION); + GroupingNamespace.class, groupingName, ModelProcessingPhase.EFFECTIVE_MODEL); + final Prerequisite> targetNodePre = usesAction.mutatesEffectiveCtx( + usesNode.getParentContext()); usesAction.apply(new InferenceAction() { @Override - public void apply() throws InferenceException { - StatementContextBase targetNodeStmtCtx = (StatementContextBase) targetNodePre - .get(); - StatementContextBase sourceGrpStmtCtx = (StatementContextBase) sourceGroupingPre - .get(); + public void apply() { + StatementContextBase targetNodeStmtCtx = (StatementContextBase) targetNodePre.get(); + StatementContextBase sourceGrpStmtCtx = (StatementContextBase) sourceGroupingPre.get(); try { - GroupingUtils.copyFromSourceToTarget(sourceGrpStmtCtx, targetNodeStmtCtx); + GroupingUtils.copyFromSourceToTarget(sourceGrpStmtCtx, targetNodeStmtCtx, usesNode); GroupingUtils.resolveUsesNode(usesNode, targetNodeStmtCtx); } catch (SourceException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + LOG.warn(e.getMessage(), e); + throw e; } } @Override - public void prerequisiteFailed(Collection> failed) throws InferenceException { - if (failed.contains(sourceGroupingPre)) { - throw new InferenceException("Grouping " + groupingName + " was not resovled.", usesNode - .getStatementSourceReference()); - } + public void prerequisiteFailed(final Collection> failed) { + InferenceException.throwIf(failed.contains(sourceGroupingPre), + usesNode.getStatementSourceReference(), "Grouping '%s' was not resolved.", groupingName); throw new InferenceException("Unknown error occurred.", usesNode.getStatementSourceReference()); } - }); - } @Override - public UsesStatement createDeclared(StmtContext ctx) { + public UsesStatement createDeclared(final StmtContext ctx) { return new UsesStatementImpl(ctx); } @Override public EffectiveStatement createEffective( - StmtContext> ctx) { + final StmtContext> ctx) { return new UsesEffectiveStatementImpl(ctx); } @@ -151,35 +163,4 @@ public class UsesStatementImpl extends AbstractDeclaredStatement implemen public Collection getRefines() { return allDeclared(RefineStatement.class); } - - @Override - public QName argument() { - // TODO Auto-generated method stub - return null; - } - - @Override - public String rawArgument() { - // TODO Auto-generated method stub - return null; - } - - @Override - public Collection> declaredSubstatements() { - // TODO Auto-generated method stub - return null; - } - - @Override - public StatementDefinition statementDefinition() { - // TODO Auto-generated method stub - return null; - } - - @Override - public StatementSource getStatementSource() { - // TODO Auto-generated method stub - return null; - } - }