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.impl.util;
10 import java.util.ArrayList;
11 import java.util.Collections;
12 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.HelloInput;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloInputBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.hello.Elements;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.hello.ElementsBuilder;
19 public abstract class MessageFactory {
22 * Creates hello input.
24 * @param helloVersion openflow version for hello message to send to switch
25 * @param helloXid transaction id for hello message
26 * @return HelloInput without elements
28 public static HelloInput createHelloInput(short helloVersion, long helloXid) {
29 return createHelloInput(helloVersion, helloXid, null);
33 * Creates hello input.
35 * @param helloVersion openflow version for hello message to send to switch
36 * @param helloXid transaction id for hello message
37 * @param versionOrder list of openflow version in order
38 * @return HelloInput with elements (version bitmap)
40 public static HelloInput createHelloInput(short helloVersion, long helloXid, List<Short> versionOrder) {
41 HelloInputBuilder helloInputbuilder = prepareHelloInputBuilder(helloVersion, helloXid);
42 if (versionOrder != null) {
44 ElementsBuilder elementsBuilder = new ElementsBuilder();
45 elementsBuilder.setType(HelloElementType.VERSIONBITMAP);
46 int resultVersionListSize = 0;
47 if (!versionOrder.isEmpty()) {
48 resultVersionListSize = versionOrder.get(0) + 1;
50 List<Boolean> booleanList = new ArrayList<>(resultVersionListSize);
52 int versionOrderIndex = versionOrder.size() - 1;
54 while (versionOrderIndex >= 0) {
55 short version = versionOrder.get(versionOrderIndex);
56 if (version == booleanList.size()) {
57 booleanList.add(true);
60 booleanList.add(false);
64 elementsBuilder.setVersionBitmap(booleanList);
66 List<Elements> elementList = Collections.singletonList(elementsBuilder.build());
67 helloInputbuilder.setElements(elementList);
69 return helloInputbuilder.build();
75 * @param highestVersion highest openflow version
76 * @param xid transaction id
77 * @return builder with prepared header
79 private static HelloInputBuilder prepareHelloInputBuilder(
80 short highestVersion, long xid) {
81 HelloInputBuilder helloInputbuilder = new HelloInputBuilder();
82 helloInputbuilder.setVersion(highestVersion);
83 helloInputbuilder.setXid(xid);
84 return helloInputbuilder;
90 * @param elements list of versions
91 * @return version boolean list
93 public static List<Boolean> digVersions(List<Elements> elements) {
94 List<Boolean> result = null;
95 if (elements != null && !elements.isEmpty()) {
96 for (Elements elm : elements) {
97 if (HelloElementType.VERSIONBITMAP.equals(elm.getType())) {
98 result = elm.getVersionBitmap();