ONOS-7887 Rename action profile-related entities

Members can exist outside of a group. Previous naming was ambiguous
about this.

Action group -> action profile group
Action group member -> action profile member

Change-Id: I5097e92253353d355b864e689f9653df2d318230
diff --git a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeActionGroupProgrammable.java b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeActionGroupProgrammable.java
index c20c899..4a48897 100644
--- a/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeActionGroupProgrammable.java
+++ b/drivers/p4runtime/src/main/java/org/onosproject/drivers/p4runtime/P4RuntimeActionGroupProgrammable.java
@@ -23,8 +23,8 @@
 import com.google.common.collect.Sets;
 import com.google.common.util.concurrent.Striped;
 import org.onlab.util.SharedExecutors;
+import org.onosproject.drivers.p4runtime.mirror.P4RuntimeActionProfileGroupMirror;
 import org.onosproject.drivers.p4runtime.mirror.P4RuntimeActionProfileMemberMirror;
-import org.onosproject.drivers.p4runtime.mirror.P4RuntimeGroupMirror;
 import org.onosproject.drivers.p4runtime.mirror.TimedEntry;
 import org.onosproject.net.DefaultAnnotations;
 import org.onosproject.net.DeviceId;
@@ -40,11 +40,11 @@
 import org.onosproject.net.pi.model.PiActionProfileId;
 import org.onosproject.net.pi.model.PiActionProfileModel;
 import org.onosproject.net.pi.runtime.PiAction;
-import org.onosproject.net.pi.runtime.PiActionGroup;
-import org.onosproject.net.pi.runtime.PiActionGroupHandle;
-import org.onosproject.net.pi.runtime.PiActionGroupMember;
-import org.onosproject.net.pi.runtime.PiActionGroupMemberHandle;
-import org.onosproject.net.pi.runtime.PiActionGroupMemberId;
+import org.onosproject.net.pi.runtime.PiActionProfileGroup;
+import org.onosproject.net.pi.runtime.PiActionProfileGroupHandle;
+import org.onosproject.net.pi.runtime.PiActionProfileMember;
+import org.onosproject.net.pi.runtime.PiActionProfileMemberHandle;
+import org.onosproject.net.pi.runtime.PiActionProfileMemberId;
 import org.onosproject.net.pi.service.PiGroupTranslator;
 import org.onosproject.net.pi.service.PiTranslatedEntity;
 import org.onosproject.net.pi.service.PiTranslationException;
@@ -80,7 +80,7 @@
     private static final String MAX_MEM_SIZE = "maxMemSize";
 
     protected GroupStore groupStore;
-    private P4RuntimeGroupMirror groupMirror;
+    private P4RuntimeActionProfileGroupMirror groupMirror;
     private P4RuntimeActionProfileMemberMirror memberMirror;
     private PiGroupTranslator groupTranslator;
 
@@ -93,7 +93,7 @@
         if (!super.setupBehaviour()) {
             return false;
         }
-        groupMirror = this.handler().get(P4RuntimeGroupMirror.class);
+        groupMirror = this.handler().get(P4RuntimeActionProfileGroupMirror.class);
         memberMirror = this.handler().get(P4RuntimeActionProfileMemberMirror.class);
         groupStore = handler().get(GroupStore.class);
         groupTranslator = translationService.groupTranslator();
@@ -140,14 +140,14 @@
                 .stream()
                 .map(PiActionProfileModel::id)
                 .collect(Collectors.toList());
-        final List<PiActionGroup> groupsOnDevice = actionProfileIds.stream()
+        final List<PiActionProfileGroup> groupsOnDevice = actionProfileIds.stream()
                 .flatMap(this::streamGroupsFromDevice)
                 .collect(Collectors.toList());
