2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.openflowplugin.openflow.md.core;
10 import java.util.ArrayList;
11 import java.util.List;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.HelloElementType;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.BarrierInput;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.BarrierInputBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloInput;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloInputBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.hello.Elements;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.hello.ElementsBuilder;
25 public abstract class MessageFactory {
30 * @return HelloInput without elements
32 public static HelloInput createHelloInput(short helloVersion, long helloXid) {
33 return createHelloInput(helloVersion, helloXid, null);
37 * @param highestVersion
39 * @return builder with prepared header
41 private static HelloInputBuilder prepareHelloInputBuilder(
42 short highestVersion, long xid) {
43 HelloInputBuilder helloInputbuilder = new HelloInputBuilder();
44 helloInputbuilder.setVersion(highestVersion);
45 helloInputbuilder.setXid(xid);
46 return helloInputbuilder;
53 * @return HelloInput with elements (version bitmap)
55 public static HelloInput createHelloInput(short helloVersion, long helloXid, List<Short> versionOrder) {
56 HelloInputBuilder helloInputbuilder = prepareHelloInputBuilder(helloVersion, helloXid);
57 if (versionOrder != null) {
58 List<Elements> elementList = new ArrayList<>();
60 ElementsBuilder elementsBuilder = new ElementsBuilder();
61 elementsBuilder.setType(HelloElementType.VERSIONBITMAP);
62 List<Boolean> booleanList = new ArrayList<>();
64 int versionOrderIndex = versionOrder.size() - 1;
66 while (versionOrderIndex >= 0) {
67 short version = versionOrder.get(versionOrderIndex);
68 if (version == booleanList.size()) {
69 booleanList.add(true);
72 booleanList.add(false);
76 elementsBuilder.setVersionBitmap(booleanList);
77 elementList.add(elementsBuilder.build());
78 helloInputbuilder.setElements(elementList);
80 return helloInputbuilder.build();
85 * @return version boolean list
87 public static List<Boolean> digVersions(List<Elements> elements) {
88 List<Boolean> result = null;
89 if (elements != null && !elements.isEmpty()) {
90 for (Elements elm : elements) {
91 if (HelloElementType.VERSIONBITMAP.equals(elm.getType())) {
92 result = elm.getVersionBitmap();
102 * @return barrier message
104 public static BarrierInput createBarrier(short ofVersion, long ofXid) {
105 BarrierInputBuilder barrierInput = new BarrierInputBuilder();
106 barrierInput.setVersion(ofVersion);
107 barrierInput.setXid(ofXid);
108 return barrierInput.build();
115 // * @param messageService
116 // * @return barrier result
118 // public static Future<RpcResult<BarrierOutput>> sendBarrier(
119 // SwitchConnectionDistinguisher cookie, SessionContext session,
120 // IMessageDispatchService messageService) {
121 // BarrierInputBuilder barrierInput = new BarrierInputBuilder();
122 // barrierInput.setVersion(session.getFeatures().getVersion());
123 // barrierInput.setXid(session.getNextXid());
124 // return messageService.barrier(barrierInput.build(), cookie);