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