Merge "Fix issue where NodeConnector ADDED events were propagated as NodeConnector...
[controller.git] / opendaylight / md-sal / compatibility / sal-compatibility / src / main / java / org / opendaylight / controller / sal / compatibility / NodeConnectorDataChangeListener.java
1 package org.opendaylight.controller.sal.compatibility;
2
3 import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent;
4 import org.opendaylight.controller.sal.binding.api.data.DataChangeListener;
5 import org.opendaylight.controller.sal.core.ConstructionException;
6 import org.opendaylight.controller.sal.core.NodeConnector;
7 import org.opendaylight.controller.sal.core.Property;
8 import org.opendaylight.controller.sal.core.UpdateType;
9 import org.opendaylight.controller.sal.inventory.IPluginOutInventoryService;
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef;
11 import org.opendaylight.yangtools.yang.binding.DataObject;
12 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
13 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory;
15
16 import java.util.HashSet;
17 import java.util.List;
18 import java.util.Map;
19 import java.util.Set;
20
21 // org.opendaylight.controller.sal.compatibility.NodeConnectorDataChangeListener
22 public class NodeConnectorDataChangeListener implements DataChangeListener{
23     private final static Logger LOG = LoggerFactory.getLogger(NodeConnectorDataChangeListener.class);
24
25     private List<IPluginOutInventoryService> inventoryPublisher;
26
27     public List<IPluginOutInventoryService> getInventoryPublisher() {
28       return this.inventoryPublisher;
29     }
30
31     public void setInventoryPublisher(final List<IPluginOutInventoryService> inventoryPublisher) {
32       this.inventoryPublisher = inventoryPublisher;
33     }
34
35     @Override
36     public void onDataChanged(DataChangeEvent<InstanceIdentifier<?>, DataObject> change) {
37         final Map<InstanceIdentifier<?>,DataObject> createdOperationalData = change.getCreatedOperationalData();
38         final Map<InstanceIdentifier<?>,DataObject> updatedOperationalData = change.getUpdatedOperationalData();
39
40         final Set<Map.Entry<InstanceIdentifier<?>,DataObject>> createdEntries = createdOperationalData.entrySet();
41         final Set<Map.Entry<InstanceIdentifier<?>,DataObject>> updatedEntries = new HashSet<>();
42
43         updatedEntries.addAll(updatedOperationalData.entrySet());
44         updatedEntries.removeAll(createdEntries);
45
46         for(final Map.Entry<InstanceIdentifier<?>,DataObject> entry : createdEntries){
47             publishNodeConnectorUpdate(entry, UpdateType.ADDED);
48         }
49
50         for(final Map.Entry<InstanceIdentifier<?>,DataObject> entry : updatedEntries){
51             publishNodeConnectorUpdate(entry, UpdateType.CHANGED);
52         }
53     }
54
55     private void publishNodeConnectorUpdate(final Map.Entry<InstanceIdentifier<?>,DataObject> entry, final UpdateType updateType) {
56         if (entry.getKey().getTargetType().equals(org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector.class)) {
57             NodeConnectorRef nodeConnectorRef = new NodeConnectorRef(entry.getKey());
58             NodeConnector nodeConnector = null;
59             try {
60                 nodeConnector = NodeMapping.toADNodeConnector(nodeConnectorRef);
61             } catch (ConstructionException e) {
62                 e.printStackTrace();
63             }
64             HashSet<Property> _aDNodeConnectorProperties = NodeMapping.toADNodeConnectorProperties((org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector) entry.getValue());
65             this.publishNodeConnectorUpdate(nodeConnector, updateType, _aDNodeConnectorProperties);
66         }
67     }
68
69     private void publishNodeConnectorUpdate(final NodeConnector nodeConnector, final UpdateType updateType, final Set<Property> properties) {
70       LOG.debug("Publishing NodeConnector " + updateType.toString() + " nodeConnector Id = " + nodeConnector.getNodeConnectorIdAsString());
71
72       List<IPluginOutInventoryService> _inventoryPublisher = getInventoryPublisher();
73       for (final IPluginOutInventoryService publisher : _inventoryPublisher) {
74         publisher.updateNodeConnector(nodeConnector, updateType, properties);
75       }
76     }
77 }