Remove redundant names in paths
[netvirt.git] / elanmanager / impl / src / main / java / org / opendaylight / netvirt / elan / l2gw / ha / commands / RemoteMcastCmd.java
diff --git a/elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/l2gw/ha/commands/RemoteMcastCmd.java b/elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/l2gw/ha/commands/RemoteMcastCmd.java
new file mode 100644 (file)
index 0000000..d9b7929
--- /dev/null
@@ -0,0 +1,114 @@
+/*
+ * Copyright (c) 2016, 2017 Ericsson India Global Services Pvt Ltd. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.netvirt.elan.l2gw.ha.commands;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.opendaylight.netvirt.elan.l2gw.ha.HwvtepHAUtil;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepGlobalAugmentation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepGlobalAugmentationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepLogicalSwitchRef;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepNodeName;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LogicalSwitches;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.RemoteMcastMacs;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.RemoteMcastMacsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.RemoteMcastMacsKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical.locator.set.attributes.LocatorSet;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical.locator.set.attributes.LocatorSetBuilder;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yangtools.yang.binding.Identifier;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+public class RemoteMcastCmd extends
+        MergeCommand<RemoteMcastMacs, HwvtepGlobalAugmentationBuilder, HwvtepGlobalAugmentation> {
+
+    public RemoteMcastCmd() {
+    }
+
+    @Override
+    public List<RemoteMcastMacs> getData(HwvtepGlobalAugmentation augmentation) {
+        if (augmentation != null) {
+            return augmentation.getRemoteMcastMacs();
+        }
+        return null;
+    }
+
+    @Override
+    public void setData(HwvtepGlobalAugmentationBuilder builder, List<RemoteMcastMacs> data) {
+        builder.setRemoteMcastMacs(data);
+    }
+
+    @Override
+    public InstanceIdentifier<RemoteMcastMacs> generateId(InstanceIdentifier<Node> id, RemoteMcastMacs node) {
+        HwvtepLogicalSwitchRef lsRef = HwvtepHAUtil.convertLogicalSwitchRef(node.getKey().getLogicalSwitchRef(), id);
+        RemoteMcastMacsKey key = new RemoteMcastMacsKey(lsRef, node.getMacEntryKey());
+
+        return id.augmentation(HwvtepGlobalAugmentation.class).child(RemoteMcastMacs.class, key);
+    }
+
+    @Override
+    public RemoteMcastMacs transform(InstanceIdentifier<Node> nodePath, RemoteMcastMacs src) {
+        RemoteMcastMacsBuilder ucmlBuilder = new RemoteMcastMacsBuilder(src);
+        List<LocatorSet> locatorSet = new ArrayList<>();
+        for (LocatorSet locator : src.getLocatorSet()) {
+            locatorSet.add(new LocatorSetBuilder().setLocatorRef(HwvtepHAUtil.buildLocatorRef(nodePath,
+                    HwvtepHAUtil.getTepIpVal(locator.getLocatorRef()))).build());
+        }
+        ucmlBuilder.setLocatorSet(locatorSet);
+        ucmlBuilder.setLogicalSwitchRef(HwvtepHAUtil.convertLogicalSwitchRef(src.getLogicalSwitchRef(), nodePath));
+        ucmlBuilder.setMacEntryUuid(HwvtepHAUtil.getUUid(src.getMacEntryKey().getValue()));
+
+        RemoteMcastMacsKey key = new RemoteMcastMacsKey(ucmlBuilder.getLogicalSwitchRef(),
+                 ucmlBuilder.getMacEntryKey());
+        ucmlBuilder.setKey(key);
+
+        return ucmlBuilder.build();
+    }
+
+    @Override
+    public Identifier getKey(RemoteMcastMacs data) {
+        return data.getKey();
+    }
+
+    @Override
+    public String getDescription() {
+        return "RemoteMcastMacs";
+    }
+
+    @Override
+    public boolean areEqual(RemoteMcastMacs updated, RemoteMcastMacs orig) {
+        InstanceIdentifier<?> updatedMacRefIdentifier = updated.getLogicalSwitchRef().getValue();
+        HwvtepNodeName updatedMacNodeName = updatedMacRefIdentifier.firstKeyOf(LogicalSwitches.class)
+                .getHwvtepNodeName();
+        InstanceIdentifier<?> origMacRefIdentifier = orig.getLogicalSwitchRef().getValue();
+        HwvtepNodeName origMacNodeName = origMacRefIdentifier.firstKeyOf(LogicalSwitches.class).getHwvtepNodeName();
+        if (updated.getMacEntryKey().equals(orig.getMacEntryKey())
+                && updatedMacNodeName.equals(origMacNodeName)) {
+            List<LocatorSet> updatedLocatorSet = updated.getLocatorSet();
+            List<LocatorSet> origLocatorSet = orig.getLocatorSet();
+            if (!areSameSize(updatedLocatorSet, origLocatorSet)) {
+                return false;
+            }
+            List<LocatorSet> added = diffOf(updatedLocatorSet, origLocatorSet, locatorSetComparator);
+            if (!HwvtepHAUtil.isEmptyList(added)) {
+                return false;
+            }
+            List<LocatorSet> removed = diffOf(origLocatorSet, updatedLocatorSet, locatorSetComparator);
+            if (!HwvtepHAUtil.isEmptyList(removed)) {
+                return false;
+            }
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public RemoteMcastMacs withoutUuid(RemoteMcastMacs data) {
+        return new RemoteMcastMacsBuilder(data).setMacEntryUuid(null).build();
+    }
+}