Merge commit 'refs/changes/20/18320/1' of ssh://git.opendaylight.org:29418/alto
[alto.git] / alto-commons / src / main / java / org / opendaylight / alto / commons / types / convertor / RFC2ModelConvertor.java
1 package org.opendaylight.alto.commons.types.convertor;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.Map;
6 import java.util.Arrays;
7
8 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
9 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefixBuilder;
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.network.map.MapBuilder;
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.network.map.MapKey;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.resources.network.maps.NetworkMapBuilder;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.types.rev150404.EndpointAddressType;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.types.rev150404.PidName;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.types.rev150404.ResourceId;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.types.rev150404.TagString;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.types.rev150404.endpoint.address.group.EndpointAddressGroup;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.alto.service.types.rev150404.endpoint.address.group.EndpointAddressGroupBuilder;
19
20 import org.opendaylight.alto.commons.types.rfc7285.RFC7285Type;
21 import org.opendaylight.alto.commons.types.model150404.ModelType;
22
23 public class RFC2ModelConvertor {
24
25     public static final String IPV4 = "ipv4";
26     public static final String IPV6 = "ipv6";
27
28     public ModelType.NetworkMap convert(RFC7285Type.NetworkMap nmap) {
29         ResourceId rid = new ResourceId(nmap.meta.vtag.rid);
30         TagString tag = new TagString(nmap.meta.vtag.tag);
31         List<org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.network.map.Map> mapData
32                 = new ArrayList<org.opendaylight.yang.gen.v1.urn.opendaylight.alto.rev150404.network.map.Map>(convert(nmap.map));
33         ModelType.NetworkMap result = (ModelType.NetworkMap)(new NetworkMapBuilder()
34                                         .setResourceId(rid)
35                                         .setTag(tag)
36                                         .setMap(mapData).build());
37         return result;
38     }
39
40     public List<ModelType.NetworkMapData> convert(Map<String, RFC7285Type.Endpoint.AddressGroup> mapData) {
41         List<ModelType.NetworkMapData> result = new ArrayList<ModelType.NetworkMapData>();
42         for (Map.Entry<String, RFC7285Type.Endpoint.AddressGroup> entry: mapData.entrySet()) {
43             String pid = entry.getKey();
44             RFC7285Type.Endpoint.AddressGroup addresses = entry.getValue();
45
46             result.add(convert(pid, addresses));
47         }
48         return result;
49     }
50
51     public ModelType.NetworkMapData convert(String pid, RFC7285Type.Endpoint.AddressGroup data) {
52         PidName _pid = new PidName(pid);
53         return (ModelType.NetworkMapData)new MapBuilder()
54                     .setPid(_pid)
55                     .setKey(new MapKey(_pid))
56                     .setEndpointAddressGroup(convert(data))
57                     .build();
58     }
59
60     public List<EndpointAddressGroup> convert(RFC7285Type.Endpoint.AddressGroup addressGroup) {
61         EndpointAddressGroup result[] = {
62             buildAddressGroup(EndpointAddressType.Enumeration.Ipv4, str2IpPrefix(addressGroup.ipv4)),
63             buildAddressGroup(EndpointAddressType.Enumeration.Ipv6, str2IpPrefix(addressGroup.ipv6)),
64         };
65
66         return Arrays.asList(result);
67     }
68
69     private EndpointAddressGroup buildAddressGroup(EndpointAddressType.Enumeration type, List<IpPrefix> prefixes) {
70         EndpointAddressType _type = new EndpointAddressType(type);
71         return new EndpointAddressGroupBuilder()
72                     .setAddressType(_type)
73                     .setEndpointPrefix(prefixes).build();
74     }
75
76     private List<IpPrefix> str2IpPrefix(List<String> ipList) {
77         List<IpPrefix> prefixList = new ArrayList<IpPrefix>();
78         for (String ip : ipList) {
79             prefixList.add(IpPrefixBuilder.getDefaultInstance(ip));
80         }
81         return prefixList;
82     }
83
84 }