7c3cd04b7d2b8687d606f7f1641feba98fba47fb
[lispflowmapping.git] / mappingservice / lisp-proto / src / main / java / org / opendaylight / lispflowmapping / lisp / serializer / address / DistinguishedNameSerializer.java
1 /*
2  * Copyright (c) 2014 Contextream, 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 package org.opendaylight.lispflowmapping.lisp.serializer.address;
9
10 import java.nio.ByteBuffer;
11 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana.afn.safi.rev130704.AddressFamily;
12 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameAfi;
13 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.DistinguishedNameType;
14 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddress;
15 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.SimpleAddress;
16 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.DistinguishedName;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.DistinguishedNameBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.RlocBuilder;
22
23 public final class DistinguishedNameSerializer extends LispAddressSerializer {
24     private static final DistinguishedNameSerializer INSTANCE = new DistinguishedNameSerializer();
25
26     // Private constructor prevents instantiation from other classes
27     private DistinguishedNameSerializer() {
28     }
29
30     public static DistinguishedNameSerializer getInstance() {
31         return INSTANCE;
32     }
33
34     @Override
35     public int getAddressSize(LispAddress lispAddress) {
36         return ((DistinguishedName) lispAddress.getAddress()).getDistinguishedName().getValue().length() + 1;
37
38     }
39
40     @Override
41     public int getAddressSize(SimpleAddress simpleAddress) {
42         return simpleAddress.getDistinguishedNameType().getValue().length() + 1;
43
44     }
45
46     @Override
47     protected short getAfi() {
48         return (short) AddressFamily.DistinguishedName.getIntValue();
49     }
50
51     @Override
52     protected void serializeData(ByteBuffer buffer, LispAddress lispAddress) {
53         DistinguishedName distinguishedNameAddress = (DistinguishedName) lispAddress.getAddress();
54         buffer.put(distinguishedNameAddress.getDistinguishedName().getValue().getBytes());
55         buffer.put((byte) 0);
56     }
57
58     @Override
59     protected void serializeData(ByteBuffer buffer, SimpleAddress simpleAddress) {
60         buffer.put(simpleAddress.getDistinguishedNameType().getValue().getBytes());
61         buffer.put((byte) 0);
62     }
63
64     @Override
65     protected Eid deserializeEidData(ByteBuffer buffer, LispAddressSerializerContext ctx) {
66         EidBuilder eb = new EidBuilder();
67         eb.setAddressType(DistinguishedNameAfi.class);
68         eb.setVirtualNetworkId(getVni(ctx));
69         eb.setAddress(new DistinguishedNameBuilder().setDistinguishedName(deserializeData(buffer)).build());
70         return eb.build();
71     }
72
73     @Override
74     protected Rloc deserializeRlocData(ByteBuffer buffer) {
75         RlocBuilder rb = new RlocBuilder();
76         rb.setAddressType(DistinguishedNameAfi.class);
77         rb.setVirtualNetworkId(null);
78         rb.setAddress(new DistinguishedNameBuilder().setDistinguishedName(deserializeData(buffer)).build());
79         return rb.build();
80     }
81
82
83     @Override
84     protected SimpleAddress deserializeSimpleAddressData(ByteBuffer buffer, LispAddressSerializerContext ctx) {
85         return new SimpleAddress(deserializeData(buffer));
86     }
87
88     private DistinguishedNameType deserializeData(ByteBuffer buffer) {
89         StringBuilder sb = new StringBuilder();
90         byte character = buffer.get();
91         while (character != 0) {
92             sb.append((char) character);
93             character = buffer.get();
94         }
95         return new DistinguishedNameType(sb.toString());
96     }
97 }