Use Java declarations instead of Google Collections
[netvirt.git] / vpnservice / elanmanager / elanmanager-impl / src / main / java / org / opendaylight / netvirt / elan / l2gw / ha / commands / TerminationPointCmd.java
1 /*
2  * Copyright (c) 2016 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.netvirt.elan.l2gw.ha.commands;
9
10 import java.util.Comparator;
11 import java.util.List;
12 import java.util.stream.Collectors;
13 import org.opendaylight.netvirt.elan.l2gw.ha.HwvtepHAUtil;
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.hwvtep.physical.port.attributes.VlanBindings;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical.port.attributes.VlanBindingsBuilder;
18 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
19 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
20 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
21 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointBuilder;
22 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
23 import org.slf4j.LoggerFactory;
24
25 public class TerminationPointCmd extends MergeCommand<TerminationPoint, NodeBuilder, Node> {
26
27     public TerminationPointCmd() {
28         LOG = LoggerFactory.getLogger(TerminationPointCmd.class);
29     }
30
31     @Override
32     public List<TerminationPoint> getData(Node node) {
33         if (node != null) {
34             return node.getTerminationPoint();
35         }
36         return null;
37     }
38
39     @Override
40     public void setData(NodeBuilder builder, List<TerminationPoint> data) {
41         builder.setTerminationPoint(data);
42     }
43
44     @Override
45     protected InstanceIdentifier<TerminationPoint> generateId(InstanceIdentifier<Node> id, TerminationPoint node) {
46         return id.child(TerminationPoint.class, node.getKey());
47     }
48
49     @Override
50     public TerminationPoint transform(InstanceIdentifier<Node> nodePath, TerminationPoint src) {
51         HwvtepPhysicalPortAugmentation augmentation = src.getAugmentation(HwvtepPhysicalPortAugmentation.class);
52         if (augmentation == null) {
53             return new TerminationPointBuilder(src).build();
54         }
55         String nodeIdVal = nodePath.firstKeyOf(Node.class).getNodeId().getValue();
56         int idx = nodeIdVal.indexOf("/physicalswitch");
57         if (idx > 0) {
58             nodeIdVal = nodeIdVal.substring(0, idx);
59             nodePath = HwvtepHAUtil.convertToInstanceIdentifier(nodeIdVal);
60         }
61         final InstanceIdentifier<Node> path = nodePath;
62         TerminationPointBuilder tpBuilder = new TerminationPointBuilder(src);
63         tpBuilder.removeAugmentation(HwvtepPhysicalPortAugmentation.class);
64         HwvtepPhysicalPortAugmentationBuilder tpAugmentationBuilder =
65                 new HwvtepPhysicalPortAugmentationBuilder(augmentation);
66
67         if (augmentation.getVlanBindings() != null && augmentation.getVlanBindings().size() > 0) {
68             tpAugmentationBuilder.setVlanBindings(augmentation.getVlanBindings().stream().map(
69                 vlanBindings -> {
70                     VlanBindingsBuilder vlanBindingsBuilder = new VlanBindingsBuilder(vlanBindings);
71                     vlanBindingsBuilder.setLogicalSwitchRef(
72                             HwvtepHAUtil.convertLogicalSwitchRef(vlanBindings.getLogicalSwitchRef(), path));
73                     return vlanBindingsBuilder.build();
74                 }).collect(Collectors.toList()));
75         }
76
77         tpBuilder.addAugmentation(HwvtepPhysicalPortAugmentation.class, tpAugmentationBuilder.build());
78         return tpBuilder.build();
79     }
80
81     @Override
82     public String getKey(TerminationPoint data) {
83         return data.getTpId().getValue();
84     }
85
86     @Override
87     public String getDescription() {
88         return "vlanbindings";
89     }
90
91     @Override
92     public boolean areEqual(TerminationPoint updated, TerminationPoint orig) {
93         if (!updated.getKey().equals(orig.getKey())) {
94             return false;
95         }
96         HwvtepPhysicalPortAugmentation updatedAugmentation = updated
97                 .getAugmentation(HwvtepPhysicalPortAugmentation.class);
98         HwvtepPhysicalPortAugmentation origAugmentation = orig.getAugmentation(HwvtepPhysicalPortAugmentation.class);
99
100         List<VlanBindings> up = updatedAugmentation.getVlanBindings();
101         List<VlanBindings> or = origAugmentation.getVlanBindings();
102         if (!areSameSize(up, or)) {
103             return false;
104         }
105         List<VlanBindings> added = diffOf(up, or, bindingsComparator);
106         if (added.size() != 0) {
107             return false;
108         }
109         List<VlanBindings> removed = diffOf(or, up, bindingsComparator);
110         if (removed.size() != 0) {
111             return false;
112         }
113         return true;
114     }
115
116     static BindingsComparator bindingsComparator = new BindingsComparator();
117
118     static class BindingsComparator implements Comparator<VlanBindings> {
119         @Override
120         public int compare(VlanBindings updated, VlanBindings orig) {
121             if (updated == null && orig == null) {
122                 return 0;
123             }
124             if (updated == null) {
125                 return 1;
126             }
127             if (orig == null) {
128                 return 1;
129             }
130             if (updated.getKey().equals(orig.getKey())) {
131                 return 0;
132             }
133             updated.getKey();
134             return 1;
135         }
136     }
137 /*
138     @Override
139     public void transformUpdate(List<TerminationPoint> existing,
140                                 List<TerminationPoint> updated,
141                                 List<TerminationPoint> orig,
142                                 InstanceIdentifier<Node> nodePath,
143                                 LogicalDatastoreType datastoreType,
144                                 ReadWriteTransaction tx) {
145
146         if (updated == null) {
147             updated = new ArrayList<>();
148         }
149         if (orig == null) {
150             orig = new ArrayList<>();
151         }
152         List<TerminationPoint> added   = new ArrayList<>(updated);
153
154         added = diffOf(added, orig);
155         added = diffOf(added, existing);//do not add the existing data again
156         if (added != null && added.size() > 0) {
157             for (TerminationPoint addedItem : added) {
158                 InstanceIdentifier<TerminationPoint> transformedId = generateId(nodePath, addedItem);
159                 TerminationPoint transformedItem = transform(nodePath, addedItem);
160                 LOG.trace("adding vlanbindings id {} ", transformedId
161                                     .firstKeyOf(TerminationPoint.class).getTpId().getValue());
162                 tx.put(datastoreType, transformedId, transformedItem, true);
163             }
164         }
165         for (TerminationPoint origItem : orig) {
166             boolean found = false;
167             for (TerminationPoint newItem : updated) {
168                 if (newItem.getKey().equals(origItem.getKey())) {
169                     found = true;
170                 }
171             }
172             if (!found) {
173                 boolean existsInConfig = false;
174                 for (TerminationPoint existingItem : existing) {
175                     if (existingItem.getKey().equals(origItem.getKey())) {
176                         existsInConfig = true;
177                     }
178                 }
179                 if (existsInConfig) {
180                     InstanceIdentifier<TerminationPoint> transformedId = generateId(nodePath, origItem);
181                     LOG.trace("deleting vlanbindings id {} ", transformedId.firstKeyOf(TerminationPoint.class)
182                                                                                 .getTpId().getValue());
183                     tx.delete(datastoreType, transformedId);
184                 }
185             }
186         }
187     }
188 */
189
190 }