Merge "Switch IP prefix (de)serialization to binary"
[lispflowmapping.git] / mappingservice / lisp-proto / src / main / java / org / opendaylight / lispflowmapping / lisp / serializer / address / factory / LispAddressSerializerFactory.java
1 /*
2  * Copyright (c) 2015 Cisco Systems, Inc.  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 package org.opendaylight.lispflowmapping.lisp.serializer.address.factory;
9
10 import java.util.HashMap;
11 import java.util.Map;
12
13 import org.opendaylight.lispflowmapping.lisp.serializer.address.AfiListSerializer;
14 import org.opendaylight.lispflowmapping.lisp.serializer.address.ApplicationDataSerializer;
15 import org.opendaylight.lispflowmapping.lisp.serializer.address.DistinguishedNameSerializer;
16 import org.opendaylight.lispflowmapping.lisp.serializer.address.ExplicitLocatorPathSerializer;
17 import org.opendaylight.lispflowmapping.lisp.serializer.address.InstanceIdSerializer;
18 import org.opendaylight.lispflowmapping.lisp.serializer.address.Ipv4BinarySerializer;
19 import org.opendaylight.lispflowmapping.lisp.serializer.address.Ipv4PrefixBinarySerializer;
20 import org.opendaylight.lispflowmapping.lisp.serializer.address.Ipv4PrefixSerializer;
21 import org.opendaylight.lispflowmapping.lisp.serializer.address.Ipv6BinarySerializer;
22 import org.opendaylight.lispflowmapping.lisp.serializer.address.Ipv6PrefixBinarySerializer;
23 import org.opendaylight.lispflowmapping.lisp.serializer.address.Ipv6PrefixSerializer;
24 import org.opendaylight.lispflowmapping.lisp.serializer.address.Ipv6Serializer;
25 import org.opendaylight.lispflowmapping.lisp.serializer.address.KeyValueAddressSerializer;
26 import org.opendaylight.lispflowmapping.lisp.serializer.address.LcafSerializer;
27 import org.opendaylight.lispflowmapping.lisp.serializer.address.LispAddressSerializer;
28 import org.opendaylight.lispflowmapping.lisp.serializer.address.Ipv4Serializer;
29 import org.opendaylight.lispflowmapping.lisp.serializer.address.MacSerializer;
30 import org.opendaylight.lispflowmapping.lisp.serializer.address.NoAddressSerializer;
31 import org.opendaylight.lispflowmapping.lisp.serializer.address.ServicePathSerializer;
32 import org.opendaylight.lispflowmapping.lisp.serializer.address.SourceDestKeySerializer;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.AfiListLcaf;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ApplicationDataLcaf;
35 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameAfi;
36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ExplicitLocatorPathLcaf;
37 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.InstanceIdLcaf;
38 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4Afi;
39 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4PrefixAfi;
40 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6Afi;
41 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6PrefixAfi;
42 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.KeyValueAddressLcaf;
43 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Lcaf;
44 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddressFamily;
45 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.MacAfi;
46 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.NoAddressAfi;
47 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ServicePathLcaf;
48 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SourceDestKeyLcaf;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.Ipv4BinaryAfi;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.Ipv4PrefixBinaryAfi;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.Ipv6BinaryAfi;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.Ipv6PrefixBinaryAfi;
53
54 /**
55  * Factory for LispAddress (de)serializers
56  *
57  * @author Lorand Jakab
58  *
59  */
60 public final class LispAddressSerializerFactory {
61     private static Map<Class<? extends LispAddressFamily>, LispAddressSerializer> addressTypeToSerializerMap;
62
63     // Class should not be instantiated
64     private LispAddressSerializerFactory() {
65     }
66
67     private static void initializeMap() {
68         addressTypeToSerializerMap = new HashMap<Class<? extends LispAddressFamily>, LispAddressSerializer>();
69         addressTypeToSerializerMap.put(NoAddressAfi.class, NoAddressSerializer.getInstance());
70         addressTypeToSerializerMap.put(Ipv4Afi.class, Ipv4Serializer.getInstance());
71         addressTypeToSerializerMap.put(Ipv4BinaryAfi.class, Ipv4BinarySerializer.getInstance());
72         addressTypeToSerializerMap.put(Ipv4PrefixAfi.class, Ipv4PrefixSerializer.getInstance());
73         addressTypeToSerializerMap.put(Ipv4PrefixBinaryAfi.class, Ipv4PrefixBinarySerializer.getInstance());
74         addressTypeToSerializerMap.put(Ipv6Afi.class, Ipv6Serializer.getInstance());
75         addressTypeToSerializerMap.put(Ipv6BinaryAfi.class, Ipv6BinarySerializer.getInstance());
76         addressTypeToSerializerMap.put(Ipv6PrefixAfi.class, Ipv6PrefixSerializer.getInstance());
77         addressTypeToSerializerMap.put(Ipv6PrefixBinaryAfi.class, Ipv6PrefixBinarySerializer.getInstance());
78         addressTypeToSerializerMap.put(MacAfi.class, MacSerializer.getInstance());
79         addressTypeToSerializerMap.put(DistinguishedNameAfi.class, DistinguishedNameSerializer.getInstance());
80         addressTypeToSerializerMap.put(Lcaf.class, LcafSerializer.getInstance());
81         addressTypeToSerializerMap.put(AfiListLcaf.class, AfiListSerializer.getInstance());
82         addressTypeToSerializerMap.put(InstanceIdLcaf.class, InstanceIdSerializer.getInstance());
83         addressTypeToSerializerMap.put(ApplicationDataLcaf.class, ApplicationDataSerializer.getInstance());
84         addressTypeToSerializerMap.put(ExplicitLocatorPathLcaf.class, ExplicitLocatorPathSerializer.getInstance());
85         addressTypeToSerializerMap.put(SourceDestKeyLcaf.class, SourceDestKeySerializer.getInstance());
86         addressTypeToSerializerMap.put(KeyValueAddressLcaf.class, KeyValueAddressSerializer.getInstance());
87         addressTypeToSerializerMap.put(ServicePathLcaf.class, ServicePathSerializer.getInstance());
88     }
89
90     public static LispAddressSerializer getSerializer(Class<? extends LispAddressFamily> clazz) {
91         if (addressTypeToSerializerMap == null) {
92             initializeMap();
93         }
94         return addressTypeToSerializerMap.get(clazz);
95     }
96 }