Bump MRI upstreams
[openflowplugin.git] / openflowplugin-impl / src / main / java / org / opendaylight / openflowplugin / impl / statistics / services / GroupFeaturesService.java
index 008429797eff41b0cb774dee8f2cc4c7cc71face..12a03ea26998d0351c29e78e656e5eda54fadfb3 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -9,14 +9,16 @@ package org.opendaylight.openflowplugin.impl.statistics.services;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
-import java.util.ArrayList;
+import com.google.common.collect.ImmutableSet;
 import java.util.List;
+import java.util.Set;
 import java.util.concurrent.atomic.AtomicLong;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
 import org.opendaylight.openflowplugin.api.openflow.device.Xid;
-import org.opendaylight.openflowplugin.impl.services.RequestInputUtils;
+import org.opendaylight.openflowplugin.impl.services.util.RequestInputUtils;
 import org.opendaylight.openflowplugin.impl.statistics.services.compatibility.AbstractCompatibleStatService;
+import org.opendaylight.openflowplugin.impl.util.GroupUtil;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev150304.TransactionId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupFeaturesInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupFeaturesOutput;
@@ -33,7 +35,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.SelectLiveness;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.SelectWeight;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ActionType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupCapabilities;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupTypes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
@@ -51,7 +52,9 @@ final class GroupFeaturesService
     private static final MultipartRequestGroupFeaturesCase GROUP_FEAT_CASE =
             new MultipartRequestGroupFeaturesCaseBuilder().build();
 
-    public GroupFeaturesService(RequestContextStack requestContextStack, DeviceContext deviceContext, AtomicLong compatibilityXidSeed) {
+    GroupFeaturesService(final RequestContextStack requestContextStack,
+                                final DeviceContext deviceContext,
+                                final AtomicLong compatibilityXidSeed) {
         super(requestContextStack, deviceContext, compatibilityXidSeed);
     }
 
@@ -64,12 +67,13 @@ final class GroupFeaturesService
     }
 
     @Override
