b2667611f463685a12b90a13aaae2c8b1639a28a
[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.util.ByteBufUtils;\r
18 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
19 import org.opendaylight.openflowjava.protocol.impl.util.EnhancedTypeKeyMaker;\r
20 import org.opendaylight.openflowjava.protocol.impl.util.EnhancedTypeKeyMakerFactory;\r
21 import org.opendaylight.openflowjava.protocol.impl.util.InstructionConstants;\r
22 import org.opendaylight.openflowjava.protocol.impl.util.ListSerializer;\r
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ActionsInstruction;\r
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;\r
26 \r
27 /**\r
28  * @author michal.polkorab\r
29  *\r
30  */\r
31 public abstract class AbstractActionInstructionSerializer extends AbstractInstructionSerializer\r
32         implements SerializerRegistryInjector {\r
33 \r
34     private static final EnhancedTypeKeyMaker<Action> ACTION_KEY_MAKER =\r
35             EnhancedTypeKeyMakerFactory.createActionKeyMaker(EncodeConstants.OF13_VERSION_ID);\r
36 \r
37     private SerializerRegistry registry;\r
38 \r
39     @Override\r
40     public void serialize(final Instruction instruction, final ByteBuf outBuffer) {\r
41         int startIndex = outBuffer.writerIndex();\r
42         outBuffer.writeShort(getType());\r
43         if (instruction.getAugmentation(ActionsInstruction.class) != null) {\r
44             List<Action> actions = instruction.getAugmentation(ActionsInstruction.class).getAction();\r
45             int lengthIndex = outBuffer.writerIndex();\r
46             outBuffer.writeShort(EncodeConstants.EMPTY_LENGTH);\r
47             ByteBufUtils.padBuffer(InstructionConstants.PADDING_IN_ACTIONS_INSTRUCTION, outBuffer);\r
48             ListSerializer.serializeList(actions, ACTION_KEY_MAKER, getRegistry(), outBuffer);\r
49             int instructionLength = outBuffer.writerIndex() - startIndex;\r
50             outBuffer.setShort(lengthIndex, instructionLength);\r
51         } else {\r
52             outBuffer.writeShort(InstructionConstants.STANDARD_INSTRUCTION_LENGTH);\r
53             ByteBufUtils.padBuffer(InstructionConstants.PADDING_IN_ACTIONS_INSTRUCTION, outBuffer);\r
54         }\r
55     }\r
56 \r
57     protected SerializerRegistry getRegistry() {\r
58         return registry;\r
59     }\r
60 \r
61     @Override\r
62     public void injectSerializerRegistry(final SerializerRegistry serializerRegistry) {\r
63         registry = serializerRegistry;\r
64     }\r
65 }\r