Update MRI projects for Aluminium
[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.Collections;
11 import java.util.HashMap;
12 import java.util.Map;
13 import org.opendaylight.mdsal.binding.api.DataTreeModification;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepPhysicalPortAugmentation;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepPhysicalPortAugmentationBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.PhysicalSwitchAugmentation;
17 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
18 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
19 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
20 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointBuilder;
21 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointKey;
22 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
23
24 public final class SwitchConfigOperationalChangeGetter {
25     private SwitchConfigOperationalChangeGetter() {
26     }
27
28     public static DataTreeModification<Node> getModification(final InstanceIdentifier<Node> psNodeId,
29                                                              final Node configNode, final Node operationalNode) {
30
31         NodeBuilder newNodeBuilder = getNodeBuilderFromNode(configNode);
32         NodeBuilder oldNodeBuilder = getNodeBuilderFromNode(operationalNode);
33
34         Map<TerminationPointKey, TerminationPoint> tpList = getPorts(configNode);
35         if (tpList.size() > 0) {
36             newNodeBuilder.setTerminationPoint(tpList);
37         }
38
39         tpList = getPorts(operationalNode);
40         if (tpList.size() > 0) {
41             oldNodeBuilder.setTerminationPoint(tpList);
42         }
43
44         return new DataTreeModificationImpl<>(psNodeId, newNodeBuilder.build(), oldNodeBuilder.build());
45     }
46
47     static NodeBuilder getNodeBuilderFromNode(final 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         newNodeBuilder.setTerminationPoint(Collections.emptyMap());
56
57         return newNodeBuilder;
58     }
59
60     static Map<TerminationPointKey, TerminationPoint> getPorts(final Node node) {
61         if (node == null) {
62             return Collections.emptyMap();
63         }
64         final Map<TerminationPointKey, TerminationPoint> tps = node.getTerminationPoint();
65         if (tps == null) {
66             return Collections.emptyMap();
67         }
68
69         final Map<TerminationPointKey, TerminationPoint> result = new HashMap<>();
70         for (TerminationPoint tp : node.getTerminationPoint().values()) {
71             TerminationPointBuilder terminationPointBuilder = new TerminationPointBuilder(tp);
72             terminationPointBuilder.removeAugmentation(HwvtepPhysicalPortAugmentation.class);
73
74             HwvtepPhysicalPortAugmentation augmentation = tp.augmentation(HwvtepPhysicalPortAugmentation.class);
75             HwvtepPhysicalPortAugmentationBuilder builder = new HwvtepPhysicalPortAugmentationBuilder();
76             if (augmentation != null) {
77                 builder = new HwvtepPhysicalPortAugmentationBuilder(augmentation);
78             }
79
80             if (augmentation != null && augmentation.getVlanBindings() != null
81                     && !augmentation.getVlanBindings().isEmpty()) {
82                 builder.setVlanBindings(augmentation.getVlanBindings());
83                 terminationPointBuilder.addAugmentation(HwvtepPhysicalPortAugmentation.class, builder.build());
84
85                 final TerminationPoint newTp = terminationPointBuilder.build();
86                 result.put(newTp.key(), newTp);
87             }
88         }
89         return result;
90     }
91 }