2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.netconf.client.mdsal;
10 import static java.util.Objects.requireNonNull;
12 import org.opendaylight.netconf.api.messages.NetconfMessage;
13 import org.opendaylight.netconf.client.mdsal.api.BaseNetconfSchemaProvider;
14 import org.opendaylight.netconf.client.mdsal.api.NetconfSessionPreferences;
15 import org.opendaylight.netconf.client.mdsal.api.RemoteDevice;
16 import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceHandler;
17 import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceId;
18 import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceServices;
19 import org.opendaylight.netconf.client.mdsal.impl.BaseRpcSchemalessTransformer;
20 import org.opendaylight.netconf.client.mdsal.impl.MessageCounter;
21 import org.opendaylight.netconf.client.mdsal.impl.SchemalessMessageTransformer;
22 import org.opendaylight.netconf.client.mdsal.spi.SchemalessNetconfDeviceRpc;
24 public class SchemalessNetconfDevice implements RemoteDevice<NetconfDeviceCommunicator> {
25 private final BaseNetconfSchemaProvider baseSchemas;
26 private final RemoteDeviceId id;
27 private final RemoteDeviceHandler salFacade;
29 private SchemalessMessageTransformer messageTransformer;
31 public SchemalessNetconfDevice(final BaseNetconfSchemaProvider baseSchemas, final RemoteDeviceId id,
32 final RemoteDeviceHandler salFacade) {
33 this.baseSchemas = requireNonNull(baseSchemas);
34 this.id = requireNonNull(id);
35 this.salFacade = requireNonNull(salFacade);
39 public void onRemoteSessionUp(final NetconfSessionPreferences remoteSessionCapabilities,
40 final NetconfDeviceCommunicator netconfDeviceCommunicator) {
41 final var baseSchema = baseSchemas.baseSchemaForCapabilities(remoteSessionCapabilities);
42 final var mountContext = baseSchema.mountPointContext();
44 final var counter = new MessageCounter();
45 final var rpcTransformer = new BaseRpcSchemalessTransformer(baseSchema, counter);
46 messageTransformer = new SchemalessMessageTransformer(counter);
48 salFacade.onDeviceConnected(
49 // FIXME: or bound from base schema rather?
50 new NetconfDeviceSchema(NetconfDeviceCapabilities.empty(), mountContext), remoteSessionCapabilities,
51 new RemoteDeviceServices(
52 new SchemalessNetconfDeviceRpc(id, netconfDeviceCommunicator, rpcTransformer, messageTransformer),
57 public void onRemoteSessionDown() {
58 salFacade.onDeviceDisconnected();
59 messageTransformer = null;
63 public void onNotification(final NetconfMessage notification) {
64 salFacade.onNotification(messageTransformer.toNotification(notification));