Prepare the YANG models for RESTCONF
[lispflowmapping.git] / mappingservice / northbound / src / main / java / org / opendaylight / lispflowmapping / northbound / YangTransformerNB.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. 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
9 package org.opendaylight.lispflowmapping.northbound;
10
11 import java.util.ArrayList;
12 import java.util.List;
13
14 import javax.xml.bind.DatatypeConverter;
15
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.EidToLocatorRecord.Action;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LispAFIAddress;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.MapRegister;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.MapRequest;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.eidrecords.EidRecordBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.eidtolocatorrecords.EidToLocatorRecord;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.eidtolocatorrecords.EidToLocatorRecordBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lcaflistaddress.Addresses;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lcafsourcedestaddress.DstAddress;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lcafsourcedestaddress.DstAddressBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lcafsourcedestaddress.SrcAddress;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lcafsourcedestaddress.SrcAddressBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lcaftrafficengineeringaddress.Hops;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lcaftrafficengineeringaddress.HopsBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lispaddress.LispAddressContainer;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lispaddress.lispaddresscontainer.address.as.ASBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lispaddress.lispaddresscontainer.address.distinguishedname.DistinguishedNameBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lispaddress.lispaddresscontainer.address.ipv4.Ipv4AddressBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lispaddress.lispaddresscontainer.address.ipv6.Ipv6AddressBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lispaddress.lispaddresscontainer.address.lcafapplicationdata.LcafApplicationDataAddrBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lispaddress.lispaddresscontainer.address.lcaflist.LcafListAddrBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lispaddress.lispaddresscontainer.address.lcafsegment.LcafSegmentAddrBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lispaddress.lispaddresscontainer.address.lcafsourcedest.LcafSourceDestAddrBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lispaddress.lispaddresscontainer.address.lcaftrafficengineering.LcafTrafficEngineeringAddrBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lispaddress.lispaddresscontainer.address.mac.MacAddressBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lispaddress.lispaddresscontainer.address.no.NoAddressBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lispsimpleaddress.PrimitiveAddress;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.locatorrecords.LocatorRecord;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.locatorrecords.LocatorRecordBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.mapregisternotification.MapRegisterBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.maprequest.ItrRloc;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.maprequest.ItrRlocBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.maprequest.SourceEidBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.maprequestnotification.MapRequestBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.reencaphop.HopBuilder;
51 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
52 import org.opendaylight.lispflowmapping.implementation.util.LispAFIConvertor;
53 import org.opendaylight.lispflowmapping.type.AddressFamilyNumberEnum;
54 import org.opendaylight.lispflowmapping.type.LispCanonicalAddressFormatEnum;
55 import org.opendaylight.lispflowmapping.type.lisp.EidRecord;
56 import org.opendaylight.lispflowmapping.type.lisp.MapReplyAction;
57 import org.opendaylight.lispflowmapping.type.lisp.address.LispASAddress;
58 import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
59 import org.opendaylight.lispflowmapping.type.lisp.address.LispApplicationDataLCAFAddress;
60 import org.opendaylight.lispflowmapping.type.lisp.address.LispDistinguishedNameAddress;
61 import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv4Address;
62 import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv6Address;
63 import org.opendaylight.lispflowmapping.type.lisp.address.LispLCAFAddress;
64 import org.opendaylight.lispflowmapping.type.lisp.address.LispListLCAFAddress;
65 import org.opendaylight.lispflowmapping.type.lisp.address.LispMACAddress;
66 import org.opendaylight.lispflowmapping.type.lisp.address.LispNoAddress;
67 import org.opendaylight.lispflowmapping.type.lisp.address.LispSegmentLCAFAddress;
68 import org.opendaylight.lispflowmapping.type.lisp.address.LispSourceDestLCAFAddress;
69 import org.opendaylight.lispflowmapping.type.lisp.address.LispTrafficEngineeringLCAFAddress;
70 import org.opendaylight.lispflowmapping.type.lisp.address.ReencapHop;
71
72 public class YangTransformerNB {
73
74     public static LispAFIAddress toAFI(LispAddressContainer container) {
75         return LispAFIConvertor.toAFI(container);
76     }
77
78     public static PrimitiveAddress toPrimitive(LispAFIAddress address) {
79         return LispAFIConvertor.toPrimitive(address);
80     }
81
82     public static LispAFIAddress toAFIfromPrimitive(PrimitiveAddress primitive) {
83         return LispAFIConvertor.toAFIfromPrimitive(primitive);
84     }
85
86     public static LispAddressContainer transformLispAddress(LispAddress lispAddress) {
87
88         if (lispAddress == null) {
89             return null;
90         }
91
92         LispAFIAddress lispAFIAddress = null;
93         short ianaCode = lispAddress.getAfi().getIanaCode();
94
95         switch (lispAddress.getAfi()) {
96
97         case IP:
98             LispIpv4Address lispIpv4Address = (LispIpv4Address) lispAddress;
99             org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address ipv4Address =
100                     new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address(
101                             lispIpv4Address.getAddress().getHostAddress());
102             lispAFIAddress = new Ipv4AddressBuilder().setIpv4Address(ipv4Address).setAfi(ianaCode).build();
103             break;
104         case NO_ADDRESS:
105             lispAFIAddress = new NoAddressBuilder().setAfi(ianaCode).build();
106         case AS:
107             LispASAddress lispASAddress = (LispASAddress) lispAddress;
108             lispAFIAddress = new ASBuilder().setAS(lispASAddress.getAS()).setAfi(ianaCode).build();
109             break;
110         case DISTINGUISHED_NAME:
111             LispDistinguishedNameAddress lispDNAddress = (LispDistinguishedNameAddress) lispAddress;
112             lispAFIAddress = new DistinguishedNameBuilder().setDistinguishedName(lispDNAddress.getDistinguishedName()).setAfi(ianaCode).build();
113             break;
114         case IP6:
115             LispIpv6Address lispIpv6Address = (LispIpv6Address) lispAddress;
116             org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address ipv6Address =
117                     new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address(
118                             lispIpv6Address.getAddress().getHostAddress());
119             lispAFIAddress = new Ipv6AddressBuilder().setIpv6Address(ipv6Address).setAfi(ianaCode).build();
120             break;
121
122         case MAC:
123             lispAFIAddress = transformLispMACAddress(lispAddress);
124             break;
125
126         case LCAF:
127
128             LispLCAFAddress lispLcafAddress = (LispLCAFAddress) lispAddress;
129             LispCanonicalAddressFormatEnum lcafEnum = lispLcafAddress.getType();
130
131             switch (lcafEnum) {
132             case APPLICATION_DATA:
133                 lispAFIAddress = transformLispApplicationDataLCAFAddress(lispLcafAddress);
134                 break;
135             case LIST:
136                 lispAFIAddress = transformLispListLCAFAddress(lispLcafAddress);
137                 break;
138             case SEGMENT:
139                 lispAFIAddress = transformLispSegmentLCAFAddress(lispLcafAddress);
140                 break;
141             case SOURCE_DEST:
142                 lispAFIAddress = transformLispSourceDestLCAFAddress(lispLcafAddress);
143                 break;
144             case TRAFFIC_ENGINEERING:
145                 lispAFIAddress = transformLispTrafficEngineeringLCAFAddress(lispLcafAddress);
146                 break;
147             case UNKNOWN:
148             default:
149                 throw new IllegalArgumentException("LCAF type " + lcafEnum + " not supported by this transoformer");
150             }
151             break;
152
153         case UNKNOWN:
154         default:
155             throw new IllegalArgumentException("AFI " + lispAddress.getAfi() + " not supported by this transformer");
156         }
157
158         return LispAFIConvertor.toContainer(lispAFIAddress);
159
160     }
161
162     public static LispAFIAddress transformLispMACAddress(LispAddress lispAddress) {
163         LispMACAddress lispMacAddress = (LispMACAddress) lispAddress;
164         StringBuilder sb = new StringBuilder(17);
165         for (byte b : lispMacAddress.getMAC()) {
166             if (sb.length() > 0)
167                 sb.append(':');
168             sb.append(String.format("%02x", b));
169         }
170
171         return new MacAddressBuilder().setAfi(lispMacAddress.getAfi().getIanaCode()).setMacAddress(
172                 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress(sb.toString())).build();
173     }
174
175     public static LispAFIAddress transformLispApplicationDataLCAFAddress(LispLCAFAddress lispLcafAddress) {
176         LispApplicationDataLCAFAddress lispApplicationDataLCAFAddress = (LispApplicationDataLCAFAddress) lispLcafAddress;
177         org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lcafapplicationdataaddress.Address address;
178         address = new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lcafapplicationdataaddress.AddressBuilder().setPrimitiveAddress(
179                 toPrimitive(toAFI(transformLispAddress(lispApplicationDataLCAFAddress.getAddress())))).build();
180         return new LcafApplicationDataAddrBuilder().setAfi(lispLcafAddress.getAfi().getIanaCode())
181                 .setLcafType((short) lispLcafAddress.getType().getLispCode()).setIpTos(lispApplicationDataLCAFAddress.getIPTos())
182                 .setLocalPort(new PortNumber((int) lispApplicationDataLCAFAddress.getLocalPort()))
183                 .setRemotePort(new PortNumber((int) lispApplicationDataLCAFAddress.getRemotePort())).setAddress(address).build();
184     }
185
186     public static LispAFIAddress transformLispListLCAFAddress(LispLCAFAddress lispLcafAddress) {
187
188         LispListLCAFAddress lispListLCAFAddress = (LispListLCAFAddress) lispLcafAddress;
189
190         List<Addresses> listAddresses = new ArrayList<Addresses>();
191
192         for (int i = 0; i < lispListLCAFAddress.getAddresses().size(); i++) {
193             org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lcaflistaddress.Addresses addresses;
194             addresses = new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lcaflistaddress.AddressesBuilder().setPrimitiveAddress(
195                     toPrimitive(toAFI(transformLispAddress(lispListLCAFAddress.getAddresses().get(i))))).build();
196             listAddresses.add(addresses);
197         }
198
199         return new LcafListAddrBuilder().setAfi(lispLcafAddress.getAfi().getIanaCode()).setLcafType((short) lispLcafAddress.getType().getLispCode())
200                 .setAddresses(listAddresses).build();
201     }
202
203     public static LispAFIAddress transformLispSegmentLCAFAddress(LispLCAFAddress lispLcafAddress) {
204         LispSegmentLCAFAddress lispSegmentLCAFAddress = (LispSegmentLCAFAddress) lispLcafAddress;
205         org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lcafsegmentaddress.Address address;
206         address = new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lcafsegmentaddress.AddressBuilder().setPrimitiveAddress(
207                 toPrimitive(toAFI(transformLispAddress(lispSegmentLCAFAddress.getAddress())))).build();
208
209         return new LcafSegmentAddrBuilder().setAfi(lispLcafAddress.getAfi().getIanaCode()).setLcafType((short) lispLcafAddress.getType().getLispCode())
210                 .setInstanceId((long) lispSegmentLCAFAddress.getInstanceId()).setAddress(address).build();
211
212     }
213
214     public static LispAFIAddress transformLispSourceDestLCAFAddress(LispLCAFAddress lispLcafAddress) {
215         LispSourceDestLCAFAddress lispSourceDestLCAFAddress = (LispSourceDestLCAFAddress) lispLcafAddress;
216
217         SrcAddress srcAddress = new SrcAddressBuilder().setPrimitiveAddress(
218                 toPrimitive(toAFI(transformLispAddress(lispSourceDestLCAFAddress.getSrcAddress())))).build();
219
220         DstAddress dstAddress = new DstAddressBuilder().setPrimitiveAddress(
221                 toPrimitive(toAFI(transformLispAddress(lispSourceDestLCAFAddress.getDstAddress())))).build();
222
223         return new LcafSourceDestAddrBuilder().setAfi(lispLcafAddress.getAfi().getIanaCode())
224                 .setLcafType((short) lispLcafAddress.getType().getLispCode()).setSrcMaskLength((short) lispSourceDestLCAFAddress.getSrcMaskLength())
225                 .setDstMaskLength((short) lispSourceDestLCAFAddress.getDstMaskLength()).setSrcAddress(srcAddress).setDstAddress(dstAddress).build();
226     }
227
228     public static LispAFIAddress transformLispTrafficEngineeringLCAFAddress(LispLCAFAddress lispLcafAddress) {
229         LispTrafficEngineeringLCAFAddress lispTrafficEngineeringLCAFAddress = (LispTrafficEngineeringLCAFAddress) lispLcafAddress;
230
231         List<Hops> listHops = new ArrayList<Hops>();
232
233         for (int i = 0; i < lispTrafficEngineeringLCAFAddress.getHops().size(); i++) {
234             ReencapHop reencapHop = lispTrafficEngineeringLCAFAddress.getHops().get(i);
235
236             org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.reencaphop.Hop hop;
237             hop = new HopBuilder().setPrimitiveAddress(toPrimitive(toAFI(transformLispAddress(reencapHop.getHop())))).build();
238
239             Hops hops = new HopsBuilder().setLookup(reencapHop.isLookup()).setRLOCProbe(reencapHop.isRLOCProbe()).setStrict(reencapHop.isStrict())
240                     .setHop(hop).build();
241
242             listHops.add(hops);
243
244         }
245
246         return new LcafTrafficEngineeringAddrBuilder().setAfi(lispLcafAddress.getAfi().getIanaCode())
247                 .setLcafType((short) lispLcafAddress.getType().getLispCode()).setHops(listHops).build();
248     }
249
250     public static LispAddress transformToLispAddress(LispAddressContainer lispAddress) {
251
252         LispAddress legacyAddress = null;
253         LispAFIAddress address = LispAFIConvertor.toAFI(lispAddress);
254         AddressFamilyNumberEnum afi = AddressFamilyNumberEnum.valueOf(address.getAfi());
255
256         switch (afi) {
257
258         case IP:
259             org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LispIpv4Address lispIpv4Address;
260             lispIpv4Address = (org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LispIpv4Address) address;
261             legacyAddress = new LispIpv4Address(lispIpv4Address.getIpv4Address().getValue());
262             break;
263         case IP6:
264             org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LispIpv6Address lispIpv6Address;
265             lispIpv6Address = (org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LispIpv6Address) address;
266             legacyAddress = new LispIpv6Address(lispIpv6Address.getIpv6Address().getValue());
267             break;
268         case AS:
269             org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LispASAddress lispASAddress;
270             lispASAddress = (org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LispASAddress) address;
271             legacyAddress = new LispASAddress(lispASAddress.getAS());
272             break;
273         case DISTINGUISHED_NAME:
274             org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LispDistinguishedNameAddress lispDistinguishedNameAddress;
275             lispDistinguishedNameAddress = (org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LispDistinguishedNameAddress) address;
276             legacyAddress = new LispDistinguishedNameAddress(lispDistinguishedNameAddress.getDistinguishedName());
277             break;
278         case MAC:
279             org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LispMacAddress lispMacAddress;
280             lispMacAddress = (org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LispMacAddress) address;
281             String macString = lispMacAddress.getMacAddress().getValue();
282             macString = macString.replaceAll(":", "");
283             legacyAddress = new LispMACAddress(DatatypeConverter.parseHexBinary(macString));
284             break;
285         case NO_ADDRESS:
286             legacyAddress = new LispNoAddress();
287             break;
288         case LCAF:
289             org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LispLcafAddress lispLcafAddress;
290             lispLcafAddress = (org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LispLcafAddress) address;
291
292             LispCanonicalAddressFormatEnum lcafEnum = LispCanonicalAddressFormatEnum.valueOf(lispLcafAddress.getLcafType());
293
294             switch (lcafEnum) {
295             case APPLICATION_DATA:
296                 legacyAddress = transformToLispApplicationDataLCAFAddress(lispLcafAddress);
297                 break;
298             case LIST:
299                 legacyAddress = transformToLispListLCAFAddress(lispLcafAddress);
300                 break;
301             case SEGMENT:
302                 legacyAddress = transformToLispSegmentLCAFAddress(lispLcafAddress);
303                 break;
304             case SOURCE_DEST:
305                 legacyAddress = transformToLispSourceDestLCAFAddress(lispLcafAddress);
306                 break;
307             case TRAFFIC_ENGINEERING:
308                 legacyAddress = transformToLispTrafficEngineeringLCAFAddress(lispLcafAddress);
309                 break;
310             case UNKNOWN:
311             default:
312                 throw new IllegalArgumentException("LCAF type " + lcafEnum + " not supported by this transoformer");
313             }
314             break;
315         case UNKNOWN:
316         default:
317             throw new IllegalArgumentException("AFI " + afi + " not supported by this transformer");
318         }
319
320         return legacyAddress;
321     }
322
323     public static LispAddress transformToLispApplicationDataLCAFAddress(
324             org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LispLcafAddress lispLcafAddress) {
325         org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LcafApplicationDataAddress lcafApplicationDataAddress;
326         lcafApplicationDataAddress = (org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LcafApplicationDataAddress) lispLcafAddress;
327
328         return new LispApplicationDataLCAFAddress((byte) 0, lcafApplicationDataAddress.getProtocol().byteValue(), lcafApplicationDataAddress
329                 .getIpTos().intValue(), lcafApplicationDataAddress.getLocalPort().getValue().shortValue(), lcafApplicationDataAddress.getRemotePort()
330                 .getValue().shortValue(), transformToLispAddress(LispAFIConvertor.toContainer(toAFIfromPrimitive(lcafApplicationDataAddress.getAddress()
331                 .getPrimitiveAddress()))));
332     }
333
334     public static LispAddress transformToLispListLCAFAddress(org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LispLcafAddress lispLcafAddress) {
335         org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LcafListAddress lcafListAddress;
336         lcafListAddress = (org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LcafListAddress) lispLcafAddress;
337
338         List<LispAddress> listLegacyAddress = new ArrayList<LispAddress>();
339
340         for (int i = 0; i < lcafListAddress.getAddresses().size(); i++) {
341             listLegacyAddress
342                     .add(transformToLispAddress(LispAFIConvertor.toContainer(toAFIfromPrimitive(lcafListAddress.getAddresses().get(i).getPrimitiveAddress()))));
343         }
344         return new LispListLCAFAddress((byte) 0, listLegacyAddress);
345     }
346
347     public static LispAddress transformToLispSegmentLCAFAddress(org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LispLcafAddress lispLcafAddress) {
348         org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LcafSegmentAddress lcafSegmentAddress;
349         lcafSegmentAddress = (org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LcafSegmentAddress) lispLcafAddress;
350
351         byte iidMaskLen = 0;
352
353         return new LispSegmentLCAFAddress(iidMaskLen, lcafSegmentAddress.getInstanceId().intValue(),
354                 transformToLispAddress(LispAFIConvertor.toContainer(toAFIfromPrimitive(lcafSegmentAddress.getAddress().getPrimitiveAddress()))));
355
356     }
357
358     public static LispAddress transformToLispSourceDestLCAFAddress(
359             org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LispLcafAddress lispLcafAddress) {
360         org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LcafSourceDestAddress lcafSourceDestAddress;
361         lcafSourceDestAddress = (org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LcafSourceDestAddress) lispLcafAddress;
362
363         return new LispSourceDestLCAFAddress((byte) 0, (short) 0, lcafSourceDestAddress.getSrcMaskLength().byteValue(), lcafSourceDestAddress
364                 .getDstMaskLength().byteValue(), transformToLispAddress(LispAFIConvertor.toContainer(toAFIfromPrimitive(lcafSourceDestAddress.getSrcAddress()
365                 .getPrimitiveAddress()))), transformToLispAddress(LispAFIConvertor.toContainer(toAFIfromPrimitive(lcafSourceDestAddress.getDstAddress()
366                 .getPrimitiveAddress()))));
367
368     }
369
370     public static LispAddress transformToLispTrafficEngineeringLCAFAddress(
371             org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LispLcafAddress lispLcafAddress) {
372         org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LcafTrafficEngineeringAddress lcafTrafficEngineeringAddress;
373         lcafTrafficEngineeringAddress = (org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LcafTrafficEngineeringAddress) lispLcafAddress;
374
375         List<ReencapHop> listLegacyHops = new ArrayList<ReencapHop>();
376
377         ReencapHop legacyHop;
378         org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.ReencapHop hop;
379
380         // for (Addresses addresses : lcafListAddress.getAddresses()){
381         for (int i = 0; i < lcafTrafficEngineeringAddress.getHops().size(); i++) {
382             hop = (org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.ReencapHop) lcafTrafficEngineeringAddress.getHops().get(i);
383
384             legacyHop = new ReencapHop(transformToLispAddress(LispAFIConvertor.toContainer(toAFIfromPrimitive(hop.getHop().getPrimitiveAddress()))), (short) 0,
385                     hop.isLookup(), hop.isRLOCProbe(), hop.isStrict());
386
387             listLegacyHops.add(legacyHop);
388         }
389         return new LispTrafficEngineeringLCAFAddress((byte) 0, listLegacyHops);
390     }
391
392     public static MapRegister transformMapRegister(org.opendaylight.lispflowmapping.type.lisp.MapRegister legacyMapRegister) {
393
394         List<EidToLocatorRecord> listEidToLocatorRecord = new ArrayList<EidToLocatorRecord>();
395
396         // for (EidToLocatorRecord legacyRecord:
397         // legacyMapRegister.getEidToLocatorRecords()){
398         for (int i = 0; i < legacyMapRegister.getEidToLocatorRecords().size(); i++) {
399
400             listEidToLocatorRecord.add(transformEidToLocatorRecord(legacyMapRegister.getEidToLocatorRecords().get(i)));
401
402         }
403
404         MapRegisterBuilder builder = new MapRegisterBuilder();
405
406         MapRegister yangMapRegister = builder.setKeyId(legacyMapRegister.getKeyId()).setProxyMapReply(legacyMapRegister.isProxyMapReply())
407                 .setEidToLocatorRecord(listEidToLocatorRecord).setWantMapNotify(true).build();
408
409         return yangMapRegister;
410
411     }
412
413     public static EidToLocatorRecord transformEidToLocatorRecord(
414             org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord legacyEidToLocatorRecord) {
415
416         List<LocatorRecord> listLocatorRecord = new ArrayList<LocatorRecord>();
417
418         for (int j = 0; j < legacyEidToLocatorRecord.getLocators().size(); j++) {
419
420             org.opendaylight.lispflowmapping.type.lisp.LocatorRecord legacyLocatorRecord = legacyEidToLocatorRecord.getLocators().get(j);
421
422             LispAddressContainer rloc = transformLispAddress(legacyLocatorRecord.getLocator());
423
424             LocatorRecordBuilder locatorRecordBuilder = new LocatorRecordBuilder();
425
426             LocatorRecord locatorRecord = locatorRecordBuilder.setLispAddressContainer((LispAddressContainer) rloc)
427                     .setLocalLocator(legacyLocatorRecord.isLocalLocator()).setPriority((short) legacyLocatorRecord.getPriority())
428                     .setWeight((short) legacyLocatorRecord.getWeight()).setMulticastPriority((short) legacyLocatorRecord.getMulticastPriority())
429                     .setMulticastWeight((short) legacyLocatorRecord.getMulticastWeight()).setRlocProbed(legacyLocatorRecord.isRlocProbed())
430                     .setRouted(legacyLocatorRecord.isRouted()).build();
431
432             listLocatorRecord.add(locatorRecord);
433         }
434
435         LispAddressContainer eid = transformLispAddress(legacyEidToLocatorRecord.getPrefix());
436         EidToLocatorRecordBuilder eidToLocatorRecordBuilder = new EidToLocatorRecordBuilder();
437         EidToLocatorRecord eidToLocatorRecord = eidToLocatorRecordBuilder.setLispAddressContainer((LispAddressContainer) eid)
438                 .setAction(Action.forValue(legacyEidToLocatorRecord.getAction().getCode()))
439                 .setAuthoritative(legacyEidToLocatorRecord.isAuthoritative()).setMaskLength((short) legacyEidToLocatorRecord.getMaskLength())
440                 .setRecordTtl(legacyEidToLocatorRecord.getRecordTtl()).setLocatorRecord(listLocatorRecord).build();
441         return eidToLocatorRecord;
442     }
443
444     public static org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord reTransformEidToLocatorRecord(EidToLocatorRecord eidToLocatorRecord) {
445
446         org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord legacyRecord = new org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord();
447
448         for (int j = 0; j < eidToLocatorRecord.getLocatorRecord().size(); j++) {
449
450             LocatorRecord locatorRecord = (LocatorRecord) eidToLocatorRecord.getLocatorRecord().get(j);
451
452             org.opendaylight.lispflowmapping.type.lisp.LocatorRecord legacyLocatorRecord = new org.opendaylight.lispflowmapping.type.lisp.LocatorRecord();
453
454             LispAddressContainer rloc = locatorRecord.getLispAddressContainer();
455
456             legacyLocatorRecord.setLocator(YangTransformerNB.transformToLispAddress(rloc));
457
458             legacyLocatorRecord.setLocalLocator(locatorRecord.isLocalLocator()).setPriority(locatorRecord.getPriority())
459                     .setWeight(locatorRecord.getWeight()).setMulticastPriority(locatorRecord.getMulticastPriority())
460                     .setMulticastWeight(locatorRecord.getMulticastWeight()).setRlocProbed(locatorRecord.isRlocProbed())
461                     .setRouted(locatorRecord.isRouted());
462
463             legacyRecord.addLocator(legacyLocatorRecord);
464         }
465
466         LispAddress eid = transformToLispAddress(eidToLocatorRecord.getLispAddressContainer());
467         legacyRecord.setPrefix(eid).setAction(MapReplyAction.valueOf(eidToLocatorRecord.getAction().getIntValue()))
468                 .setAuthoritative(eidToLocatorRecord.isAuthoritative()).setMaskLength((short) eidToLocatorRecord.getMaskLength())
469                 .setRecordTtl(eidToLocatorRecord.getRecordTtl());
470         return legacyRecord;
471     }
472
473     public static MapRequest transformMapRequest(org.opendaylight.lispflowmapping.type.lisp.MapRequest legacyMapRequest) {
474
475         MapRequestBuilder builder = new MapRequestBuilder();
476         builder.setAuthoritative(legacyMapRequest.isAuthoritative());
477         builder.setMapDataPresent(legacyMapRequest.isMapDataPresent());
478         builder.setPitr(legacyMapRequest.isPitr());
479         builder.setProbe(legacyMapRequest.isProbe());
480         builder.setSmr(legacyMapRequest.isSmr());
481         builder.setSmrInvoked(legacyMapRequest.isSmrInvoked());
482
483         builder.setEidRecord(new ArrayList<org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.eidrecords.EidRecord>());
484         for (EidRecord record : legacyMapRequest.getEids()) {
485             LispAddressContainer container = transformLispAddress(record.getPrefix());
486             builder.getEidRecord().add(
487
488             new EidRecordBuilder().setMask((short) record.getMaskLength()).setLispAddressContainer(container).build());
489         }
490
491         builder.setItrRloc(new ArrayList<ItrRloc>());
492         for (LispAddress itr : legacyMapRequest.getItrRlocs()) {
493             builder.getItrRloc().add(new ItrRlocBuilder().setLispAddressContainer(transformLispAddress(itr)).build());
494         }
495
496         builder.setMapReply(null);
497         builder.setNonce(legacyMapRequest.getNonce());
498         if (legacyMapRequest.getSourceEid() != null) {
499             builder.setSourceEid(new SourceEidBuilder().setLispAddressContainer(transformLispAddress(legacyMapRequest.getSourceEid())).build());
500         }
501         return builder.build();
502
503     }
504
505 }