4b381d3b9c086343317f841522a1f3c91c6ae1a6
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / serialization / instruction / AbstractActionInstructionSerializer.java
1 /*\r
2  * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 \r
9 package org.opendaylight.openflowjava.protocol.impl.serialization.instruction;\r
10 \r
11 import io.netty.buffer.ByteBuf;\r
12 \r
13 import java.util.List;\r
14 \r
15 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;\r
16 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistryInjector;\r
17 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
18 import org.opendaylight.openflowjava.protocol.impl.util.TypeKeyMaker;\r
19 import org.opendaylight.openflowjava.protocol.impl.util.TypeKeyMakerFactory;\r
20 import org.opendaylight.openflowjava.protocol.impl.util.InstructionConstants;\r
21 import org.opendaylight.openflowjava.protocol.impl.util.ListSerializer;\r
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ActionsInstruction;\r
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;\r
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;\r
25 \r
26 /**\r
27  * @author michal.polkorab\r
28  *\r
29  */\r
30 public abstract class AbstractActionInstructionSerializer extends AbstractInstructionSerializer\r
31         implements SerializerRegistryInjector {\r
32 \r
33     private static final TypeKeyMaker<Action> ACTION_KEY_MAKER =\r
34             TypeKeyMakerFactory.createActionKeyMaker(EncodeConstants.OF13_VERSION_ID);\r
35 \r
36     private SerializerRegistry registry;\r
37 \r
38     @Override\r
39     public void serialize(final Instruction instruction, final ByteBuf outBuffer) {\r
40         int startIndex = outBuffer.writerIndex();\r
41         outBuffer.writeShort(getType());\r
42         if (instruction.getAugmentation(ActionsInstruction.class) != null) {\r
43             List<Action> actions = instruction.getAugmentation(ActionsInstruction.class).getAction();\r
44             int lengthIndex = outBuffer.writerIndex();\r
45             outBuffer.writeShort(EncodeConstants.EMPTY_LENGTH);\r
46             outBuffer.writeZero(InstructionConstants.PADDING_IN_ACTIONS_INSTRUCTION);\r
47             ListSerializer.serializeList(actions, ACTION_KEY_MAKER, getRegistry(), outBuffer);\r
48             int instructionLength = outBuffer.writerIndex() - startIndex;\r
49             outBuffer.setShort(lengthIndex, instructionLength);\r
50         } else {\r
51             outBuffer.writeShort(InstructionConstants.STANDARD_INSTRUCTION_LENGTH);\r
52             outBuffer.writeZero(InstructionConstants.PADDING_IN_ACTIONS_INSTRUCTION);\r
53         }\r
54     }\r
55 \r
56     protected SerializerRegistry getRegistry() {\r
57         return registry;\r
58     }\r
59 \r
60     @Override\r
61     public void injectSerializerRegistry(final SerializerRegistry serializerRegistry) {\r
62         registry = serializerRegistry;\r
63     }\r
64 }\r