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