Use YANG java files instead of the old model TELSDN-474 #close
[lispflowmapping.git] / mappingservice / northbound / src / main / java / org / opendaylight / lispflowmapping / northbound / YangTransformerNB.java
1 /*
2  * Copyright (c) 2013 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.Iterator;
13 import java.util.List;
14
15 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispAFIAddress;
16 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.MapRegister;
17 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.MapRequest;
18 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidrecords.EidRecordBuilder;
19 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidtolocatorrecords.EidToLocatorRecord;
20 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidtolocatorrecords.EidToLocatorRecord.Action;
21 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidtolocatorrecords.EidToLocatorRecordBuilder;
22 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.LispAddressContainer;
23 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.LispAddressContainerBuilder;
24 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.Address;
25 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.AS;
26 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.ASBuilder;
27 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.Ipv4;
28 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.Ipv4Builder;
29 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.Ipv6;
30 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.Ipv6Builder;
31 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.address.NoBuilder;
32 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.locatorrecords.LocatorRecord;
33 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.locatorrecords.LocatorRecordBuilder;
34 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.mapregisternotification.MapRegisterBuilder;
35 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequest.ItrRloc;
36 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequest.ItrRlocBuilder;
37 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequest.SourceEidBuilder;
38 import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.maprequestnotification.MapRequestBuilder;
39 import org.opendaylight.lispflowmapping.type.AddressFamilyNumberEnum;
40 import org.opendaylight.lispflowmapping.type.lisp.EidRecord;
41 import org.opendaylight.lispflowmapping.type.lisp.MapReplyAction;
42 import org.opendaylight.lispflowmapping.type.lisp.address.LispASAddress;
43 import org.opendaylight.lispflowmapping.type.lisp.address.LispAddress;
44 import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv4Address;
45 import org.opendaylight.lispflowmapping.type.lisp.address.LispIpv6Address;
46 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
47 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;
48 import org.slf4j.Logger;
49 import org.slf4j.LoggerFactory;
50
51 public class YangTransformerNB {
52
53     protected static final Logger logger = LoggerFactory.getLogger(YangTransformerNB.class);
54
55     public static LispAddressContainer toContainer(LispAFIAddress address) {
56         if (address instanceof Address) {
57             return new LispAddressContainerBuilder().setAddress((Address) address).build();
58         } else {
59             return null;
60         }
61     }
62
63     public static LispAddressContainer transformLispAddress(LispAddress lispAddress) {
64
65         if (lispAddress == null) {
66             return null;
67         }
68
69         LispAFIAddress lispAFIAddress = null;
70         short ianaCode = lispAddress.getAfi().getIanaCode();
71
72         switch (lispAddress.getAfi()) {
73
74         case IP:
75             LispIpv4Address lispIpv4Address = (LispIpv4Address) lispAddress;
76             Ipv4Address ipv4Address = new Ipv4Address(lispIpv4Address.getAddress().getHostAddress());
77             lispAFIAddress = new Ipv4Builder().setIpv4Address(ipv4Address).setAfi(ianaCode).build();
78             break;
79         case NO_ADDRESS:
80             lispAFIAddress = new NoBuilder().setAfi(ianaCode).build();
81         case AS:
82             LispASAddress lispASAddress = (LispASAddress) lispAddress;
83             lispAFIAddress = new ASBuilder().setAS(lispASAddress.getAS()).setAfi(ianaCode).build();
84             break;
85         case DISTINGUISHED_NAME:
86             break;
87         case IP6:
88             LispIpv6Address lispIpv6Address = (LispIpv6Address) lispAddress;
89             Ipv6Address ipv6Address = new Ipv6Address(lispIpv6Address.getAddress().getHostAddress());
90             lispAFIAddress = new Ipv6Builder().setIpv6Address(ipv6Address).setAfi(ianaCode).build();
91             break;
92         case LCAF:
93             break;
94         case MAC:
95             break;
96         case UNKNOWN:
97             break;
98         default:
99
100             break;
101         }
102
103         return toContainer(lispAFIAddress);
104
105     }
106
107     public static LispAddress transformToLispAddress(LispAddressContainer lispAddress) {
108
109         LispAddress legacyAddres = null;
110         LispAFIAddress address = (LispAFIAddress) lispAddress.getAddress();
111         short ianaCode = address.getAfi();
112
113         // TODO: add all other cases.
114
115         switch (ianaCode) {
116
117         case 1:
118             org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispIpv4Address lispIpv4Address = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispIpv4Address) address;
119             legacyAddres = new LispIpv4Address(lispIpv4Address.getIpv4Address().getValue());
120             break;
121         case 2:
122             org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispIpv6Address lispIpv6Address = (org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispIpv6Address) address;
123             legacyAddres = new LispIpv6Address(lispIpv6Address.getIpv6Address().getValue());
124             break;
125         default:
126
127             break;
128         }
129
130         return legacyAddres;
131
132     }
133
134     public static MapRegister transformMapRegister(org.opendaylight.lispflowmapping.type.lisp.MapRegister legacyMapRegister) {
135
136         List<EidToLocatorRecord> listEidToLocatorRecord = new ArrayList<EidToLocatorRecord>();
137
138         // for (EidToLocatorRecord legacyRecord:
139         // legacyMapRegister.getEidToLocatorRecords()){
140         for (int i = 0; i < legacyMapRegister.getEidToLocatorRecords().size(); i++) {
141
142             listEidToLocatorRecord.add(transformEidToLocatorRecord(legacyMapRegister.getEidToLocatorRecords().get(i)));
143
144         }
145
146         MapRegisterBuilder builder = new MapRegisterBuilder();
147
148         MapRegister yangMapRegister = builder.setKeyId(legacyMapRegister.getKeyId()).setProxyMapReply(legacyMapRegister.isProxyMapReply())
149                 .setEidToLocatorRecord(listEidToLocatorRecord).setWantMapNotify(true).build();
150
151         return yangMapRegister;
152
153     }
154
155     public static EidToLocatorRecord transformEidToLocatorRecord(
156             org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord legacyEidToLocatorRecord) {
157
158         List<LocatorRecord> listLocatorRecord = new ArrayList<LocatorRecord>();
159
160         for (int j = 0; j < legacyEidToLocatorRecord.getLocators().size(); j++) {
161
162             org.opendaylight.lispflowmapping.type.lisp.LocatorRecord legacyLocatorRecord = legacyEidToLocatorRecord.getLocators().get(j);
163
164             LispAddressContainer rloc = transformLispAddress(legacyLocatorRecord.getLocator());
165
166             LocatorRecordBuilder locatorRecordBuilder = new LocatorRecordBuilder();
167
168             LocatorRecord locatorRecord = locatorRecordBuilder.setLispAddressContainer((LispAddressContainer) rloc)
169                     .setLocalLocator(legacyLocatorRecord.isLocalLocator()).setPriority((short) legacyLocatorRecord.getPriority())
170                     .setWeight((short) legacyLocatorRecord.getWeight()).setMulticastPriority((short) legacyLocatorRecord.getMulticastPriority())
171                     .setMulticastWeight((short) legacyLocatorRecord.getMulticastWeight()).setRlocProbed(legacyLocatorRecord.isRlocProbed())
172                     .setRouted(legacyLocatorRecord.isRouted()).build();
173
174             listLocatorRecord.add(locatorRecord);
175         }
176
177         LispAddressContainer eid = transformLispAddress(legacyEidToLocatorRecord.getPrefix());
178         EidToLocatorRecordBuilder eidToLocatorRecordBuilder = new EidToLocatorRecordBuilder();
179         EidToLocatorRecord eidToLocatorRecord = eidToLocatorRecordBuilder.setLispAddressContainer((LispAddressContainer) eid)
180                 .setAction(Action.forValue(legacyEidToLocatorRecord.getAction().getCode()))
181                 .setAuthoritative(legacyEidToLocatorRecord.isAuthoritative()).setMaskLength((short) legacyEidToLocatorRecord.getMaskLength())
182                 .setRecordTtl(legacyEidToLocatorRecord.getRecordTtl()).setLocatorRecord(listLocatorRecord).build();
183         return eidToLocatorRecord;
184     }
185
186     public static org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord reTransformEidToLocatorRecord(EidToLocatorRecord eidToLocatorRecord) {
187
188         org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord legacyRecord = new org.opendaylight.lispflowmapping.type.lisp.EidToLocatorRecord();
189
190         for (int j = 0; j < eidToLocatorRecord.getLocatorRecord().size(); j++) {
191
192             LocatorRecord locatorRecord = eidToLocatorRecord.getLocatorRecord().get(j);
193
194             org.opendaylight.lispflowmapping.type.lisp.LocatorRecord legacyLocatorRecord = new org.opendaylight.lispflowmapping.type.lisp.LocatorRecord();
195
196             LispAddressContainer rloc = locatorRecord.getLispAddressContainer();
197
198             legacyLocatorRecord.setLocator(YangTransformerNB.transformToLispAddress(rloc));
199
200             legacyLocatorRecord.setLocalLocator(legacyLocatorRecord.isLocalLocator()).setPriority((byte) legacyLocatorRecord.getPriority())
201                     .setWeight((byte) legacyLocatorRecord.getWeight()).setMulticastPriority((byte) legacyLocatorRecord.getMulticastPriority())
202                     .setMulticastWeight((byte) legacyLocatorRecord.getMulticastWeight()).setRlocProbed(legacyLocatorRecord.isRlocProbed())
203                     .setRouted(legacyLocatorRecord.isRouted());
204
205             legacyRecord.addLocator(legacyLocatorRecord);
206         }
207
208         LispAddress eid = transformToLispAddress(eidToLocatorRecord.getLispAddressContainer());
209         legacyRecord.setPrefix(eid).setAction(MapReplyAction.valueOf(eidToLocatorRecord.getAction().getIntValue()))
210                 .setAuthoritative(eidToLocatorRecord.isAuthoritative()).setMaskLength((short) eidToLocatorRecord.getMaskLength())
211                 .setRecordTtl(eidToLocatorRecord.getRecordTtl());
212         return legacyRecord;
213     }
214
215     public static MapRequest transformMapRequest(org.opendaylight.lispflowmapping.type.lisp.MapRequest legacyMapRequest) {
216
217         MapRequestBuilder builder = new MapRequestBuilder();
218         builder.setAuthoritative(legacyMapRequest.isAuthoritative());
219         builder.setMapDataPresent(legacyMapRequest.isMapDataPresent());
220         builder.setPitr(legacyMapRequest.isPitr());
221         builder.setProbe(legacyMapRequest.isProbe());
222         builder.setSmr(legacyMapRequest.isSmr());
223         builder.setSmrInvoked(legacyMapRequest.isSmrInvoked());
224
225         builder.setEidRecord(new ArrayList<org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.eidrecords.EidRecord>());
226         for (EidRecord record : legacyMapRequest.getEids()) {
227             LispAddressContainer container = transformLispAddress(record.getPrefix());
228             builder.getEidRecord().add(
229
230             new EidRecordBuilder().setMask((short) record.getMaskLength()).setLispAddressContainer(container).build());
231         }
232
233         builder.setItrRloc(new ArrayList<ItrRloc>());
234         for (LispAddress itr : legacyMapRequest.getItrRlocs()) {
235             builder.getItrRloc().add(new ItrRlocBuilder().setLispAddressContainer(transformLispAddress(itr)).build());
236         }
237
238         builder.setMapReply(null);
239         builder.setNonce(legacyMapRequest.getNonce());
240         if (legacyMapRequest.getSourceEid() != null) {
241             builder.setSourceEid(new SourceEidBuilder().setLispAddressContainer(transformLispAddress(legacyMapRequest.getSourceEid())).build());
242         }
243         return builder.build();
244
245     }
246
247 }