-        final Set<PiActionGroupMemberHandle> membersOnDevice = actionProfileIds
+        final Set<PiActionProfileMemberHandle> membersOnDevice = actionProfileIds
                 .stream()
                 .flatMap(actProfId -> getMembersFromDevice(actProfId)
                         .stream()
-                        .map(memberId -> PiActionGroupMemberHandle.of(
+                        .map(memberId -> PiActionProfileMemberHandle.of(
                                 deviceId, actProfId, memberId)))
                 .collect(Collectors.toSet());
 
@@ -160,10 +160,10 @@
         syncMemberMirror(membersOnDevice);
 
         final List<Group> result = Lists.newArrayList();
-        final List<PiActionGroup> inconsistentGroups = Lists.newArrayList();
-        final List<PiActionGroup> validGroups = Lists.newArrayList();
+        final List<PiActionProfileGroup> inconsistentGroups = Lists.newArrayList();
+        final List<PiActionProfileGroup> validGroups = Lists.newArrayList();
 
-        for (PiActionGroup piGroup : groupsOnDevice) {
+        for (PiActionProfileGroup piGroup : groupsOnDevice) {
             final Group pdGroup = forgeGroupEntry(piGroup);
             if (pdGroup == null) {
                 // Entry is on device but unknown to translation service or
@@ -178,11 +178,11 @@
         // Trigger clean up of inconsistent groups and members. This will also
         // remove all members that are not used by any group, and update the
         // mirror accordingly.
-        final Set<PiActionGroupMemberHandle> membersToKeep = validGroups.stream()
+        final Set<PiActionProfileMemberHandle> membersToKeep = validGroups.stream()
                 .flatMap(g -> g.members().stream())
-                .map(m -> PiActionGroupMemberHandle.of(deviceId, m))
+                .map(m -> PiActionProfileMemberHandle.of(deviceId, m))
                 .collect(Collectors.toSet());
-        final Set<PiActionGroupMemberHandle> inconsistentMembers = Sets.difference(
+        final Set<PiActionProfileMemberHandle> inconsistentMembers = Sets.difference(
                 membersOnDevice, membersToKeep);
         SharedExecutors.getSingleThreadExecutor().execute(
                 () -> cleanUpInconsistentGroupsAndMembers(
@@ -191,15 +191,15 @@
         return result;
     }
 
-    private void syncGroupMirror(Collection<PiActionGroup> groups) {
-        Map<PiActionGroupHandle, PiActionGroup> handleMap = Maps.newHashMap();
-        groups.forEach(g -> handleMap.put(PiActionGroupHandle.of(deviceId, g), g));
+    private void syncGroupMirror(Collection<PiActionProfileGroup> groups) {
+        Map<PiActionProfileGroupHandle, PiActionProfileGroup> handleMap = Maps.newHashMap();
+        groups.forEach(g -> handleMap.put(PiActionProfileGroupHandle.of(deviceId, g), g));
         groupMirror.sync(deviceId, handleMap);
     }
 
-    private void syncMemberMirror(Collection<PiActionGroupMemberHandle> memberHandles) {
-        Map<PiActionGroupMemberHandle, PiActionGroupMember> handleMap = Maps.newHashMap();
-       memberHandles.forEach(handle -> handleMap.put(
+    private void syncMemberMirror(Collection<PiActionProfileMemberHandle> memberHandles) {
+        Map<PiActionProfileMemberHandle, PiActionProfileMember> handleMap = Maps.newHashMap();
+        memberHandles.forEach(handle -> handleMap.put(
                 handle, dummyMember(handle.actionProfileId(), handle.memberId())));
         memberMirror.sync(deviceId, handleMap);
     }
@@ -212,8 +212,8 @@
                 .collect(Collectors.toList());
     }
 
-    private void cleanUpInconsistentGroupsAndMembers(Collection<PiActionGroup> groupsToRemove,
-                                                     Collection<PiActionGroupMemberHandle> membersToRemove) {
+    private void cleanUpInconsistentGroupsAndMembers(Collection<PiActionProfileGroup> groupsToRemove,
+                                                     Collection<PiActionProfileMemberHandle> membersToRemove) {
         if (!groupsToRemove.isEmpty()) {
             log.warn("Found {} inconsistent action profile groups on {}, removing them...",
                      groupsToRemove.size(), deviceId);
@@ -227,33 +227,33 @@
                      membersToRemove.size(), deviceId);
             // FIXME: implement client call to remove members from multiple
             // action profiles in one shot.
-            final ListMultimap<PiActionProfileId, PiActionGroupMemberId>
+            final ListMultimap<PiActionProfileId, PiActionProfileMemberId>
                     membersByActProfId = ArrayListMultimap.create();
             membersToRemove.forEach(m -> membersByActProfId.put(
                     m.actionProfileId(), m.memberId()));
             membersByActProfId.keySet().forEach(actProfId -> {
-                List<PiActionGroupMemberId> removedMembers = getFutureWithDeadline(
+                List<PiActionProfileMemberId> removedMembers = getFutureWithDeadline(
                         client.removeActionProfileMembers(
                                 actProfId, membersByActProfId.get(actProfId), pipeconf),
                         "cleaning up action profile members", Collections.emptyList());
                 // Update member mirror.
                 removedMembers.stream()
-                        .map(id -> PiActionGroupMemberHandle.of(deviceId, actProfId, id))
+                        .map(id -> PiActionProfileMemberHandle.of(deviceId, actProfId, id))
                         .forEach(memberMirror::remove);
             });
         }
     }
 
-    private Stream<PiActionGroup> streamGroupsFromDevice(PiActionProfileId actProfId) {
+    private Stream<PiActionProfileGroup> streamGroupsFromDevice(PiActionProfileId actProfId) {
         // TODO: implement P4Runtime client call to read all groups with one call
         // Good if pipeline has multiple action profiles.
-        final Collection<PiActionGroup> groups = getFutureWithDeadline(
-                client.dumpGroups(actProfId, pipeconf),
+        final Collection<PiActionProfileGroup> groups = getFutureWithDeadline(
+                client.dumpActionProfileGroups(actProfId, pipeconf),
                 "dumping groups", Collections.emptyList());
         return groups.stream();
     }
 
-    private List<PiActionGroupMemberId> getMembersFromDevice(PiActionProfileId actProfId) {
+    private List<PiActionProfileMemberId> getMembersFromDevice(PiActionProfileId actProfId) {
         // TODO: implement P4Runtime client call to read all members with one call
         // Good if pipeline has multiple action profiles.
         return getFutureWithDeadline(
@@ -261,11 +261,11 @@
                 "dumping action profile ids", Collections.emptyList());
     }
 
-    private Group forgeGroupEntry(PiActionGroup piGroup) {
-        final PiActionGroupHandle handle = PiActionGroupHandle.of(deviceId, piGroup);
-        final Optional<PiTranslatedEntity<Group, PiActionGroup>>
+    private Group forgeGroupEntry(PiActionProfileGroup piGroup) {
+        final PiActionProfileGroupHandle handle = PiActionProfileGroupHandle.of(deviceId, piGroup);
+        final Optional<PiTranslatedEntity<Group, PiActionProfileGroup>>
                 translatedEntity = groupTranslator.lookup(handle);
-        final TimedEntry<PiActionGroup> timedEntry = groupMirror.get(handle);
+        final TimedEntry<PiActionProfileGroup> timedEntry = groupMirror.get(handle);
         // Is entry consistent with our state?
         if (!translatedEntity.isPresent()) {
             log.warn("Group handle not found in translation store: {}", handle);
@@ -292,7 +292,7 @@
     }
 
     private void processGroupOperation(Group pdGroup, GroupOperation.Type opType) {
-        final PiActionGroup piGroup;
+        final PiActionProfileGroup piGroup;
         try {
             piGroup = groupTranslator.translate(pdGroup, pipeconf);
         } catch (PiTranslationException e) {
@@ -305,10 +305,10 @@
         processGroup(piGroup, pdGroup, operation);
     }
 
-    private void processGroup(PiActionGroup groupToApply,
+    private void processGroup(PiActionProfileGroup groupToApply,
                               Group pdGroup,
                               Operation operation) {
-        final PiActionGroupHandle handle = PiActionGroupHandle.of(deviceId, groupToApply);
+        final PiActionProfileGroupHandle handle = PiActionProfileGroupHandle.of(deviceId, groupToApply);
         STRIPED_LOCKS.get(handle).lock();
         try {
             switch (operation) {
@@ -332,7 +332,7 @@
         }
     }
 
-    private boolean applyGroupWithMembersOrNothing(PiActionGroup group, PiActionGroupHandle handle) {
+    private boolean applyGroupWithMembersOrNothing(PiActionProfileGroup group, PiActionProfileGroupHandle handle) {
         // First apply members, then group, if fails, delete members.
         if (!applyAllMembersOrNothing(group.members())) {
             return false;
@@ -344,7 +344,7 @@
         return true;
     }
 
-    private boolean applyGroup(PiActionGroup group, PiActionGroupHandle handle) {
+    private boolean applyGroup(PiActionProfileGroup group, PiActionProfileGroupHandle handle) {
         final int currentMemberSize = group.members().size();
         if (groupMirror.get(handle) != null) {
             String maxMemSize = "";
@@ -352,7 +352,7 @@
                     groupMirror.annotations(handle).value(MAX_MEM_SIZE) != null) {
                 maxMemSize = groupMirror.annotations(handle).value(MAX_MEM_SIZE);
             }
-            if (!maxMemSize.equals("") || currentMemberSize > Integer.parseInt(maxMemSize)) {
+            if (maxMemSize.equals("") || currentMemberSize > Integer.parseInt(maxMemSize)) {
                 deleteGroup(group, handle);
             }
         }
@@ -362,7 +362,7 @@
         int currentMaxMemberSize = opType == INSERT ? (currentMemberSize + GROUP_MEMBERS_BUFFER_SIZE) : 0;
 
         final boolean success = getFutureWithDeadline(
-                client.writeActionGroup(group, opType, pipeconf, currentMaxMemberSize),
+                client.writeActionProfileGroup(group, opType, pipeconf, currentMaxMemberSize),
                 "performing action profile group " + opType, false);
         if (success) {
             groupMirror.put(handle, group);
@@ -376,9 +376,9 @@
         return success;
     }
 
-    private boolean deleteGroup(PiActionGroup group, PiActionGroupHandle handle) {
+    private boolean deleteGroup(PiActionProfileGroup group, PiActionProfileGroupHandle handle) {
         final boolean success = getFutureWithDeadline(
-                client.writeActionGroup(group, DELETE, pipeconf, 0),
+                client.writeActionProfileGroup(group, DELETE, pipeconf, 0),
                 "performing action profile group " + DELETE, false);
         if (success) {
             groupMirror.remove(handle);
@@ -386,8 +386,8 @@
         return success;
     }
 
-    private boolean applyAllMembersOrNothing(Collection<PiActionGroupMember> members) {
-        Collection<PiActionGroupMember> appliedMembers = applyMembers(members);
+    private boolean applyAllMembersOrNothing(Collection<PiActionProfileMember> members) {
+        Collection<PiActionProfileMember> appliedMembers = applyMembers(members);
         if (appliedMembers.size() == members.size()) {
             return true;
         } else {
@@ -396,22 +396,22 @@
         }
     }
 
-    private Collection<PiActionGroupMember> applyMembers(
-            Collection<PiActionGroupMember> members) {
+    private Collection<PiActionProfileMember> applyMembers(
+            Collection<PiActionProfileMember> members) {
         return members.stream()
                 .filter(this::applyMember)
                 .collect(Collectors.toList());
     }
 
-    private boolean applyMember(PiActionGroupMember member) {
+    private boolean applyMember(PiActionProfileMember member) {
         // If exists, modify, otherwise insert
-        final PiActionGroupMemberHandle handle = PiActionGroupMemberHandle.of(
+        final PiActionProfileMemberHandle handle = PiActionProfileMemberHandle.of(
                 deviceId, member);
         final P4RuntimeClient.WriteOperationType opType =
                 memberMirror.get(handle) == null ? INSERT : MODIFY;
         final boolean success = getFutureWithDeadline(
-                client.writeActionGroupMembers(Collections.singletonList(member),
-                                               opType, pipeconf),
+                client.writeActionProfileMembers(Collections.singletonList(member),
+                                                 opType, pipeconf),
                 "performing action profile member " + opType, false);
         if (success) {
             memberMirror.put(handle, dummyMember(member.actionProfile(), member.id()));
@@ -419,16 +419,16 @@
         return success;
     }
 
-    private void deleteMembers(Collection<PiActionGroupMember> members) {
+    private void deleteMembers(Collection<PiActionProfileMember> members) {
         members.forEach(this::deleteMember);
     }
 
-    private void deleteMember(PiActionGroupMember member) {
-        final PiActionGroupMemberHandle handle = PiActionGroupMemberHandle.of(
+    private void deleteMember(PiActionProfileMember member) {
+        final PiActionProfileMemberHandle handle = PiActionProfileMemberHandle.of(
                 deviceId, member);
         final boolean success = getFutureWithDeadline(
-                client.writeActionGroupMembers(Collections.singletonList(member),
-                                               DELETE, pipeconf),
+                client.writeActionProfileMembers(Collections.singletonList(member),
+                                                 DELETE, pipeconf),
                 "performing action profile member " + DELETE, false);
         if (success) {
             memberMirror.remove(handle);
@@ -436,15 +436,13 @@
     }
 
     // FIXME: this is nasty, we have to rely on a dummy member of the mirror
-    // because the PiActionGroupMember abstraction is broken, since it includes
+    // because the PiActionProfileMember abstraction is broken, since it includes
     // attributes that are not part of a P4Runtime member, e.g. weight.
     // We should remove weight from the class, and have client methods that
-    // return the full PiActionGroupMember, not just the IDs. Also the naming
-    // "ActionGroupMember" is wrong since it makes believe that members can
-    // exists only inside a group, which is not true.
-    private PiActionGroupMember dummyMember(
-            PiActionProfileId actionProfileId, PiActionGroupMemberId memberId) {
-        return PiActionGroupMember.builder()
+    // return the full PiActionProfileMember, not just the IDs.
+    private PiActionProfileMember dummyMember(
+            PiActionProfileId actionProfileId, PiActionProfileMemberId memberId) {
+        return PiActionProfileMember.builder()
                 .forActionProfile(actionProfileId)
                 .withId(memberId)
                 .withAction(PiAction.builder()