d696d24ec442b5bb34ee747340caa07eab0ed905
[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.impl.util.ByteBufUtils;\r
18 import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;\r
19 import org.opendaylight.openflowjava.protocol.impl.util.EnhancedTypeKeyMakerFactory;\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 SerializerRegistry registry;\r
34 \r
35     @Override\r
36     public void serialize(Instruction instruction, ByteBuf outBuffer) {\r
37         int startIndex = outBuffer.writerIndex();\r
38         outBuffer.writeShort(getType());\r
39         if (instruction.getAugmentation(ActionsInstruction.class) != null) {\r
40             List<Action> actions = instruction.getAugmentation(ActionsInstruction.class).getAction();\r
41             int lengthIndex = outBuffer.writerIndex();\r
42             outBuffer.writeShort(EncodeConstants.EMPTY_LENGTH);\r
43             ByteBufUtils.padBuffer(InstructionConstants.PADDING_IN_ACTIONS_INSTRUCTION, outBuffer);\r
44             ListSerializer.serializeList(actions, EnhancedTypeKeyMakerFactory\r
45                     .createActionKeyMaker(EncodeConstants.OF13_VERSION_ID), getRegistry(), outBuffer);\r
46             int instructionLength = outBuffer.writerIndex() - startIndex;\r
47             outBuffer.setShort(lengthIndex, instructionLength);\r
48         } else {\r
49             outBuffer.writeShort(InstructionConstants.STANDARD_INSTRUCTION_LENGTH);\r
50             ByteBufUtils.padBuffer(InstructionConstants.PADDING_IN_ACTIONS_INSTRUCTION, outBuffer);\r
51         }\r
52     }\r
53 \r
54     protected SerializerRegistry getRegistry() {\r
55         return registry;\r
56     }\r
57 \r
58     @Override\r
59     public void injectSerializerRegistry(SerializerRegistry serializerRegistry) {\r
60         registry = serializerRegistry;\r
61     }\r
62 }\r