BUG 2661 - sonar issues in learning-switch 54/15454/2
authorJozef Gloncak <jgloncak@cisco.com>
Wed, 18 Feb 2015 07:24:35 +0000 (08:24 +0100)
committerJozef Gloncak <jgloncak@cisco.com>
Wed, 18 Feb 2015 09:29:55 +0000 (10:29 +0100)
Some of sonar issues in learning-switch artifact were solved.

Change-Id: I423136cb503c8d9922eb7064ab2bd3eddd24d411
Signed-off-by: Jozef Gloncak <jgloncak@cisco.com>
samples/learning-switch/src/main/java/org/opendaylight/openflowplugin/learningswitch/FlowCommitWrapper.java
samples/learning-switch/src/main/java/org/opendaylight/openflowplugin/learningswitch/FlowUtils.java
samples/learning-switch/src/main/java/org/opendaylight/openflowplugin/learningswitch/InstanceIdentifierUtils.java
samples/learning-switch/src/main/java/org/opendaylight/openflowplugin/learningswitch/LearningSwitchHandlerSimpleImpl.java
samples/learning-switch/src/main/java/org/opendaylight/openflowplugin/learningswitch/LearningSwitchManager.java
samples/learning-switch/src/main/java/org/opendaylight/openflowplugin/learningswitch/LearningSwitchManagerSimpleImpl.java
samples/learning-switch/src/main/java/org/opendaylight/openflowplugin/learningswitch/PacketUtils.java
samples/learning-switch/src/main/java/org/opendaylight/openflowplugin/learningswitch/multi/LearningSwitchManagerMultiImpl.java

index 4d3de684cae35ec5b96a7a54607051c587366279..e1c5dfa8b805cf6fce4f7971b5774629d99d14a0 100644 (file)
@@ -9,13 +9,9 @@
 package org.opendaylight.openflowplugin.learningswitch;
 
 import com.google.common.util.concurrent.CheckedFuture;
