0e40b7bd789850d3804690128626c21859695df6
[ovsdb.git] / hwvtepsouthbound / hwvtepsouthbound-impl / src / main / java / org / opendaylight / ovsdb / hwvtepsouthbound / reconciliation / configuration / SwitchConfigOperationalChangeGetter.java
1 /*
2  * Copyright © 2016, 2017 Ericsson India Global Services Pvt Ltd. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.ovsdb.hwvtepsouthbound.reconciliation.configuration;
9
10 import java.util.ArrayList;
11 import java.util.List;
12 import org.opendaylight.mdsal.binding.api.DataTreeModification;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepPhysicalPortAugmentation;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepPhysicalPortAugmentationBuilder;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.PhysicalSwitchAugmentation;
16 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
17 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
18 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
19 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointBuilder;
20 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
21
22 public final class SwitchConfigOperationalChangeGetter {
23     private SwitchConfigOperationalChangeGetter() {
24     }
25
26     public static DataTreeModification<Node> getModification(InstanceIdentifier<Node> psNodeId,
27                                                              Node configNode, Node operationalNode) {
28
29         NodeBuilder newNodeBuilder = getNodeBuilderFromNode(configNode);
30         NodeBuilder oldNodeBuilder = getNodeBuilderFromNode(operationalNode);
31
32         List<TerminationPoint> tpList = getPorts(configNode);
33         if (tpList.size() > 0) {
34             newNodeBuilder.setTerminationPoint(tpList);
35         }
36
37         tpList = getPorts(operationalNode);
38         if (tpList.size() > 0) {
39             oldNodeBuilder.setTerminationPoint(tpList);
40         }
41
42         return new DataTreeModificationImpl<>(psNodeId, newNodeBuilder.build(), oldNodeBuilder.build());
43
44     }
45
46
47     static NodeBuilder getNodeBuilderFromNode(Node node) {
48         NodeBuilder newNodeBuilder;
49         if (node != null) {
50             newNodeBuilder = new NodeBuilder(node);
51             newNodeBuilder.removeAugmentation(PhysicalSwitchAugmentation.class);
52         } else {
53             newNodeBuilder = new NodeBuilder();
54         }
55         List<TerminationPoint> emptyList = new ArrayList<>();
56         newNodeBuilder.setTerminationPoint(emptyList);
57
58         return newNodeBuilder;
59     }
60
61
62     static List<TerminationPoint> getPorts(Node node) {
63         ArrayList<TerminationPoint> tpList = new ArrayList<>();
64         if (node == null || node.getTerminationPoint() == null) {
65             return tpList;
66         }
67         for (TerminationPoint tp: node.getTerminationPoint()) {
68             TerminationPointBuilder terminationPointBuilder = new TerminationPointBuilder(tp);
69             terminationPointBuilder.removeAugmentation(HwvtepPhysicalPortAugmentation.class);
70
71             HwvtepPhysicalPortAugmentation augmentation = tp.augmentation(HwvtepPhysicalPortAugmentation.class);
72             HwvtepPhysicalPortAugmentationBuilder builder = new HwvtepPhysicalPortAugmentationBuilder();
73             if (augmentation != null) {
74                 builder = new HwvtepPhysicalPortAugmentationBuilder(augmentation);
75             }
76
77             if (augmentation != null && augmentation.getVlanBindings() != null
78                     && !augmentation.getVlanBindings().isEmpty()) {
79                 builder.setVlanBindings(augmentation.getVlanBindings());
80                 terminationPointBuilder.addAugmentation(HwvtepPhysicalPortAugmentation.class, builder.build());
81                 tpList.add(terminationPointBuilder.build());
82             }
83         }
84         return tpList;
85     }
86 }