Fixup Augmentable and Identifiable methods changing
[netvirt.git] / vpnmanager / impl / src / main / java / org / opendaylight / netvirt / vpnmanager / VpnOperDsUtils.java
1 /*
2  * Copyright (c) 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.netvirt.vpnmanager;
9
10 import java.util.ArrayList;
11 import java.util.List;
12 import java.util.stream.Collectors;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.VpnInstanceToVpnId;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.VpnTargets;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.VpnTargetsBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.vpntargets.VpnTarget;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.vpntargets.VpnTargetBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.vpntargets.VpnTargetKey;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.to.vpn.id.VpnInstance;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.to.vpn.id.VpnInstanceBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.to.vpn.id.VpnInstanceKey;
22 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
23
24 /**
25  * There is one VpnInstance in ConfigDS and a VpnInstance in OperationalDS. The only reason
26  * for this class to exist is to avoid very long fully qualified class names when these 2
27  * classes coincide on the same java file. A couple of examples:
28  *
29  * <p>
30  * org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstance, versus
31  * org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.to.vpn.id.VpnInstance
32  * </p>
33  *
34  * <p>
35  * org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.af.config.vpntargets.VpnTarget, versus
36  * org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn
37  *                                                              .instance.op.data.entry.vpntargets.VpnTarget
38  * </p>
39  *
40  * <p>These class deals with those classes usually considered for the Operational DS.</p>
41  */
42 public final class VpnOperDsUtils {
43
44     private VpnOperDsUtils() { }
45
46     public static InstanceIdentifier<VpnInstance> getVpnInstanceToVpnIdIdentifier(String vpnName) {
47
48         return InstanceIdentifier.builder(VpnInstanceToVpnId.class).child(VpnInstance.class,
49                                                                           new VpnInstanceKey(vpnName)).build();
50     }
51
52     public static VpnInstance makeVpnInstance(String vpnName, String vpnRd, Long vpnTag) {
53         return new VpnInstanceBuilder().withKey(new VpnInstanceKey(vpnName)).setVpnInstanceName(vpnName)
54                                        .setVrfId(vpnRd).setVpnId(vpnTag).build();
55     }
56
57     static List<VpnTarget> makeVpnTargets(List<String> rtList, VpnTarget.VrfRTType type) {
58         return rtList.stream()
59                      .map(rt -> new VpnTargetBuilder().withKey(new VpnTargetKey(rt))
60                                                       .setVrfRTValue(rt).setVrfRTType(type).build())
61                      .collect(Collectors.toList());
62     }
63
64     public static VpnTargets makeVpnTargets(List<String> irts, List<String> erts) {
65         List<String> commonRT = new ArrayList<>(irts);
66         commonRT.retainAll(erts);
67         List<String> pureIrts = new ArrayList<>(irts);
68         pureIrts.removeAll(commonRT);
69         List<String> pureErts = new ArrayList<>(erts);
70         pureErts.removeAll(commonRT);
71         List<VpnTarget> vpnTargetList = new ArrayList<>();
72         vpnTargetList.addAll(makeVpnTargets(commonRT, VpnTarget.VrfRTType.Both));
73         vpnTargetList.addAll(makeVpnTargets(pureIrts, VpnTarget.VrfRTType.ImportExtcommunity));
74         vpnTargetList.addAll(makeVpnTargets(pureErts, VpnTarget.VrfRTType.ExportExtcommunity));
75         return new VpnTargetsBuilder().setVpnTarget(vpnTargetList).build();
76     }
77
78 }