2 * Copyright © 2016, 2017 Ericsson India Global Services Pvt Ltd. 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.ovsdb.hwvtepsouthbound.reconciliation.configuration;
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;
22 public final class SwitchConfigOperationalChangeGetter {
23 private SwitchConfigOperationalChangeGetter() {
26 public static DataTreeModification<Node> getModification(InstanceIdentifier<Node> psNodeId,
27 Node configNode, Node operationalNode) {
29 NodeBuilder newNodeBuilder = getNodeBuilderFromNode(configNode);
30 NodeBuilder oldNodeBuilder = getNodeBuilderFromNode(operationalNode);
32 List<TerminationPoint> tpList = getPorts(configNode);
33 if (tpList.size() > 0) {
34 newNodeBuilder.setTerminationPoint(tpList);
37 tpList = getPorts(operationalNode);
38 if (tpList.size() > 0) {
39 oldNodeBuilder.setTerminationPoint(tpList);
42 return new DataTreeModificationImpl<>(psNodeId, newNodeBuilder.build(), oldNodeBuilder.build());
47 static NodeBuilder getNodeBuilderFromNode(Node node) {
48 NodeBuilder newNodeBuilder;
50 newNodeBuilder = new NodeBuilder(node);
51 newNodeBuilder.removeAugmentation(PhysicalSwitchAugmentation.class);
53 newNodeBuilder = new NodeBuilder();
55 List<TerminationPoint> emptyList = new ArrayList<>();
56 newNodeBuilder.setTerminationPoint(emptyList);
58 return newNodeBuilder;
62 static List<TerminationPoint> getPorts(Node node) {
63 ArrayList<TerminationPoint> tpList = new ArrayList<>();
64 if (node == null || node.getTerminationPoint() == null) {
67 for (TerminationPoint tp: node.getTerminationPoint()) {
68 TerminationPointBuilder terminationPointBuilder = new TerminationPointBuilder(tp);
69 terminationPointBuilder.removeAugmentation(HwvtepPhysicalPortAugmentation.class);
71 HwvtepPhysicalPortAugmentation augmentation = tp.augmentation(HwvtepPhysicalPortAugmentation.class);
72 HwvtepPhysicalPortAugmentationBuilder builder = new HwvtepPhysicalPortAugmentationBuilder();
73 if (augmentation != null) {
74 builder = new HwvtepPhysicalPortAugmentationBuilder(augmentation);
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());