Eliminate ByteBufWriteUtil.writeMedium()
[bgpcep.git] / bgp / extensions / evpn / src / main / java / org / opendaylight / protocol / bgp / evpn / impl / esi / types / MacParser.java
1 /*
2  * Copyright (c) 2016 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 package org.opendaylight.protocol.bgp.evpn.impl.esi.types;
9
10 import static com.google.common.base.Preconditions.checkArgument;
11 import static org.opendaylight.protocol.bgp.evpn.impl.esi.types.EsiModelUtil.extractSystmeMac;
12 import static org.opendaylight.protocol.bgp.evpn.impl.esi.types.EsiModelUtil.extractUint24LD;
13
14 import io.netty.buffer.ByteBuf;
15 import org.opendaylight.protocol.util.ByteArray;
16 import org.opendaylight.protocol.util.ByteBufUtils;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.IetfYangUtil;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev180329.EsiType;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev180329.esi.Esi;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev180329.esi.esi.MacAutoGeneratedCase;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev180329.esi.esi.MacAutoGeneratedCaseBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev180329.esi.esi.mac.auto.generated._case.MacAutoGenerated;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.evpn.rev180329.esi.esi.mac.auto.generated._case.MacAutoGeneratedBuilder;
24 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
25
26 final class MacParser extends AbstractEsiType {
27
28     @Override
29     public ByteBuf serializeBody(final Esi esi, final ByteBuf body) {
30         checkArgument(esi instanceof MacAutoGeneratedCase,
31             "Unknown esi instance. Passed %s. Needed MacAutoGeneratedCase.", esi.getClass());
32         final MacAutoGenerated macAuto = ((MacAutoGeneratedCase) esi).getMacAutoGenerated();
33         body.writeBytes(IetfYangUtil.INSTANCE.macAddressBytes(macAuto.getSystemMacAddress()));
34         body.writeMedium(macAuto.getLocalDiscriminator().getValue().intValue());
35         return body;
36     }
37
38     @Override
39     protected EsiType getType() {
40         return EsiType.MacAutoGenerated;
41     }
42
43     @Override
44     public Esi serializeEsi(final ContainerNode esi) {
45         return new MacAutoGeneratedCaseBuilder()
46                 .setMacAutoGenerated(new MacAutoGeneratedBuilder()
47                     .setSystemMacAddress(extractSystmeMac(esi))
48                     .setLocalDiscriminator(extractUint24LD(esi))
49                     .build())
50                 .build();
51     }
52
53     @Override
54     public Esi parseEsi(final ByteBuf buffer) {
55         return new MacAutoGeneratedCaseBuilder()
56                 .setMacAutoGenerated(new MacAutoGeneratedBuilder()
57                     .setSystemMacAddress(IetfYangUtil.INSTANCE.macAddressFor(
58                         ByteArray.readBytes(buffer, MAC_ADDRESS_LENGTH)))
59                     .setLocalDiscriminator(ByteBufUtils.readUint24(buffer))
60                     .build())
61                 .build();
62     }
63 }