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.Collections;
11 import java.util.HashMap;
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;
24 public final class SwitchConfigOperationalChangeGetter {
25 private SwitchConfigOperationalChangeGetter() {
28 public static DataTreeModification<Node> getModification(final InstanceIdentifier<Node> psNodeId,
29 final Node configNode, final Node operationalNode) {
31 NodeBuilder newNodeBuilder = getNodeBuilderFromNode(configNode);
32 NodeBuilder oldNodeBuilder = getNodeBuilderFromNode(operationalNode);
34 Map<TerminationPointKey, TerminationPoint> tpList = getPorts(configNode);
35 if (tpList.size() > 0) {
36 newNodeBuilder.setTerminationPoint(tpList);
39 tpList = getPorts(operationalNode);
40 if (tpList.size() > 0) {
41 oldNodeBuilder.setTerminationPoint(tpList);
44 return new DataTreeModificationImpl<>(psNodeId, newNodeBuilder.build(), oldNodeBuilder.build());
47 static NodeBuilder getNodeBuilderFromNode(final Node node) {
48 NodeBuilder newNodeBuilder;
50 newNodeBuilder = new NodeBuilder(node);
51 newNodeBuilder.removeAugmentation(PhysicalSwitchAugmentation.class);
53 newNodeBuilder = new NodeBuilder();
55 newNodeBuilder.setTerminationPoint(Collections.emptyMap());
57 return newNodeBuilder;
60 static Map<TerminationPointKey, TerminationPoint> getPorts(final Node node) {
62 return Collections.emptyMap();
64 final Map<TerminationPointKey, TerminationPoint> tps = node.getTerminationPoint();
66 return Collections.emptyMap();
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);
74 HwvtepPhysicalPortAugmentation augmentation = tp.augmentation(HwvtepPhysicalPortAugmentation.class);
75 HwvtepPhysicalPortAugmentationBuilder builder = new HwvtepPhysicalPortAugmentationBuilder();
76 if (augmentation != null) {
77 builder = new HwvtepPhysicalPortAugmentationBuilder(augmentation);
80 if (augmentation != null && augmentation.getVlanBindings() != null
81 && !augmentation.getVlanBindings().isEmpty()) {
82 builder.setVlanBindings(augmentation.getVlanBindings());
83 terminationPointBuilder.addAugmentation(HwvtepPhysicalPortAugmentation.class, builder.build());
85 final TerminationPoint newTp = terminationPointBuilder.build();
86 result.put(newTp.key(), newTp);