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.Collections;
12 import java.util.List;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.HelloElementType;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.BarrierInput;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.BarrierInputBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloInput;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloInputBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.hello.Elements;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.hello.ElementsBuilder;
26 public abstract class MessageFactory {
31 * @return HelloInput without elements
33 public static HelloInput createHelloInput(short helloVersion, long helloXid) {
34 return createHelloInput(helloVersion, helloXid, null);
38 * @param highestVersion
40 * @return builder with prepared header
42 private static HelloInputBuilder prepareHelloInputBuilder(
43 short highestVersion, long xid) {
44 HelloInputBuilder helloInputbuilder = new HelloInputBuilder();
45 helloInputbuilder.setVersion(highestVersion);
46 helloInputbuilder.setXid(xid);
47 return helloInputbuilder;
54 * @return HelloInput with elements (version bitmap)
56 public static HelloInput createHelloInput(short helloVersion, long helloXid, List<Short> versionOrder) {
57 HelloInputBuilder helloInputbuilder = prepareHelloInputBuilder(helloVersion, helloXid);
58 if (versionOrder != null) {
60 ElementsBuilder elementsBuilder = new ElementsBuilder();
61 elementsBuilder.setType(HelloElementType.VERSIONBITMAP);
62 int resultVersionListSize = 0;
63 if (!versionOrder.isEmpty()) {
64 resultVersionListSize = versionOrder.get(0) + 1;
66 List<Boolean> booleanList = new ArrayList<>(resultVersionListSize);
68 int versionOrderIndex = versionOrder.size() - 1;
70 while (versionOrderIndex >= 0) {
71 short version = versionOrder.get(versionOrderIndex);
72 if (version == booleanList.size()) {
73 booleanList.add(true);
76 booleanList.add(false);
80 elementsBuilder.setVersionBitmap(booleanList);
82 List<Elements> elementList = Collections.singletonList(elementsBuilder.build());
83 helloInputbuilder.setElements(elementList);
85 return helloInputbuilder.build();
90 * @return version boolean list
92 public static List<Boolean> digVersions(List<Elements> elements) {
93 List<Boolean> result = null;
94 if (elements != null && !elements.isEmpty()) {
95 for (Elements elm : elements) {
96 if (HelloElementType.VERSIONBITMAP.equals(elm.getType())) {
97 result = elm.getVersionBitmap();
107 * @return barrier message
109 public static BarrierInput createBarrier(short ofVersion, long ofXid) {
110 BarrierInputBuilder barrierInput = new BarrierInputBuilder();
111 barrierInput.setVersion(ofVersion);
112 barrierInput.setXid(ofXid);
113 return barrierInput.build();
120 // * @param messageService
121 // * @return barrier result
123 // public static Future<RpcResult<BarrierOutput>> sendBarrier(
124 // SwitchConnectionDistinguisher cookie, SessionContext session,
125 // IMessageDispatchService messageService) {
126 // BarrierInputBuilder barrierInput = new BarrierInputBuilder();
127 // barrierInput.setVersion(session.getFeatures().getVersion());
128 // barrierInput.setXid(session.getNextXid());
129 // return messageService.barrier(barrierInput.build(), cookie);