import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
import org.opendaylight.netconf.api.DocumentedException;
+import org.opendaylight.netconf.api.EffectiveOperation;
import org.opendaylight.netconf.api.FailedNetconfMessage;
-import org.opendaylight.netconf.api.ModifyAction;
import org.opendaylight.netconf.api.NetconfDocumentedException;
import org.opendaylight.netconf.api.NetconfMessage;
import org.opendaylight.netconf.api.xml.XmlElement;
import org.opendaylight.yangtools.yang.data.util.DataSchemaContextNode;
import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
public static final @NonNull NodeIdentifier NETCONF_ERROR_OPTION_NODEID =
NodeIdentifier.create(NETCONF_ERROR_OPTION_QNAME);
public static final @NonNull QName NETCONF_RUNNING_QNAME = QName.create(NETCONF_QNAME, "running").intern();
+ public static final @NonNull NodeIdentifier NETCONF_RUNNING_NODEID = NodeIdentifier.create(NETCONF_RUNNING_QNAME);
public static final @NonNull QName NETCONF_SOURCE_QNAME = QName.create(NETCONF_QNAME, "source").intern();
public static final @NonNull NodeIdentifier NETCONF_SOURCE_NODEID = NodeIdentifier.create(NETCONF_SOURCE_QNAME);
public static final @NonNull QName NETCONF_CANDIDATE_QNAME = QName.create(NETCONF_QNAME, "candidate").intern();
+ public static final @NonNull NodeIdentifier NETCONF_CANDIDATE_NODEID =
+ NodeIdentifier.create(NETCONF_CANDIDATE_QNAME);
public static final @NonNull QName NETCONF_TARGET_QNAME = QName.create(NETCONF_QNAME, "target").intern();
public static final @NonNull NodeIdentifier NETCONF_TARGET_NODEID = NodeIdentifier.create(NETCONF_TARGET_QNAME);
public static final @NonNull QName NETCONF_CONFIG_QNAME = QName.create(NETCONF_QNAME, "config").intern();
public static final @NonNull NodeIdentifier NETCONF_CONFIG_NODEID = NodeIdentifier.create(NETCONF_CONFIG_QNAME);
public static final @NonNull QName NETCONF_COMMIT_QNAME = QName.create(NETCONF_QNAME, "commit").intern();
- public static final @NonNull SchemaPath NETCONF_COMMIT_PATH = toPath(NETCONF_COMMIT_QNAME);
+ public static final @NonNull Absolute NETCONF_COMMIT_PATH = toPath(NETCONF_COMMIT_QNAME);
public static final @NonNull QName NETCONF_VALIDATE_QNAME = QName.create(NETCONF_QNAME, "validate").intern();
public static final @NonNull NodeIdentifier NETCONF_VALIDATE_NODEID = NodeIdentifier.create(NETCONF_VALIDATE_QNAME);
- public static final @NonNull SchemaPath NETCONF_VALIDATE_PATH = toPath(NETCONF_VALIDATE_QNAME);
+ public static final @NonNull Absolute NETCONF_VALIDATE_PATH = toPath(NETCONF_VALIDATE_QNAME);
public static final @NonNull QName NETCONF_COPY_CONFIG_QNAME = QName.create(NETCONF_QNAME, "copy-config").intern();
public static final @NonNull NodeIdentifier NETCONF_COPY_CONFIG_NODEID =
NodeIdentifier.create(NETCONF_COPY_CONFIG_QNAME);
- public static final @NonNull SchemaPath NETCONF_COPY_CONFIG_PATH = toPath(NETCONF_COPY_CONFIG_QNAME);
+ public static final @NonNull Absolute NETCONF_COPY_CONFIG_PATH = toPath(NETCONF_COPY_CONFIG_QNAME);
public static final @NonNull QName NETCONF_OPERATION_QNAME = QName.create(NETCONF_QNAME, "operation").intern();
private static final @NonNull QName NETCONF_OPERATION_QNAME_LEGACY =
public static final @NonNull QName NETCONF_EDIT_CONFIG_QNAME = QName.create(NETCONF_QNAME, "edit-config").intern();
public static final @NonNull NodeIdentifier NETCONF_EDIT_CONFIG_NODEID =
NodeIdentifier.create(NETCONF_EDIT_CONFIG_QNAME);
- public static final @NonNull SchemaPath NETCONF_EDIT_CONFIG_PATH = toPath(NETCONF_EDIT_CONFIG_QNAME);
+ public static final @NonNull Absolute NETCONF_EDIT_CONFIG_PATH = toPath(NETCONF_EDIT_CONFIG_QNAME);
public static final @NonNull QName NETCONF_GET_CONFIG_QNAME = QName.create(NETCONF_QNAME, "get-config");
public static final @NonNull NodeIdentifier NETCONF_GET_CONFIG_NODEID =
NodeIdentifier.create(NETCONF_GET_CONFIG_QNAME);
- public static final @NonNull SchemaPath NETCONF_GET_CONFIG_PATH = toPath(NETCONF_GET_CONFIG_QNAME);
+ public static final @NonNull Absolute NETCONF_GET_CONFIG_PATH = toPath(NETCONF_GET_CONFIG_QNAME);
public static final @NonNull QName NETCONF_DISCARD_CHANGES_QNAME = QName.create(NETCONF_QNAME, "discard-changes");
- public static final @NonNull SchemaPath NETCONF_DISCARD_CHANGES_PATH = toPath(NETCONF_DISCARD_CHANGES_QNAME);
+ public static final @NonNull Absolute NETCONF_DISCARD_CHANGES_PATH = toPath(NETCONF_DISCARD_CHANGES_QNAME);
public static final @NonNull QName NETCONF_TYPE_QNAME = QName.create(NETCONF_QNAME, "type").intern();
public static final @NonNull QName NETCONF_FILTER_QNAME = QName.create(NETCONF_QNAME, "filter").intern();
public static final @NonNull QName NETCONF_GET_QNAME = QName.create(NETCONF_QNAME, "get").intern();
public static final @NonNull NodeIdentifier NETCONF_GET_NODEID = NodeIdentifier.create(NETCONF_GET_QNAME);
- public static final @NonNull SchemaPath NETCONF_GET_PATH = toPath(NETCONF_GET_QNAME);
+ public static final @NonNull Absolute NETCONF_GET_PATH = toPath(NETCONF_GET_QNAME);
public static final @NonNull QName NETCONF_RPC_QNAME = QName.create(NETCONF_QNAME, "rpc").intern();
public static final QName YANG_QNAME = null;
public static final URI NETCONF_ACTION_NAMESPACE = URI.create("urn:ietf:params:xml:ns:yang:1");
public static final @NonNull QName NETCONF_LOCK_QNAME = QName.create(NETCONF_QNAME, "lock").intern();
public static final @NonNull NodeIdentifier NETCONF_LOCK_NODEID = NodeIdentifier.create(NETCONF_LOCK_QNAME);
- public static final @NonNull SchemaPath NETCONF_LOCK_PATH = toPath(NETCONF_LOCK_QNAME);
+ public static final @NonNull Absolute NETCONF_LOCK_PATH = toPath(NETCONF_LOCK_QNAME);
public static final @NonNull QName NETCONF_UNLOCK_QNAME = QName.create(NETCONF_QNAME, "unlock").intern();
public static final @NonNull NodeIdentifier NETCONF_UNLOCK_NODEID = NodeIdentifier.create(NETCONF_UNLOCK_QNAME);
- public static final @NonNull SchemaPath NETCONF_UNLOCK_PATH = toPath(NETCONF_UNLOCK_QNAME);
+ public static final @NonNull Absolute NETCONF_UNLOCK_PATH = toPath(NETCONF_UNLOCK_QNAME);
public static final @NonNull NodeIdentifier EDIT_CONTENT_NODEID = NodeIdentifier.create(EditContent.QNAME);
public static final @NonNull ContainerNode CREATE_SUBSCRIPTION_RPC_CONTENT = Builders.containerBuilder()
.withNodeIdentifier(NodeIdentifier.create(CREATE_SUBSCRIPTION_RPC_QNAME)).build();
- public static final @NonNull SchemaPath CREATE_SUBSCRIPTION_RPC_PATH = toPath(CREATE_SUBSCRIPTION_RPC_QNAME);
+ public static final @NonNull Absolute CREATE_SUBSCRIPTION_RPC_PATH = toPath(CREATE_SUBSCRIPTION_RPC_QNAME);
public static final @NonNull NodeIdentifier NETCONF_FILTER_NODEID = NodeIdentifier.create(NETCONF_FILTER_QNAME);
final EffectiveModelContext ctx) {
final Element element = getNetconfFilterElement();
try {
- NetconfUtil.writeFilter(identifier, new DOMResult(element), SchemaPath.ROOT, ctx);
+ NetconfUtil.writeFilter(identifier, new DOMResult(element), ctx, null);
} catch (IOException | XMLStreamException e) {
throw new IllegalStateException("Unable to serialize filter element for path " + identifier, e);
}
for (final FieldsFilter filter : fieldsFilters) {
try {
- NetconfUtil.writeFilter(filter.path(), new DOMResult(element), SchemaPath.ROOT, ctx, filter.fields());
+ NetconfUtil.writeFilter(filter.path(), new DOMResult(element), ctx, null, filter.fields());
} catch (IOException | XMLStreamException e) {
throw new IllegalStateException(String.format(
"Unable to serialize filter element for path %s with fields: %s",
ex.getLocalizedMessage(), null, infoBuilder.toString(), ex.getCause());
}
- public static NodeIdentifier toId(final PathArgument qname) {
- return qname instanceof NodeIdentifier ? (NodeIdentifier) qname : toId(qname.getNodeType());
+ public static NodeIdentifier toId(final PathArgument arg) {
+ return arg instanceof NodeIdentifier nodeId ? nodeId : toId(arg.getNodeType());
}
public static NodeIdentifier toId(final QName nodeType) {
*
* @param ctx {@link EffectiveModelContext} device's model context
* @param dataPath {@link YangInstanceIdentifier} path to data in device's data-store
- * @param operation Optional of {@link ModifyAction} action to be invoked
+ * @param operation Optional of {@link EffectiveOperation} action to be invoked
* @param lastChildOverride Optional of {@code NormalizedNode} data on which action will be invoked
* @return {@link DOMSourceAnyxmlNode} containing edit-config structure
*/
public static DOMSourceAnyxmlNode createEditConfigAnyxml(
final EffectiveModelContext ctx, final YangInstanceIdentifier dataPath,
- final Optional<ModifyAction> operation, final Optional<NormalizedNode> lastChildOverride) {
+ final Optional<EffectiveOperation> operation, final Optional<NormalizedNode> lastChildOverride) {
if (dataPath.isEmpty()) {
Preconditions.checkArgument(lastChildOverride.isPresent(),
"Data has to be present when creating structure for top level element");
nnWriter.write(lastChildOverride.get());
}
}
- NetconfUtil.writeNormalizedNode(result.getResult(), metadata, new DOMResult(element),
- SchemaPath.ROOT, ctx);
+ NetconfUtil.writeNormalizedNode(result.getResult(), metadata, new DOMResult(element), ctx, null);
} else {
- NetconfUtil.writeNormalizedNode(dataPath, metadata, new DOMResult(element), SchemaPath.ROOT, ctx);
+ NetconfUtil.writeNormalizedNode(dataPath, metadata, new DOMResult(element), ctx, null);
}
} catch (final IOException | XMLStreamException e) {
throw new IllegalStateException("Unable to serialize edit config content element for path " + dataPath, e);
.build();
}
- private static NormalizedMetadata leafMetadata(final YangInstanceIdentifier path, final ModifyAction oper) {
+ private static NormalizedMetadata leafMetadata(final YangInstanceIdentifier path, final EffectiveOperation oper) {
final List<PathArgument> args = path.getPathArguments();
final Deque<Builder> builders = new ArrayDeque<>(args.size());
}
public static DataContainerChild createEditConfigStructure(final EffectiveModelContext ctx,
- final YangInstanceIdentifier dataPath, final Optional<ModifyAction> operation,
+ final YangInstanceIdentifier dataPath, final Optional<EffectiveOperation> operation,
final Optional<NormalizedNode> lastChildOverride) {
return Builders.choiceBuilder().withNodeIdentifier(EDIT_CONTENT_NODEID)
.withChild(createEditConfigAnyxml(ctx, dataPath, operation, lastChildOverride)).build();
}
- public static @NonNull SchemaPath toPath(final QName rpc) {
- return SchemaPath.ROOT.createChild(rpc);
+ public static @NonNull Absolute toPath(final QName rpc) {
+ return Absolute.of(rpc);
}
public static Map.Entry<Instant, XmlElement> stripNotification(final NetconfMessage message) {
}
}
- @SuppressWarnings("checkstyle:IllegalCatch")
public static void writeNormalizedOperationInput(final ContainerNode normalized, final DOMResult result,
final Absolute operationPath, final EffectiveModelContext baseNetconfCtx)
throws IOException, XMLStreamException {
- final QName inputQName = YangConstants.operationInputQName(operationPath.lastNodeIdentifier().getModule());
- // FIXME: eliminate this conversion
- final SchemaPath inputPath = SchemaPath.of(operationPath).createChild(inputQName);
+ final var stack = SchemaInferenceStack.of(baseNetconfCtx, operationPath);
+ stack.enterSchemaTree(YangConstants.operationInputQName(operationPath.lastNodeIdentifier().getModule()));
+ final var inputInference = stack.toSchemaTreeInference();
final XMLStreamWriter writer = NetconfUtil.XML_FACTORY.createXMLStreamWriter(result);
try {
try (NormalizedNodeStreamWriter normalizedNodeStreamWriter =
- XMLStreamNormalizedNodeStreamWriter.create(writer, baseNetconfCtx, inputPath)) {
+ XMLStreamNormalizedNodeStreamWriter.create(writer, inputInference)) {
try (SchemaOrderedNormalizedNodeWriter normalizedNodeWriter =
- new SchemaOrderedNormalizedNodeWriter(normalizedNodeStreamWriter, baseNetconfCtx, inputPath)) {
+ new SchemaOrderedNormalizedNodeWriter(normalizedNodeStreamWriter, inputInference)) {
final Collection<DataContainerChild> value = normalized.body();
normalizedNodeWriter.write(value);
normalizedNodeWriter.flush();
} finally {
try {
writer.close();
- } catch (final Exception e) {
+ } catch (final XMLStreamException e) {
LOG.warn("Unable to close resource properly", e);
}
}