X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=mdsalutil%2Fmdsalutil-api%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fgenius%2Fmdsalutil%2FMDSALUtil.java;h=e87d0f8a89ce819c268c45fc3c789252b060e350;hb=fe2f58ba565f247e800b9980f66349837b9d6f83;hp=eea71a125dc5b066023d5e7be15df225483411a0;hpb=3f9e5582f4746f2e9518cab6dd667da12216c80c;p=genius.git diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/MDSALUtil.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/MDSALUtil.java index eea71a125..e87d0f8a8 100644 --- a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/MDSALUtil.java +++ b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/genius/mdsalutil/MDSALUtil.java @@ -10,8 +10,10 @@ package org.opendaylight.genius.mdsalutil; import com.google.common.base.Optional; import com.google.common.net.InetAddresses; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.math.BigInteger; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -93,7 +95,8 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdenti import org.slf4j.Logger; import org.slf4j.LoggerFactory; -@SuppressWarnings("checkstyle:AbbreviationAsWordInName") +// This class needs to be mocked +@SuppressWarnings({ "checkstyle:AbbreviationAsWordInName", "checkstyle:FinalClass" }) public class MDSALUtil { private static final Logger LOG = LoggerFactory.getLogger(MDSALUtil.class); @@ -110,23 +113,28 @@ public class MDSALUtil { new ArrayList<>()).build(); private static final Match EMPTY_MATCHES = new MatchBuilder().build(); + private MDSALUtil() { } + public static FlowEntity buildFlowEntity(BigInteger dpnId, short tableId, String flowId, int priority, String flowName, int idleTimeOut, int hardTimeOut, BigInteger cookie, List listMatchInfoBase, List listInstructionInfo) { - FlowEntity flowEntity = new FlowEntity(dpnId); - - flowEntity.setTableId(tableId); - flowEntity.setFlowId(flowId); - flowEntity.setPriority(priority); - flowEntity.setFlowName(flowName); - flowEntity.setIdleTimeOut(idleTimeOut); - flowEntity.setHardTimeOut(hardTimeOut); - flowEntity.setCookie(cookie); - flowEntity.setMatchInfoList(listMatchInfoBase); - flowEntity.setInstructionInfoList(listInstructionInfo); - - return flowEntity; + FlowEntityBuilder builder = new FlowEntityBuilder() + .setDpnId(dpnId) + .setTableId(tableId) + .setFlowId(flowId) + .setPriority(priority) + .setFlowName(flowName) + .setIdleTimeOut(idleTimeOut) + .setHardTimeOut(hardTimeOut) + .setCookie(cookie); + if (listMatchInfoBase != null) { + builder.addAllMatchInfoList(listMatchInfoBase); + } + if (listInstructionInfo != null) { + builder.addAllInstructionInfoList(listInstructionInfo); + } + return builder.build(); } // TODO: CHECK IF THIS IS USED @@ -174,14 +182,13 @@ public class MDSALUtil { public static GroupEntity buildGroupEntity(BigInteger dpnId, long groupId, String groupName, GroupTypes groupType, List listBucketInfo) { - GroupEntity groupEntity = new GroupEntity(dpnId); - + GroupEntityBuilder groupEntity = new GroupEntityBuilder(); + groupEntity.setDpnId(dpnId); groupEntity.setGroupId(groupId); groupEntity.setGroupName(groupName); groupEntity.setGroupType(groupType); groupEntity.setBucketInfoList(listBucketInfo); - - return groupEntity; + return groupEntity.build(); } public static Group buildGroup(long groupId, String groupName, GroupTypes groupType, Buckets buckets) { @@ -348,38 +355,23 @@ public class MDSALUtil { return getNodeConnRef(NODE_PREFIX + SEPARATOR + dpId, port); } - public static NodeConnectorRef getNodeConnRef(String sNodeId, String port) { - String sNodeConnectorKey; - StringBuilder sbTmp; - NodeId nodeId; - NodeKey nodeKey; - NodeConnectorId nodeConnectorId; - NodeConnectorKey nodeConnectorKey; - InstanceIdentifierBuilder nodesInstanceIdentifierBuilder; - InstanceIdentifierBuilder nodeInstanceIdentifierBuilder; - InstanceIdentifierBuilder nodeConnectorInstanceIdentifierBuilder; - InstanceIdentifier nodeConnectorInstanceIdentifier; - NodeConnectorRef nodeConnectorRef; - - sbTmp = new StringBuilder(); - - sbTmp.append(sNodeId); - sbTmp.append(SEPARATOR); - sbTmp.append(port); - - sNodeConnectorKey = sbTmp.toString(); - nodeConnectorId = new NodeConnectorId(sNodeConnectorKey); - nodeConnectorKey = new NodeConnectorKey(nodeConnectorId); - - nodeId = new NodeId(sNodeId); - nodeKey = new NodeKey(nodeId); - - nodesInstanceIdentifierBuilder = InstanceIdentifier.builder(Nodes.class); - nodeInstanceIdentifierBuilder = nodesInstanceIdentifierBuilder.child(Node.class, nodeKey); - nodeConnectorInstanceIdentifierBuilder = nodeInstanceIdentifierBuilder.child( - NodeConnector.class, nodeConnectorKey); - nodeConnectorInstanceIdentifier = nodeConnectorInstanceIdentifierBuilder.toInstance(); - nodeConnectorRef = new NodeConnectorRef(nodeConnectorInstanceIdentifier); + public static NodeConnectorRef getNodeConnRef(String nodeId, String port) { + StringBuilder sb = new StringBuilder(); + sb.append(nodeId); + sb.append(SEPARATOR); + sb.append(port); + String nodeConnectorKeyAsString = sb.toString(); + NodeConnectorId nodeConnectorId = new NodeConnectorId(nodeConnectorKeyAsString); + NodeConnectorKey nodeConnectorKey = new NodeConnectorKey(nodeConnectorId); + + NodeKey nodeKey = new NodeKey(new NodeId(nodeId)); + InstanceIdentifierBuilder nodeInstanceIdentifierBuilder + = InstanceIdentifier.builder(Nodes.class).child(Node.class, nodeKey); + InstanceIdentifierBuilder nodeConnectorInstanceIdentifierBuilder + = nodeInstanceIdentifierBuilder.child(NodeConnector.class, nodeConnectorKey); + InstanceIdentifier nodeConnectorInstanceIdentifier + = nodeConnectorInstanceIdentifierBuilder.toInstance(); + NodeConnectorRef nodeConnectorRef = new NodeConnectorRef(nodeConnectorInstanceIdentifier); return nodeConnectorRef; } @@ -388,7 +380,7 @@ public class MDSALUtil { } public static BigInteger getDpnIdFromNodeName(String mdsalNodeName) { - String dpId = mdsalNodeName.substring(mdsalNodeName.lastIndexOf(":") + 1); + String dpId = mdsalNodeName.substring(mdsalNodeName.lastIndexOf(':') + 1); return new BigInteger(dpId); } @@ -396,8 +388,8 @@ public class MDSALUtil { return getOfPortNumberFromPortName(nodeConnectorId.getValue()); } - public static long getOfPortNumberFromPortName(String sMdsalPortName) { - String portNumber = sMdsalPortName.substring(sMdsalPortName.lastIndexOf(":") + 1); + public static long getOfPortNumberFromPortName(String mdsalPortName) { + String portNumber = mdsalPortName.substring(mdsalPortName.lastIndexOf(':') + 1); return Long.parseLong(portNumber); } @@ -407,8 +399,8 @@ public class MDSALUtil { } try { String ofPortName = nodeConnectorId.getValue(); - return Long.parseLong(ofPortName.substring(ofPortName.indexOf(":") + 1, - ofPortName.lastIndexOf(":"))); + return Long.parseLong(ofPortName.substring(ofPortName.indexOf(':') + 1, + ofPortName.lastIndexOf(':'))); } catch (NumberFormatException | IndexOutOfBoundsException e) { LOG.error("NodeConnectorId not of expected format openflow:dpnid:portnum"); return -1; @@ -433,8 +425,17 @@ public class MDSALUtil { return buildApplyActionsInstruction(listAction, instructionKey); } - public static Instruction buildAndGetSetReg6ActionInstruction(int actionKey, int instructionKey, - int startOffSet, int endOffSet, long value) { + + /** + * Create action to set REG6 to the given value. + * + * @param actionKey the action key. + * @param startOffSet the start offset. + * @param endOffSet the end offset. + * @param value the value. + * @return the action. + */ + public static Action createSetReg6Action(int actionKey, int startOffSet, int endOffSet, long value) { NxRegLoadBuilder nxRegLoadBuilder = new NxRegLoadBuilder(); Dst dst = new DstBuilder() .setDstChoice(new DstNxRegCaseBuilder().setNxReg(NxmNxReg6.class).build()) @@ -447,9 +448,14 @@ public class MDSALUtil { ab.setAction(new NxActionRegLoadNodesNodeTableFlowApplyActionsCaseBuilder() .setNxRegLoad(nxRegLoadBuilder.build()).build()); ab.setKey(new ActionKey(actionKey)); - List listAction = new ArrayList<>(); - listAction.add(ab.build()); - return buildApplyActionsInstruction(listAction, instructionKey); + return ab.build(); + } + + public static Instruction buildAndGetSetReg6ActionInstruction(int actionKey, int instructionKey, + int startOffSet, int endOffSet, long value) { + return buildApplyActionsInstruction( + Collections.singletonList(createSetReg6Action(actionKey, startOffSet, endOffSet, value)), + instructionKey); } public static Instruction buildApplyActionsInstruction(List actions) { @@ -467,15 +473,30 @@ public class MDSALUtil { } public static Instruction buildWriteActionsInstruction(List actions) { + return buildWriteActionsInstruction(actions, 0); + } + + /** + * Build write actions instruction with the given actions and key. + * + * @param actions the actions. + * @param instructionKey the instruction key. + * @return the instruction. + */ + public static Instruction buildWriteActionsInstruction(List actions, int instructionKey) { WriteActions writeActions = new WriteActionsBuilder().setAction(actions).build(); WriteActionsCase writeActionsCase = new WriteActionsCaseBuilder().setWriteActions(writeActions).build(); InstructionBuilder instructionBuilder = new InstructionBuilder(); instructionBuilder.setInstruction(writeActionsCase); - instructionBuilder.setKey(new InstructionKey(0)); + instructionBuilder.setKey(new InstructionKey(instructionKey)); return instructionBuilder.build(); } + public static Instruction buildInstruction(Instruction instruction, int instructionKey) { + return new InstructionBuilder(instruction).setKey(new InstructionKey(instructionKey)).build(); + } + public static List buildInstructionsDrop() { return buildInstructionsDrop(0); } @@ -488,21 +509,17 @@ public class MDSALUtil { return mkInstructions; } - + /** + * Build write actions instruction with the given actions and key. + * + * @param listAction the actions. + * @param instructionKey the instruction key. + * @return the instruction. + * @deprecated Use buildWriteActionsInstruction + */ + @Deprecated public static Instruction getWriteActionsInstruction(List listAction, int instructionKey) { - WriteActions writeActions = new WriteActionsBuilder().setAction(listAction).build(); - WriteActionsCase writeActionsCase = new WriteActionsCaseBuilder().setWriteActions(writeActions).build(); - InstructionBuilder instructionBuilder = new InstructionBuilder(); - - instructionBuilder.setInstruction(writeActionsCase); - instructionBuilder.setKey(new InstructionKey(instructionKey)); - return instructionBuilder.build(); - } - - public static Action buildAction(int actionKey, int instruction) { - return new ActionBuilder().setAction( - new PopVlanActionCaseBuilder().setPopVlanAction(new PopVlanActionBuilder().build()).build()) - .setKey(new ActionKey(actionKey)).build(); + return buildWriteActionsInstruction(listAction, instructionKey); } public static Instruction buildAndGetWriteMetadaInstruction(BigInteger metadata, @@ -553,7 +570,8 @@ public class MDSALUtil { * Deprecated write. * * @deprecated Use - * {@link SingleTransactionDataBroker#syncWrite(DataBroker, LogicalDatastoreType, InstanceIdentifier, DataObject)} + * {@link SingleTransactionDataBroker#syncWrite( + * DataBroker, LogicalDatastoreType, InstanceIdentifier, DataObject)} */ @Deprecated public static void syncWrite(DataBroker broker, @@ -571,7 +589,8 @@ public class MDSALUtil { * Deprecated update. * * @deprecated Use - * {@link SingleTransactionDataBroker#syncUpdate(DataBroker, LogicalDatastoreType, InstanceIdentifier, DataObject)} + * {@link SingleTransactionDataBroker#syncUpdate( + * DataBroker, LogicalDatastoreType, InstanceIdentifier, DataObject)} */ @Deprecated public static void syncUpdate(DataBroker broker, @@ -602,6 +621,8 @@ public class MDSALUtil { } } + // "Consider returning a zero length array rather than null" - too late to change behavior plus it's deprecated. + @SuppressFBWarnings("PZLA_PREFER_ZERO_LENGTH_ARRAYS") public static byte[] getMacAddressForNodeConnector(DataBroker broker, InstanceIdentifier nodeConnectorId) { Optional optNc = MDSALDataStoreUtils.read(broker, @@ -617,7 +638,7 @@ public class MDSALUtil { public static NodeId getNodeIdFromNodeConnectorId(NodeConnectorId ncId) { return new NodeId(ncId.getValue().substring(0, - ncId.getValue().lastIndexOf(":"))); + ncId.getValue().lastIndexOf(':'))); } public static String getInterfaceName(NodeConnectorRef ref, DataBroker dataBroker) { @@ -628,14 +649,15 @@ public class MDSALUtil { .child(Node.class, new NodeKey(nodeId)) .child(NodeConnector.class, new NodeConnectorKey(nodeConnectorId)).build(); - return read(dataBroker, LogicalDatastoreType.OPERATIONAL, ncIdentifier).transform( - nc -> nc.getAugmentation(FlowCapableNodeConnector.class).getName()).orNull(); + return read(dataBroker, LogicalDatastoreType.OPERATIONAL, ncIdentifier).toJavaUtil().map( + nc -> nc.getAugmentation(FlowCapableNodeConnector.class)).map(FlowCapableNodeConnector::getName).orElse( + null); } public static NodeConnectorId getNodeConnectorId(DataBroker dataBroker, NodeConnectorRef ref) { - return ((Optional) read(dataBroker, LogicalDatastoreType.OPERATIONAL, ref.getValue())).transform( - NodeConnector::getId).orNull(); + return ((Optional) read(dataBroker, LogicalDatastoreType.OPERATIONAL, + ref.getValue())).toJavaUtil().map(NodeConnector::getId).orElse(null); } public static Action createNxOfInPortAction(final int actionKey, final int inPortVal) { @@ -655,5 +677,6 @@ public class MDSALUtil { new PopVlanActionCaseBuilder().setPopVlanAction(new PopVlanActionBuilder().build()).build()) .setKey(new ActionKey(actionKey)).setOrder(actionKey).build(); } + }