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=e1058c9f98a841ce11e97e3cec0baf0e43c58257;hpb=481a692d463636bbcf75f023da71703913e1b605;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 e1058c9f98..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,18 +7,11 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; -import static org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase.FULL_DECLARATION; - -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.UsesEffectiveStatementImpl; -import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementContextBase; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; +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; @@ -28,23 +21,42 @@ 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 { +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(); - protected UsesStatementImpl(StmtContext context) { + private static final Logger LOG = LoggerFactory.getLogger(UsesStatementImpl.class); + + protected UsesStatementImpl(final StmtContext context) { super(context); } - public static class Definition - extends + public static class Definition extends AbstractStatementSupport> { public Definition() { @@ -52,56 +64,61 @@ public class UsesStatementImpl extends AbstractDeclaredStatement } @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 { + public void onFullDefinitionDeclared( + final StmtContext.Mutable> usesNode) + 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< ?extends StmtContext.Mutable> targetNodePre = usesAction.mutatesCtx(usesNode.getParentContext(), FULL_DECLARATION); + final Prerequisite> sourceGroupingPre = usesAction.requiresCtx(usesNode, + 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(); + 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 resoled.", usesNode.getStatementSourceReference()); - } - throw new InferenceException("Unknown error occured.", 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); } @@ -146,35 +163,4 @@ public class UsesStatementImpl extends AbstractDeclaredStatement 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; - } - }