-import java.util.concurrent.Future;
-
-import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.common.RpcResult;
 
 /**
  * 
index a469992c3dbbeecb1fda36050fda935ef7c423ae..a0b89c897b1d97a9f03b97095bcfcd7de9f09376 100644 (file)
@@ -35,6 +35,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026
 import com.google.common.collect.ImmutableList;
 
 public class FlowUtils {
+    private FlowUtils() {
+        //prohibite to instantiate util class
+    }
+
     /**
      * @param tableId
      * @param priority
@@ -45,18 +49,18 @@ public class FlowUtils {
      */
     public static FlowBuilder createDirectMacToMacFlow(final Short tableId, final int priority, final MacAddress srcMac,
             final MacAddress dstMac, final NodeConnectorRef dstPort) {
-        FlowBuilder macToMacFlow = new FlowBuilder() //
-                .setTableId(tableId) //
+        FlowBuilder macToMacFlow = new FlowBuilder()
+                .setTableId(tableId)
                 .setFlowName("mac2mac");
         macToMacFlow.setId(new FlowId(Long.toString(macToMacFlow.hashCode())));
 
-        EthernetMatch ethernetMatch = new EthernetMatchBuilder() //
-                .setEthernetSource(new EthernetSourceBuilder() //
-                        .setAddress(srcMac) //
-                        .build()) //
-                .setEthernetDestination(new EthernetDestinationBuilder() //
-                        .setAddress(dstMac) //
-                        .build()) //
+        EthernetMatch ethernetMatch = new EthernetMatchBuilder()
+                .setEthernetSource(new EthernetSourceBuilder()
+                        .setAddress(srcMac)
+                        .build())
+                .setEthernetDestination(new EthernetDestinationBuilder()
+                        .setAddress(dstMac)
+                        .build())
                 .build();
 
         MatchBuilder match = new MatchBuilder();
@@ -64,14 +68,14 @@ public class FlowUtils {
 
         Uri outputPort = dstPort.getValue().firstKeyOf(NodeConnector.class, NodeConnectorKey.class).getId();
 
-        Action outputToControllerAction = new ActionBuilder() //
+        Action outputToControllerAction = new ActionBuilder()
                 .setOrder(0)
-                .setAction(new OutputActionCaseBuilder() //
-                        .setOutputAction(new OutputActionBuilder() //
-                                .setMaxLength(new Integer(0xffff)) //
-                                .setOutputNodeConnector(outputPort) //
-                                .build()) //
-                        .build()) //
+                .setAction(new OutputActionCaseBuilder()
+                        .setOutputAction(new OutputActionBuilder()
+                                .setMaxLength(Integer.valueOf(0xffff))
+                                .setOutputNodeConnector(outputPort)
+                                .build())
+                        .build())
                 .build();
 
         // Create an Apply Action
@@ -79,26 +83,26 @@ public class FlowUtils {
                 .build();
 
         // Wrap our Apply Action in an Instruction
-        Instruction applyActionsInstruction = new InstructionBuilder() //
+        Instruction applyActionsInstruction = new InstructionBuilder()
                 .setOrder(0)
-                .setInstruction(new ApplyActionsCaseBuilder()//
-                        .setApplyActions(applyActions) //
-                        .build()) //
+                .setInstruction(new ApplyActionsCaseBuilder()
+                        .setApplyActions(applyActions)
+                        .build())
                 .build();
 
         // Put our Instruction in a list of Instructions
 
-        macToMacFlow //
-                .setMatch(new MatchBuilder() //
-                        .setEthernetMatch(ethernetMatch) //
-                        .build()) //
-                .setInstructions(new InstructionsBuilder() //
-                        .setInstruction(ImmutableList.of(applyActionsInstruction)) //
-                        .build()) //
-                .setPriority(priority) //
-                .setBufferId(OFConstants.OFP_NO_BUFFER) //
-                .setHardTimeout(0) //
-                .setIdleTimeout(0) //
+        macToMacFlow
+                .setMatch(new MatchBuilder()
+                        .setEthernetMatch(ethernetMatch)
+                        .build())
+                .setInstructions(new InstructionsBuilder()
+                        .setInstruction(ImmutableList.of(applyActionsInstruction))
+                        .build())
+                .setPriority(priority)
+                .setBufferId(OFConstants.OFP_NO_BUFFER)
+                .setHardTimeout(0)
+                .setIdleTimeout(0)
                 .setFlags(new FlowModFlags(false, false, false, false, false));
 
         return macToMacFlow;
@@ -118,7 +122,7 @@ public class FlowUtils {
 
         // Create output action -> send to controller
         OutputActionBuilder output = new OutputActionBuilder();
-        output.setMaxLength(new Integer(0xffff));
+        output.setMaxLength(Integer.valueOf(0xffff));
         Uri controllerPort = new Uri(OutputPortValues.CONTROLLER.toString());
         output.setOutputNodeConnector(controllerPort);
 
@@ -146,13 +150,13 @@ public class FlowUtils {
         instructions.add(ib.build());
         isb.setInstruction(instructions);
 
-        allToCtrlFlow //
-            .setMatch(matchBuilder.build()) //
-            .setInstructions(isb.build()) //
-            .setPriority(priority) //
-            .setBufferId(OFConstants.OFP_NO_BUFFER) //
-            .setHardTimeout(0) //
-            .setIdleTimeout(0) //
+        allToCtrlFlow
+            .setMatch(matchBuilder.build())
+            .setInstructions(isb.build())
+            .setPriority(priority)
+            .setBufferId(OFConstants.OFP_NO_BUFFER)
+            .setHardTimeout(0)
+            .setIdleTimeout(0)
             .setFlags(new FlowModFlags(false, false, false, false, false));
 
         return allToCtrlFlow;
index d1cc0380d30ba53c8c4b44545562747941322fd6..18f71bb0fb589317909d850062b6746b37f2e4f5 100644 (file)
@@ -16,6 +16,10 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
 public class InstanceIdentifierUtils {
 
+    private InstanceIdentifierUtils() {
+        //hiding constructor for util class
+    }
+
     /**
      * Creates an Instance Identifier (path) for node with specified id
      * 
@@ -23,8 +27,8 @@ public class InstanceIdentifierUtils {
      * @return
      */
     public static final InstanceIdentifier<Node> createNodePath(NodeId nodeId) {
-        return InstanceIdentifier.builder(Nodes.class) //
-                .child(Node.class, new NodeKey(nodeId)) //
+        return InstanceIdentifier.builder(Nodes.class)
+                .child(Node.class, new NodeKey(nodeId))
                 .build();
     }
 
@@ -88,8 +92,8 @@ public class InstanceIdentifierUtils {
     
     //
     public static final InstanceIdentifier<NodeConnector> createNodeConnectorPath(InstanceIdentifier<Node> nodeKey,NodeConnectorKey nodeConnectorKey) {
-        return InstanceIdentifier.builder(nodeKey) //
-                .child(NodeConnector.class,nodeConnectorKey) //
+        return InstanceIdentifier.builder(nodeKey)
+                .child(NodeConnector.class,nodeConnectorKey)
                 .build();
     }
 }
index 88fdcffe92c861a073d9425ba6c353021241d355..2919879b223430269c80f57fd898d9d3e899f1a8 100644 (file)
@@ -43,8 +43,8 @@ import org.slf4j.LoggerFactory;
 
 /**
  * Simple Learning Switch implementation which does mac learning for one switch.
- * 
- * 
+ *
+ *
  */
 public class LearningSwitchHandlerSimpleImpl implements LearningSwitchHandler, PacketProcessingListener {
 
@@ -63,7 +63,7 @@ public class LearningSwitchHandlerSimpleImpl implements LearningSwitchHandler, P
     private NodeId nodeId;
     private AtomicLong flowIdInc = new AtomicLong();
     private AtomicLong flowCookieInc = new AtomicLong(0x2a00000000000000L);
-    
+
     private InstanceIdentifier<Node> nodePath;
     private InstanceIdentifier<Table> tablePath;
 
@@ -90,7 +90,7 @@ public class LearningSwitchHandlerSimpleImpl implements LearningSwitchHandler, P
         }
 
         iAmLearning = true;
-        
+
         tablePath = appearedTablePath;
         nodePath = tablePath.firstIdentifierOf(Node.class);
         nodeId = nodePath.firstKeyOf(Node.class, NodeKey.class).getId();
@@ -235,11 +235,11 @@ public class LearningSwitchHandlerSimpleImpl implements LearningSwitchHandler, P
 
     private void sendPacketOut(byte[] payload, NodeConnectorRef ingress, NodeConnectorRef egress) {
         InstanceIdentifier<Node> egressNodePath = InstanceIdentifierUtils.getNodePath(egress.getValue());
-        TransmitPacketInput input = new TransmitPacketInputBuilder() //
-                .setPayload(payload) //
-                .setNode(new NodeRef(egressNodePath)) //
-                .setEgress(egress) //
-                .setIngress(ingress) //
+        TransmitPacketInput input = new TransmitPacketInputBuilder()
+                .setPayload(payload)
+                .setNode(new NodeRef(egressNodePath))
+                .setEgress(egress)
+                .setIngress(ingress)
                 .build();
         packetProcessingService.transmitPacket(input);
     }
index 3b992b2330303bb41e6abdd3ae2ba16c7ae24afb..0ba0ed22e9ad7f37c497efda421704e2bf6162d7 100644 (file)
@@ -10,7 +10,6 @@ package org.opendaylight.openflowplugin.learningswitch;
 
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.sal.binding.api.NotificationService;
-import org.opendaylight.controller.sal.binding.api.data.DataBrokerService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketProcessingService;
 
 /**
index bdeef5536de668675eaddde2992e49614c1a94ec..8615ce25057beafaeb8ed962ba5ee0c610896694 100644 (file)
@@ -19,7 +19,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.Pa
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.binding.NotificationListener;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
index a42a973e6a82706212f4d837a154f280c68243f4..776f139aebc33cdec84f1cf9050484377c518e2f 100644 (file)
@@ -8,61 +8,66 @@
 
 package org.opendaylight.openflowplugin.learningswitch;
 
-import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.List;
-
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.OutputPortValues;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.apply.actions._case.ApplyActions;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.apply.actions._case.ApplyActionsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestinationBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetSourceBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatch;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketProcessingService;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.TransmitPacketInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.TransmitPacketInputBuilder;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
-import com.google.common.collect.ImmutableList;
-
 /**
- * 
+ *
  */
 public abstract class PacketUtils {
 
-    
+    /**
+     * size of MAC address in octets (6*8 = 48 bits)
+     */
+    private static final int MAC_ADDRESS_SIZE = 6;
+
+    /**
+     * start position of destination MAC address in array
+     */
+    private static final int DST_MAC_START_POSITION = 0;
+
+    /**
+     * end position of destination MAC address in array
+     */
+    private static final int DST_MAC_END_POSITION = 6;
+
+    /**
+     * start position of source MAC address in array
+     */
+    private static final int SRC_MAC_START_POSITION = 6;
+
+    /**
+     * end position of source MAC address in array
+     */
+    private static final int SRC_MAC_END_POSITION = 12;
+
+    /**
+     * start position of ethernet type in array
+     */
+    private static final int ETHER_TYPE_START_POSITION = 12;
+
+    /**
+     * end position of ethernet type in array
+     */
+    private static final int ETHER_TYPE_END_POSITION = 14;
+
+    private PacketUtils() {
+        //prohibite to instantiate this class
+    }
 
     /**
      * @param payload
      * @return destination MAC address
      */
     public static byte[] extractDstMac(byte[] payload) {
-        return Arrays.copyOfRange(payload, 0, 6);
+        return Arrays.copyOfRange(payload, DST_MAC_START_POSITION, DST_MAC_END_POSITION);
     }
 
     /**
@@ -70,7 +75,7 @@ public abstract class PacketUtils {
      * @return source MAC address
      */
     public static byte[] extractSrcMac(byte[] payload) {
-        return Arrays.copyOfRange(payload, 6, 12);
+        return Arrays.copyOfRange(payload, SRC_MAC_START_POSITION, SRC_MAC_END_POSITION);
     }
 
     /**
@@ -78,7 +83,7 @@ public abstract class PacketUtils {
      * @return source MAC address
      */
     public static byte[] extractEtherType(byte[] payload) {
-        return Arrays.copyOfRange(payload, 12, 14);
+        return Arrays.copyOfRange(payload, ETHER_TYPE_START_POSITION, ETHER_TYPE_END_POSITION);
     }
 
     /**
@@ -88,8 +93,8 @@ public abstract class PacketUtils {
      */
     public static MacAddress rawMacToMac(byte[] rawMac) {
         MacAddress mac = null;
-        if (rawMac != null && rawMac.length == 6) {
-            StringBuffer sb = new StringBuffer();
+        if (rawMac != null && rawMac.length == MAC_ADDRESS_SIZE) {
+            StringBuilder sb = new StringBuilder();
             for (byte octet : rawMac) {
                 sb.append(String.format(":%02X", octet));
             }
index 7ea017c7607fe9d2eb7b18110ba9b047d30ec1b1..6260ad60d6ddfc0eefd05103cf48ff2d8f99321c 100644 (file)
@@ -113,13 +113,12 @@ public class LearningSwitchManagerMultiImpl implements DataChangeListenerRegistr
         try {
             packetInRegistration.close();
         } catch (Exception e) {
-            LOG.error("Error unregistering packet in listener, cause %s ", e.getMessage());
+            LOG.error("Error unregistering packet in listener. Exception:", e);
         }
         try {
             dataChangeListenerRegistration.close();
         } catch (Exception e) {
-            LOG.error("Error unregistering data change listener, cause %s ", e.getMessage());
-            LOG.error(e.getMessage(), e);
+            LOG.error("Error unregistering data change listener. Exception:", e);
         }
         LOG.debug("stop() <--");
     }