Table features : modified yang model.
[controller.git] / opendaylight / md-sal / sal-netconf-connector / src / main / java / org / opendaylight / controller / sal / connect / netconf / NetconfDeviceManager.xtend
1 package org.opendaylight.controller.sal.connect.netconf
2
3 import org.opendaylight.controller.sal.core.api.Broker.ProviderSession
4 import org.opendaylight.controller.sal.core.api.mount.MountProvisionService
5 import org.opendaylight.controller.md.sal.common.api.data.DataProvisionService
6 import org.opendaylight.controller.sal.core.api.data.DataProviderService
7 import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier
8 import org.opendaylight.yangtools.yang.common.QName
9 import static org.opendaylight.controller.sal.connect.netconf.InventoryUtils.*;
10 import static extension org.opendaylight.controller.sal.connect.netconf.NetconfInventoryUtils.*;
11
12 import org.opendaylight.controller.sal.core.api.data.DataChangeListener
13 import org.opendaylight.yangtools.yang.data.api.CompositeNode
14 import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent
15 import java.util.Map
16 import java.util.concurrent.ConcurrentHashMap
17 import org.opendaylight.controller.sal.core.api.mount.MountProvisionInstance
18 import org.opendaylight.controller.netconf.client.NetconfClientDispatcher
19 import java.io.OptionalDataException
20 import com.google.common.base.Optional
21 import java.net.SocketAddress
22 import java.net.InetSocketAddress
23
24 class NetconfDeviceManager {
25
26     val Map<InstanceIdentifier, NetconfDevice> devices = new ConcurrentHashMap;
27
28     var ProviderSession session;
29
30     @Property
31     var DataProviderService dataService;
32     
33     @Property
34     var MountProvisionService mountService;
35     
36     val nodeUpdateListener = new NetconfInventoryListener(this);
37
38
39     @Property
40     var NetconfClientDispatcher dispatcher;
41
42     def void start() {
43         dataService?.registerDataChangeListener(INVENTORY_PATH, nodeUpdateListener);
44         if(dispatcher == null) {
45         dispatcher = new NetconfClientDispatcher(Optional.absent);
46         }
47     }
48
49     def netconfNodeAdded(InstanceIdentifier path, CompositeNode node) {
50         val address = node.endpointAddress;
51         val port = Integer.parseInt(node.endpointPort);
52         netconfNodeAdded(path,new InetSocketAddress(address,port))
53
54     }
55     
56     def netconfNodeAdded(InstanceIdentifier path, InetSocketAddress address) {
57     
58         val mountPointPath = path;
59         val mountPoint = mountService.createOrGetMountPoint(mountPointPath);
60         val localPath = InstanceIdentifier.builder().toInstance;
61         val netconfDevice = new NetconfDevice(mountPoint,localPath);
62         netconfDevice.setSocketAddress(address);
63         netconfDevice.start(dispatcher);
64     }
65
66     def netconfNodeRemoved(InstanceIdentifier path) {
67     
68     }
69
70 }
71
72 class NetconfInventoryListener implements DataChangeListener {
73
74     val NetconfDeviceManager manager;
75
76     new(NetconfDeviceManager manager) {
77         this.manager = manager;
78     }
79
80     override onDataChanged(DataChangeEvent<InstanceIdentifier, CompositeNode> change) {
81         
82         //manager.netconfNodeAdded(path, change);
83     }
84 }