-    public GetGroupFeaturesOutput buildTxCapableResult(TransactionId emulatedTxId) {
+    public GetGroupFeaturesOutput buildTxCapableResult(final TransactionId emulatedTxId) {
         return new GetGroupFeaturesOutputBuilder().setTransactionId(emulatedTxId).build();
     }
 
     @Override
-    public GroupFeaturesUpdated transformToNotification(List<MultipartReply> result, TransactionId emulatedTxId) {
+    public GroupFeaturesUpdated transformToNotification(final List<MultipartReply> result,
+            final TransactionId emulatedTxId) {
         final int mpSize = result.size();
         Preconditions.checkArgument(mpSize == 1, "unexpected (!=1) mp-reply size received: {}", mpSize);
 
@@ -78,78 +82,51 @@ final class GroupFeaturesService
         notification.setMoreReplies(Boolean.FALSE);
         notification.setTransactionId(emulatedTxId);
 
-        MultipartReplyGroupFeaturesCase caseBody = (MultipartReplyGroupFeaturesCase) result.get(0).getMultipartReplyBody();
+        MultipartReplyGroupFeaturesCase caseBody =
+                (MultipartReplyGroupFeaturesCase) result.get(0).getMultipartReplyBody();
         MultipartReplyGroupFeatures replyBody = caseBody.getMultipartReplyGroupFeatures();
 
         notification.setGroupTypesSupported(extractSupportedGroupTypes(replyBody.getTypes()));
         notification.setMaxGroups(replyBody.getMaxGroups());
         notification.setGroupCapabilitiesSupported(extractSupportedCapabilities(replyBody.getCapabilities()));
-        notification.setActions(extractGroupActionsSupportBitmap(replyBody.getActionsBitmap()));
+        notification.setActions(GroupUtil.extractGroupActionsSupportBitmap(replyBody.getActionsBitmap()));
 
         return notification.build();
     }
 
     @VisibleForTesting
-    static List<Class<? extends GroupCapability>> extractSupportedCapabilities(GroupCapabilities capabilities) {
-        List<Class<? extends GroupCapability>> supportedCapabilities = new ArrayList<>();
-
-        if (capabilities.isOFPGFCCHAINING()) {
-            supportedCapabilities.add(Chaining.class);
+    static Set<Class<? extends GroupCapability>> extractSupportedCapabilities(final GroupCapabilities capabilities) {
+        final var builder = ImmutableSet.<Class<? extends GroupCapability>>builder();
+        if (capabilities.getOFPGFCCHAINING()) {
+            builder.add(Chaining.class);
         }
-        if (capabilities.isOFPGFCCHAININGCHECKS()) {
-            supportedCapabilities.add(ChainingChecks.class);
+        if (capabilities.getOFPGFCCHAININGCHECKS()) {
+            builder.add(ChainingChecks.class);
         }
-        if (capabilities.isOFPGFCSELECTLIVENESS()) {
-            supportedCapabilities.add(SelectLiveness.class);
+        if (capabilities.getOFPGFCSELECTLIVENESS()) {
+            builder.add(SelectLiveness.class);
         }
-        if (capabilities.isOFPGFCSELECTWEIGHT()) {
-            supportedCapabilities.add(SelectWeight.class);
+        if (capabilities.getOFPGFCSELECTWEIGHT()) {
+            builder.add(SelectWeight.class);
         }
-        return supportedCapabilities;
+        return builder.build();
     }
 
     @VisibleForTesting
-    static List<Class<? extends GroupType>> extractSupportedGroupTypes(GroupTypes types) {
-        List<Class<? extends GroupType>> supportedGroups = new ArrayList<>();
-
-        if (types.isOFPGTALL()) {
-            supportedGroups.add(GroupAll.class);
-        }
-        if (types.isOFPGTSELECT()) {
-            supportedGroups.add(GroupSelect.class);
+    static Set<Class<? extends GroupType>> extractSupportedGroupTypes(final GroupTypes types) {
+        final var builder = ImmutableSet.<Class<? extends GroupType>>builder();
+        if (types.getOFPGTALL()) {
+            builder.add(GroupAll.class);
         }
-        if (types.isOFPGTINDIRECT()) {
-            supportedGroups.add(GroupIndirect.class);
+        if (types.getOFPGTSELECT()) {
+            builder.add(GroupSelect.class);
         }
-        if (types.isOFPGTFF()) {
-            supportedGroups.add(GroupFf.class);
+        if (types.getOFPGTINDIRECT()) {
+            builder.add(GroupIndirect.class);
         }
-        return supportedGroups;
-    }
-
-    @VisibleForTesting
-    static List<Long> extractGroupActionsSupportBitmap(final List<ActionType> actionsSupported) {
-        List<Long> supportActionByGroups = new ArrayList<>();
-        for (ActionType supportedActions : actionsSupported) {
-            long supportActionBitmap = 0;
-            supportActionBitmap |= supportedActions.isOFPATOUTPUT() ? (1 << 0) : 0;
-            supportActionBitmap |= supportedActions.isOFPATCOPYTTLOUT() ? (1 << 11) : 0;
-            supportActionBitmap |= supportedActions.isOFPATCOPYTTLIN() ? (1 << 12) : 0;
-            supportActionBitmap |= supportedActions.isOFPATSETMPLSTTL() ? (1 << 15) : 0;
-            supportActionBitmap |= supportedActions.isOFPATDECMPLSTTL() ? (1 << 16) : 0;
-            supportActionBitmap |= supportedActions.isOFPATPUSHVLAN() ? (1 << 17) : 0;
-            supportActionBitmap |= supportedActions.isOFPATPOPVLAN() ? (1 << 18) : 0;
-            supportActionBitmap |= supportedActions.isOFPATPUSHMPLS() ? (1 << 19) : 0;
-            supportActionBitmap |= supportedActions.isOFPATPOPMPLS() ? (1 << 20) : 0;
-            supportActionBitmap |= supportedActions.isOFPATSETQUEUE() ? (1 << 21) : 0;
-            supportActionBitmap |= supportedActions.isOFPATGROUP() ? (1 << 22) : 0;
-            supportActionBitmap |= supportedActions.isOFPATSETNWTTL() ? (1 << 23) : 0;
-            supportActionBitmap |= supportedActions.isOFPATDECNWTTL() ? (1 << 24) : 0;
-            supportActionBitmap |= supportedActions.isOFPATSETFIELD() ? (1 << 25) : 0;
-            supportActionBitmap |= supportedActions.isOFPATPUSHPBB() ? (1 << 26) : 0;
-            supportActionBitmap |= supportedActions.isOFPATPOPPBB() ? (1 << 27) : 0;
-            supportActionByGroups.add(Long.valueOf(supportActionBitmap));
+        if (types.getOFPGTFF()) {
+            builder.add(GroupFf.class);
         }
-        return supportActionByGroups;
+        return builder.build();
     }
 }