Clean up use of deprecated methods
[openflowplugin.git] / extension / openflowjava-extension-nicira / src / main / java / org / opendaylight / openflowjava / nx / codec / match / AbstractExperimenterMatchCodec.java
1 /*
2  * Copyright (c) 2018 SUSE LINUX GmbH.  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.openflowjava.nx.codec.match;
10
11 import io.netty.buffer.ByteBuf;
12 import org.eclipse.jdt.annotation.NonNull;
13 import org.opendaylight.openflowjava.protocol.api.keys.MatchEntryDeserializerKey;
14 import org.opendaylight.openflowjava.protocol.api.keys.MatchEntrySerializerKey;
15 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
16 import org.opendaylight.openflowjava.protocol.api.util.OxmMatchConstants;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.oxm.container.match.entry.value.ExperimenterIdCase;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.oxm.container.match.entry.value.ExperimenterIdCaseBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.oxm.container.match.entry.value.experimenter.id._case.ExperimenterBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ExperimenterId;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.ExperimenterClass;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MatchField;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OxmClassBase;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntryBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.OfjAugNxExpMatch;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.OfjAugNxExpMatchBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.oxm.container.match.entry.value.experimenter.id._case.NxExpMatchEntryValue;
29 import org.opendaylight.yangtools.yang.common.Uint32;
30
31 public abstract class AbstractExperimenterMatchCodec extends AbstractMatchCodec {
32
33     protected static <F extends MatchField> MatchEntrySerializerKey<ExperimenterClass, F> createSerializerKey(
34             short version, Uint32 expId, Class<F> oxmField) {
35         MatchEntrySerializerKey<ExperimenterClass, F> key = new MatchEntrySerializerKey<>(
36                 version, ExperimenterClass.class, oxmField);
37         key.setExperimenterId(expId);
38         return key;
39     }
40
41     protected static MatchEntryDeserializerKey createDeserializerKey(
42             short version, Uint32 expId, int fieldCode) {
43         MatchEntryDeserializerKey key = new MatchEntryDeserializerKey(
44                 version, OxmMatchConstants.EXPERIMENTER_CLASS, fieldCode);
45         key.setExperimenterId(expId);
46         return key;
47     }
48
49     @Override
50     public void serialize(MatchEntry input, ByteBuf outBuffer) {
51         // serializes standard header + experimenterId
52         serializeHeader(input, outBuffer);
53
54         ExperimenterIdCase experimenterIdCase = (ExperimenterIdCase) input.getMatchEntryValue();
55         OfjAugNxExpMatch ofjAugNxExpMatch = experimenterIdCase.augmentation(OfjAugNxExpMatch.class);
56         NxExpMatchEntryValue nxExpMatchEntryValue = ofjAugNxExpMatch.getNxExpMatchEntryValue();
57
58         serializeValue(nxExpMatchEntryValue, input.isHasMask(), outBuffer);
59     }
60
61     protected abstract void serializeValue(NxExpMatchEntryValue value, boolean hasMask, ByteBuf outBuffer);
62
63     @Override
64     public MatchEntry deserialize(ByteBuf message) {
65         final MatchEntryBuilder matchEntryBuilder = deserializeHeaderToBuilder(message);
66
67         // skip experimenter Id
68         message.skipBytes(EncodeConstants.SIZE_OF_INT_IN_BYTES);
69
70         ExperimenterIdCaseBuilder expCaseBuilder = new ExperimenterIdCaseBuilder();
71         ExperimenterBuilder expBuilder = new ExperimenterBuilder();
72         expBuilder.setExperimenter(new ExperimenterId(getExperimenterId()));
73         expCaseBuilder.setExperimenter(expBuilder.build());
74
75         final NxExpMatchEntryValue value = deserializeValue(message, matchEntryBuilder.isHasMask());
76
77         return buildMatchEntry(matchEntryBuilder, expCaseBuilder, value);
78     }
79
80     protected abstract NxExpMatchEntryValue deserializeValue(ByteBuf message, boolean hasMask);
81
82     private static MatchEntry buildMatchEntry(MatchEntryBuilder matchEntryBuilder,
83                                                 ExperimenterIdCaseBuilder experimenterIdCaseBuilder,
84                                                 NxExpMatchEntryValue nxExpMatchEntryValue) {
85         return matchEntryBuilder
86                 .setMatchEntryValue(experimenterIdCaseBuilder.addAugmentation(new OfjAugNxExpMatchBuilder()
87                     .setNxExpMatchEntryValue(nxExpMatchEntryValue)
88                     .build())
89                     .build())
90                 .build();
91     }
92
93     @Override
94     public void serializeHeader(NxmHeader input, ByteBuf outBuffer) {
95         outBuffer.writeLong(input.toLong());
96     }
97
98     @Override
99     protected NxmHeader buildHeader(boolean hasMask) {
100         return new NxmHeader(
101                 getNxmFieldCode(),
102                 hasMask,
103                 EncodeConstants.SIZE_OF_INT_IN_BYTES + (hasMask ? getValueLength() * 2 : getValueLength()),
104                 getExperimenterId().longValue());
105     }
106
107     @Override
108     public Class<? extends OxmClassBase> getOxmClass() {
109         return ExperimenterClass.class;
110     }
111
112     @Override
113     public int getOxmClassCode() {
114         return OxmMatchConstants.EXPERIMENTER_CLASS;
115     }
116
117     protected abstract @NonNull Uint32 getExperimenterId();
118
119 }