*/
package org.opendaylight.yangtools.yang.parser.stmt.rfc6020;
+import org.opendaylight.yangtools.yang.parser.spi.source.StmtOrderingNamespace;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
import java.util.Collection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
StmtContext<?, ?, ?> ctx, String value) throws SourceException {
return SchemaNodeIdentifier.create(
AugmentUtils.parseAugmentPath(ctx, value),
- Utils.isXPathAbsolute(value));
+ Utils.isXPathAbsolute(ctx, value));
}
@Override
final StmtContext.Mutable<SchemaNodeIdentifier, AugmentStatement, EffectiveStatement<SchemaNodeIdentifier, AugmentStatement>> augmentNode)
throws SourceException {
+ if (StmtContextUtils.isInExtensionBody(augmentNode)) {
+ return;
+ }
+
final ModelActionBuilder augmentAction = augmentNode
.newInferenceAction(ModelProcessingPhase.FULL_DECLARATION);
final ModelActionBuilder.Prerequisite<StmtContext<SchemaNodeIdentifier, AugmentStatement, EffectiveStatement<SchemaNodeIdentifier, AugmentStatement>>> sourceCtxPrereq = augmentAction
.getAugmentTargetCtx(augmentNode);
if (augmentTargetCtx == null) {
- throw new InferenceException("Augment target not found: "+augmentNode.getStatementArgument(), augmentNode.getStatementSourceReference());
+ throw new InferenceException(
+ "Augment target not found: "
+ + augmentNode.getStatementArgument(),
+ augmentNode.getStatementSourceReference());
+ }
+
+ if (!AugmentUtils.isSupportedAugmentTarget(augmentTargetCtx) || StmtContextUtils.isInExtensionBody(augmentTargetCtx)) {
+ augmentNode.setIsSupportedToBuildEffective(false);
+ return;
}
- final StatementContextBase<?, ?, ?> augmentSourceCtx = (StatementContextBase<?, ?, ?>) sourceCtxPrereq
- .get();
+ final StatementContextBase<?, ?, ?> augmentSourceCtx = (StatementContextBase<?, ?, ?>) augmentNode;
try {
AugmentUtils.copyFromSourceToTarget(augmentSourceCtx,
augmentTargetCtx);
+ augmentTargetCtx
+ .addEffectiveSubstatement(augmentSourceCtx);
+ updateAugmentOrder(augmentSourceCtx);
} catch (SourceException e) {
LOG.warn(e.getMessage(), e);
}
}
+ private void updateAugmentOrder(
+ final StatementContextBase<?, ?, ?> augmentSourceCtx) {
+ Integer currentOrder = augmentSourceCtx
+ .getFromNamespace(StmtOrderingNamespace.class,
+ Rfc6020Mapping.AUGMENT);
+ if (currentOrder == null) {
+ currentOrder = 1;
+ } else {
+ currentOrder++;
+ }
+ augmentSourceCtx.setOrder(currentOrder);
+ augmentSourceCtx.addToNs(StmtOrderingNamespace.class,
+ Rfc6020Mapping.AUGMENT, currentOrder);
+ }
+
@Override
public void prerequisiteFailed(
final Collection<? extends ModelActionBuilder.Prerequisite<?>> failed)
throws InferenceException {
- throw new InferenceException("Augment target not found: "+augmentNode.getStatementArgument(),
- augmentNode.getStatementSourceReference());
+ throw new InferenceException("Augment target not found: "
+ + augmentNode.getStatementArgument(), augmentNode
+ .getStatementSourceReference());
}
});
}