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/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroup.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroup.java
deleted file mode 100644
index a22e039..0000000
--- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroup.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.net.pi.runtime;
-
-import com.google.common.annotations.Beta;
-import com.google.common.base.MoreObjects;
-import com.google.common.base.Objects;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Maps;
-import org.onosproject.net.pi.model.PiActionProfileId;
-
-import java.util.Collection;
-import java.util.Map;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-/**
- * Instance of an action group of a protocol-independent pipeline.
- */
-@Beta
-public final class PiActionGroup implements PiEntity {
-
-    private final PiActionGroupId id;
-    private final ImmutableSet<PiActionGroupMember> members;
-    private final PiActionProfileId piActionProfileId;
-
-    private PiActionGroup(PiActionGroupId id, ImmutableSet<PiActionGroupMember> members,
-                          PiActionProfileId piActionProfileId) {
-        this.id = id;
-        this.members = members;
-        this.piActionProfileId = piActionProfileId;
-    }
-
-    /**
-     * Returns the identifier of this action group.
-     *
-     * @return action group identifier
-     */
-    public PiActionGroupId id() {
-        return id;
-    }
-
-    /**
-     * Returns the members of this action group.
-     *
-     * @return collection of action members.
-     */
-    public Collection<PiActionGroupMember> members() {
-        return members;
-    }
-
-    /**
-     * Gets identifier of the action profile.
-     *
-     * @return action profile id
-     */
-    public PiActionProfileId actionProfileId() {
-        return piActionProfileId;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) {
-            return true;
-        }
-        if (o == null || !(o instanceof PiActionGroup)) {
-            return false;
-        }
-        PiActionGroup that = (PiActionGroup) o;
-        return Objects.equal(id, that.id) &&
-                Objects.equal(members, that.members) &&
-                Objects.equal(piActionProfileId, that.piActionProfileId);
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hashCode(id, members);
-    }
-
-    @Override
-    public String toString() {
-        return MoreObjects.toStringHelper(this)
-                .add("groupId", id)
-                .add("members", members)
-                .add("piActionProfileId", piActionProfileId)
-                .toString();
-    }
-
-    /**
-     * Returns a new builder of action groups.
-     *
-     * @return action group builder
-     */
-    public static Builder builder() {
-        return new Builder();
-    }
-
-    @Override
-    public PiEntityType piEntityType() {
-        return PiEntityType.GROUP;
-    }
-
-    /**
-     * Builder of action groups.
-     */
-    public static final class Builder {
-
-        private PiActionGroupId id;
-        private Map<PiActionGroupMemberId, PiActionGroupMember> members = Maps.newHashMap();
-        private PiActionProfileId piActionProfileId;
-
-        private Builder() {
-            // hides constructor.
-        }
-
-        /**
-         * Sets the identifier of this action group.
-         *
-         * @param id action group identifier
-         * @return this
-         */
-        public Builder withId(PiActionGroupId id) {
-            this.id = id;
-            return this;
-        }
-
-        /**
-         * Adds one member to this action group.
-         *
-         * @param member action group member
-         * @return this
-         */
-        public Builder addMember(PiActionGroupMember member) {
-            members.put(member.id(), member);
-            return this;
-        }
-
-        /**
-         * Adds many members to this action group.
-         *
-         * @param members action group members
-         * @return this
-         */
-        public Builder addMembers(Collection<PiActionGroupMember> members) {
-            members.forEach(this::addMember);
-            return this;
-        }
-
-        /**
-         * Sets the identifier of the action profile.
-         *
-         * @param piActionProfileId the identifier of the action profile
-         * @return this
-         */
-        public Builder withActionProfileId(PiActionProfileId piActionProfileId) {
-            this.piActionProfileId = piActionProfileId;
-            return this;
-        }
-
-        /**
-         * Creates a new action group.
-         *
-         * @return action group
-         */
-        public PiActionGroup build() {
-            checkNotNull(id);
-            checkNotNull(piActionProfileId);
-            return new PiActionGroup(id, ImmutableSet.copyOf(members.values()),
-                                     piActionProfileId);
-        }
-    }
-}
diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupId.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupId.java
deleted file mode 100644
index b604237..0000000
--- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupId.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.net.pi.runtime;
-
-import com.google.common.annotations.Beta;
-import org.onlab.util.Identifier;
-
-/**
- * Identifier of an action group in a protocol-independent pipeline, unique within the scope of an action profile.
- */
-@Beta
-public final class PiActionGroupId extends Identifier<Integer> implements PiTableAction {
-
-    private PiActionGroupId(int id) {
-        super(id);
-    }
-
-    /**
-     * Returns an action group identifier for the given integer value.
-     *
-     * @param id identifier
-     * @return action group
-     */
-    public static PiActionGroupId of(int id) {
-        return new PiActionGroupId(id);
-    }
-
-    /*
-    In P4Runtime, groups can be referenced directly as table actions (i.e. without invoking the selector).
-    In future we should consider having a more appropriate wrapper class for group IDs, instead of implementing
-    the PiTableAction interface.
-     */
-    @Override
-    public Type type() {
-        return Type.ACTION_GROUP_ID;
-    }
-}
diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMemberId.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMemberId.java
deleted file mode 100644
index 3b233a0..0000000
--- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMemberId.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.net.pi.runtime;
-
-import com.google.common.annotations.Beta;
-import org.onlab.util.Identifier;
-
-/**
- * Identifier of a member of an action group in a protocol-independent pipeline, unique withing the scope on an action
- * profile.
- */
-@Beta
-public final class PiActionGroupMemberId extends Identifier<Integer> implements PiTableAction {
-
-    private PiActionGroupMemberId(int id) {
-        super(id);
-    }
-
-    /**
-     * Returns an action group identifier for the given integer value.
-     *
-     * @param id identifier
-     * @return action group
-     */
-    public static PiActionGroupMemberId of(int id) {
-        return new PiActionGroupMemberId(id);
-    }
-
-    /*
-    In P4Runtime, group members can be referenced directly as table actions.
-    In future we should consider having a more appropriate wrapper class for group member IDs, instead of implementing
-    the PiTableAction interface.
-     */
-    @Override
-    public Type type() {
-        return Type.GROUP_MEMBER_ID;
-    }
-}
diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionProfileGroup.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionProfileGroup.java
new file mode 100644
index 0000000..96168b9
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionProfileGroup.java
@@ -0,0 +1,187 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.net.pi.runtime;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.MoreObjects;
+import com.google.common.base.Objects;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Maps;
+import org.onosproject.net.pi.model.PiActionProfileId;
+
+import java.util.Collection;
+import java.util.Map;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Instance of an action profile group of a protocol-independent pipeline.
+ */
+@Beta
+public final class PiActionProfileGroup implements PiEntity {
+
+    private final PiActionProfileGroupId id;
+    private final ImmutableSet<PiActionProfileMember> members;
+    private final PiActionProfileId actionProfileId;
+
+    private PiActionProfileGroup(PiActionProfileGroupId id,
+                                 ImmutableSet<PiActionProfileMember> members,
+                                 PiActionProfileId actionProfileId) {
+        this.id = id;
+        this.members = members;
+        this.actionProfileId = actionProfileId;
+    }
+
+    /**
+     * Returns the identifier of this action profile group.
+     *
+     * @return action profile group identifier
+     */
+    public PiActionProfileGroupId id() {
+        return id;
+    }
+
+    /**
+     * Returns the members of this action profile group.
+     *
+     * @return collection of action profile members.
+     */
+    public Collection<PiActionProfileMember> members() {
+        return members;
+    }
+
+    /**
+     * Gets identifier of the action profile.
+     *
+     * @return action profile id
+     */
+    public PiActionProfileId actionProfileId() {
+        return actionProfileId;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || !(o instanceof PiActionProfileGroup)) {
+            return false;
+        }
+        PiActionProfileGroup that = (PiActionProfileGroup) o;
+        return Objects.equal(id, that.id) &&
+                Objects.equal(members, that.members) &&
+                Objects.equal(actionProfileId, that.actionProfileId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(id, members);
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+                .add("groupId", id)
+                .add("members", members)
+                .add("piActionProfileId", actionProfileId)
+                .toString();
+    }
+
+    /**
+     * Returns a new builder of action profile groups.
+     *
+     * @return action profile group builder
+     */
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    @Override
+    public PiEntityType piEntityType() {
+        return PiEntityType.ACTION_PROFILE_GROUP;
+    }
+
+    /**
+     * Builder of action profile groups.
+     */
+    public static final class Builder {
+
+        private PiActionProfileGroupId id;
+        private Map<PiActionProfileMemberId, PiActionProfileMember> members = Maps.newHashMap();
+        private PiActionProfileId piActionProfileId;
+
+        private Builder() {
+            // hides constructor.
+        }
+
+        /**
+         * Sets the identifier of this action profile group.
+         *
+         * @param id action profile group identifier
+         * @return this
+         */
+        public Builder withId(PiActionProfileGroupId id) {
+            this.id = id;
+            return this;
+        }
+
+        /**
+         * Adds one member to this action profile group.
+         *
+         * @param member action profile member
+         * @return this
+         */
+        public Builder addMember(PiActionProfileMember member) {
+            members.put(member.id(), member);
+            return this;
+        }
+
+        /**
+         * Adds many members to this action profile group.
+         *
+         * @param members action profile members
+         * @return this
+         */
+        public Builder addMembers(Collection<PiActionProfileMember> members) {
+            members.forEach(this::addMember);
+            return this;
+        }
+
+        /**
+         * Sets the identifier of the action profile.
+         *
+         * @param piActionProfileId the identifier of the action profile
+         * @return this
+         */
+        public Builder withActionProfileId(PiActionProfileId piActionProfileId) {
+            this.piActionProfileId = piActionProfileId;
+            return this;
+        }
+
+        /**
+         * Creates a new action profile group.
+         *
+         * @return action profile group
+         */
+        public PiActionProfileGroup build() {
+            checkNotNull(id);
+            checkNotNull(piActionProfileId);
+            return new PiActionProfileGroup(
+                    id, ImmutableSet.copyOf(members.values()), piActionProfileId);
+        }
+    }
+}
diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupHandle.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionProfileGroupHandle.java
similarity index 72%
rename from core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupHandle.java
rename to core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionProfileGroupHandle.java
index 6969714..42ed272 100644
--- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupHandle.java
+++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionProfileGroupHandle.java
@@ -23,36 +23,36 @@
 import org.onosproject.net.pi.model.PiActionProfileId;
 
 /**
- * Global identifier of a PI action group applied to a device, uniquely defined
- * by a device ID, action profile ID and group ID.
+ * Global identifier of a PI action profile group applied to a device, uniquely
+ * defined by a device ID, action profile ID and group ID.
  */
 @Beta
-public final class PiActionGroupHandle extends PiHandle<PiActionGroup> {
+public final class PiActionProfileGroupHandle extends PiHandle<PiActionProfileGroup> {
 
     private final PiActionProfileId actionProfileId;
-    private final PiActionGroupId groupId;
+    private final PiActionProfileGroupId groupId;
 
-    private PiActionGroupHandle(DeviceId deviceId, PiActionGroup group) {
+    private PiActionProfileGroupHandle(DeviceId deviceId, PiActionProfileGroup group) {
         super(deviceId);
         actionProfileId = group.actionProfileId();
         groupId = group.id();
     }
 
     /**
-     * Creates a new handle for the given device ID and PI action group.
+     * Creates a new handle for the given device ID and PI action profile group.
      *
      * @param deviceId device ID
-     * @param group PI action group
-     * @return PI action group handle
+     * @param group PI action profile group
+     * @return PI action profile group handle
      */
-    public static PiActionGroupHandle of(DeviceId deviceId,
-                                         PiActionGroup group) {
-        return new PiActionGroupHandle(deviceId, group);
+    public static PiActionProfileGroupHandle of(DeviceId deviceId,
+                                                PiActionProfileGroup group) {
+        return new PiActionProfileGroupHandle(deviceId, group);
     }
 
     @Override
     public PiEntityType entityType() {
-        return PiEntityType.GROUP;
+        return PiEntityType.ACTION_PROFILE_GROUP;
     }
 
     @Override
@@ -70,7 +70,7 @@
         if (o == null || getClass() != o.getClass()) {
             return false;
         }
-        PiActionGroupHandle that = (PiActionGroupHandle) o;
+        PiActionProfileGroupHandle that = (PiActionProfileGroupHandle) o;
         return Objects.equal(deviceId(), that.deviceId()) &&
                 Objects.equal(actionProfileId,
                               that.actionProfileId) &&
diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionProfileGroupId.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionProfileGroupId.java
new file mode 100644
index 0000000..206525a
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionProfileGroupId.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.net.pi.runtime;
+
+import com.google.common.annotations.Beta;
+import org.onlab.util.Identifier;
+
+/**
+ * Identifier of an action profile group in a protocol-independent pipeline,
+ * unique within the scope of an action profile.
+ */
+@Beta
+public final class PiActionProfileGroupId extends Identifier<Integer> implements PiTableAction {
+
+    private PiActionProfileGroupId(int id) {
+        super(id);
+    }
+
+    /**
+     * Returns an action profile group identifier for the given integer value.
+     *
+     * @param id identifier
+     * @return action profile group
+     */
+    public static PiActionProfileGroupId of(int id) {
+        return new PiActionProfileGroupId(id);
+    }
+
+    /*
+    In P4Runtime, groups can be referenced directly as table actions (i.e.
+    without invoking the selector). In future we should consider having a more
+    appropriate wrapper class for group IDs, instead of implementing the
+    PiTableAction interface.
+     */
+    @Override
+    public Type type() {
+        return Type.ACTION_PROFILE_GROUP_ID;
+    }
+}
diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMember.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionProfileMember.java
similarity index 76%
rename from core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMember.java
rename to core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionProfileMember.java
index 690d118..92c3562 100644
--- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMember.java
+++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionProfileMember.java
@@ -24,24 +24,25 @@
 import static com.google.common.base.Preconditions.checkNotNull;
 
 /**
- * Instance of a member of an action group in a protocol-independent pipeline.
+ * Instance of a member of an action profile in a protocol-independent pipeline.
  */
 @Beta
-public final class PiActionGroupMember implements PiEntity {
+public final class PiActionProfileMember implements PiEntity {
 
     private final PiActionProfileId actionProfileId;
-    private final PiActionGroupMemberId id;
+    private final PiActionProfileMemberId memberId;
     private final PiAction action;
     // FIXME: in P4Runtime weight is an attribute of the member reference in a
     // group. Either remove it from this class or define the containing group
     // ID.
     private final int weight;
 
-    private PiActionGroupMember(
-            PiActionProfileId actionProfileId, PiActionGroupMemberId id,
-            PiAction action, int weight) {
+    private PiActionProfileMember(PiActionProfileId actionProfileId,
+                                  PiActionProfileMemberId memberId,
+                                  PiAction action,
+                                  int weight) {
         this.actionProfileId = actionProfileId;
-        this.id = id;
+        this.memberId = memberId;
         this.action = action;
         this.weight = weight;
     }
@@ -51,8 +52,8 @@
      *
      * @return member identifier
      */
-    public PiActionGroupMemberId id() {
-        return id;
+    public PiActionProfileMemberId id() {
+        return memberId;
     }
 
     /**
@@ -84,7 +85,7 @@
 
     @Override
     public PiEntityType piEntityType() {
-        return PiEntityType.GROUP_MEMBER;
+        return PiEntityType.ACTION_PROFILE_MEMBER;
     }
 
     @Override
@@ -92,33 +93,33 @@
         if (this == o) {
             return true;
         }
-        if (!(o instanceof PiActionGroupMember)) {
+        if (!(o instanceof PiActionProfileMember)) {
             return false;
         }
-        PiActionGroupMember that = (PiActionGroupMember) o;
+        PiActionProfileMember that = (PiActionProfileMember) o;
         return weight == that.weight &&
                 Objects.equal(actionProfileId, that.actionProfileId) &&
-                Objects.equal(id, that.id) &&
+                Objects.equal(memberId, that.memberId) &&
                 Objects.equal(action, that.action);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hashCode(actionProfileId, id, action, weight);
+        return Objects.hashCode(actionProfileId, memberId, action, weight);
     }
 
     @Override
     public String toString() {
         return MoreObjects.toStringHelper(this)
                 .add("actionProfile", actionProfileId)
-                .add("id", id)
+                .add("id", memberId)
                 .add("action", action)
                 .add("weight", weight)
                 .toString();
     }
 
     /**
-     * Returns a new builder of action group members.
+     * Returns a new builder of action profile members.
      *
      * @return member builder
      */
@@ -127,12 +128,12 @@
     }
 
     /**
-     * Builder of action group members.
+     * Builder of action profile members.
      */
     public static final class Builder {
 
         private PiActionProfileId actionProfileId;
-        private PiActionGroupMemberId id;
+        private PiActionProfileMemberId id;
         private PiAction action;
         private int weight;
 
@@ -157,7 +158,7 @@
          * @param id member identifier
          * @return this
          */
-        public Builder withId(PiActionGroupMemberId id) {
+        public Builder withId(PiActionProfileMemberId id) {
             this.id = id;
             return this;
         }
@@ -187,15 +188,15 @@
         }
 
         /**
-         * Creates a new action group member.
+         * Creates a new action profile member.
          *
-         * @return action group member
+         * @return action profile member
          */
-        public PiActionGroupMember build() {
+        public PiActionProfileMember build() {
             checkNotNull(actionProfileId);
             checkNotNull(id);
             checkNotNull(action);
-            return new PiActionGroupMember(actionProfileId, id, action, weight);
+            return new PiActionProfileMember(actionProfileId, id, action, weight);
         }
     }
 }
diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMemberHandle.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionProfileMemberHandle.java
similarity index 81%
rename from core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMemberHandle.java
rename to core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionProfileMemberHandle.java
index 9ef8a31..8771650 100644
--- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionGroupMemberHandle.java
+++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionProfileMemberHandle.java
@@ -27,14 +27,14 @@
  * Global identifier of a PI action profile group member, uniquely defined by a
  * device ID, action profile ID, and member ID.
  */
-public final class PiActionGroupMemberHandle extends PiHandle<PiActionGroupMember> {
+public final class PiActionProfileMemberHandle extends PiHandle<PiActionProfileMember> {
 
-    private final PiActionGroupMemberId memberId;
+    private final PiActionProfileMemberId memberId;
     private final PiActionProfileId actionProfileId;
 
-    private PiActionGroupMemberHandle(DeviceId deviceId,
+    private PiActionProfileMemberHandle(DeviceId deviceId,
                                       PiActionProfileId actionProfileId,
-                                      PiActionGroupMemberId memberId) {
+                                      PiActionProfileMemberId memberId) {
         super(deviceId);
         this.actionProfileId = actionProfileId;
         this.memberId = memberId;
@@ -49,11 +49,11 @@
      * @param memberId        member ID
      * @return action profile group member handle
      */
-    public static PiActionGroupMemberHandle of(
+    public static PiActionProfileMemberHandle of(
             DeviceId deviceId,
             PiActionProfileId actionProfileId,
-            PiActionGroupMemberId memberId) {
-        return new PiActionGroupMemberHandle(
+            PiActionProfileMemberId memberId) {
+        return new PiActionProfileMemberHandle(
                 deviceId, actionProfileId, memberId);
     }
 
@@ -65,11 +65,11 @@
      * @param member   member instance
      * @return action profile group member handle
      */
-    public static PiActionGroupMemberHandle of(
+    public static PiActionProfileMemberHandle of(
             DeviceId deviceId,
-            PiActionGroupMember member) {
+            PiActionProfileMember member) {
         checkNotNull(member);
-        return new PiActionGroupMemberHandle(
+        return new PiActionProfileMemberHandle(
                 deviceId, member.actionProfile(), member.id());
     }
 
@@ -78,7 +78,7 @@
      *
      * @return member ID
      */
-    public PiActionGroupMemberId memberId() {
+    public PiActionProfileMemberId memberId() {
         return memberId;
     }
 
@@ -93,7 +93,7 @@
 
     @Override
     public PiEntityType entityType() {
-        return PiEntityType.GROUP_MEMBER;
+        return PiEntityType.ACTION_PROFILE_MEMBER;
     }
 
     @Override
@@ -109,7 +109,7 @@
         if (obj == null || getClass() != obj.getClass()) {
             return false;
         }
-        final PiActionGroupMemberHandle other = (PiActionGroupMemberHandle) obj;
+        final PiActionProfileMemberHandle other = (PiActionProfileMemberHandle) obj;
         return Objects.equal(this.deviceId(), other.deviceId())
                 && Objects.equal(this.actionProfileId, other.actionProfileId)
                 && Objects.equal(this.memberId, other.memberId);
diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionProfileMemberId.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionProfileMemberId.java
new file mode 100644
index 0000000..a813f6e
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiActionProfileMemberId.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.net.pi.runtime;
+
+import com.google.common.annotations.Beta;
+import org.onlab.util.Identifier;
+
+/**
+ * Identifier of a member of an action profile in a protocol-independent
+ * pipeline, unique within the scope on an action profile.
+ */
+@Beta
+public final class PiActionProfileMemberId extends Identifier<Integer>
+        implements PiTableAction {
+
+    private PiActionProfileMemberId(int id) {
+        super(id);
+    }
+
+    /**
+     * Returns a member identifier for the given integer value.
+     *
+     * @param id identifier
+     * @return action profile group
+     */
+    public static PiActionProfileMemberId of(int id) {
+        return new PiActionProfileMemberId(id);
+    }
+
+    /*
+    In P4Runtime, action profile members can be referenced directly as table
+    actions. In future we should consider having a more appropriate wrapper
+    class for group member IDs, instead of implementing the PiTableAction
+    interface.
+     */
+    @Override
+    public Type type() {
+        return Type.ACTION_PROFILE_MEMBER_ID;
+    }
+}
diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiEntityType.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiEntityType.java
index 0569f99..4c31830 100644
--- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiEntityType.java
+++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiEntityType.java
@@ -31,12 +31,12 @@
     /**
      * Action profile group.
      */
-    GROUP,
+    ACTION_PROFILE_GROUP,
 
     /**
-     * Action profile group member.
+     * Action profile member.
      */
-    GROUP_MEMBER,
+    ACTION_PROFILE_MEMBER,
 
     /**
      * Meter config.
diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiTableAction.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiTableAction.java
index 7d25e1a..284dde6 100644
--- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiTableAction.java
+++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiTableAction.java
@@ -19,8 +19,8 @@
 import com.google.common.annotations.Beta;
 
 /**
- * Instance of an action that can be executed as a consequence of a match in a match+action table of a
- * protocol-independent pipeline.
+ * Instance of an action that can be executed as a consequence of a match in a
+ * match+action table of a protocol-independent pipeline.
  */
 @Beta
 public interface PiTableAction {
@@ -35,14 +35,15 @@
         ACTION,
 
         /**
-         * Executes the action group specified by the given identifier.
+         * Executes the action profile group specified by the given identifier.
          */
-        ACTION_GROUP_ID,
+        ACTION_PROFILE_GROUP_ID,
 
         /**
-         * Executes the action member group specified by the given identifier.
+         * Executes the action profile member specified by the given
+         * identifier.
          */
-        GROUP_MEMBER_ID
+        ACTION_PROFILE_MEMBER_ID
     }
 
     /**
diff --git a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiTableEntry.java b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiTableEntry.java
index ac73bbe..b25ada5 100644
--- a/core/api/src/main/java/org/onosproject/net/pi/runtime/PiTableEntry.java
+++ b/core/api/src/main/java/org/onosproject/net/pi/runtime/PiTableEntry.java
@@ -179,10 +179,10 @@
             return "null";
         }
         switch (tableAction.type()) {
-            case ACTION_GROUP_ID:
-                return "GROUP:" + ((PiActionGroupId) tableAction).id();
-            case GROUP_MEMBER_ID:
-                return "GROUP_MEMBER:" + ((PiActionGroupMemberId) tableAction).id();
+            case ACTION_PROFILE_GROUP_ID:
+                return "ACT_PROF_GROUP:" + ((PiActionProfileGroupId) tableAction).id();
+            case ACTION_PROFILE_MEMBER_ID:
+                return "ACT_PROF_MEMBER:" + ((PiActionProfileMemberId) tableAction).id();
             case ACTION:
             default:
                 return tableAction.toString();
diff --git a/core/api/src/main/java/org/onosproject/net/pi/service/PiGroupTranslationStore.java b/core/api/src/main/java/org/onosproject/net/pi/service/PiGroupTranslationStore.java
index 4fe526a..ed76c9e 100644
--- a/core/api/src/main/java/org/onosproject/net/pi/service/PiGroupTranslationStore.java
+++ b/core/api/src/main/java/org/onosproject/net/pi/service/PiGroupTranslationStore.java
@@ -18,13 +18,13 @@
 
 import com.google.common.annotations.Beta;
 import org.onosproject.net.group.Group;
-import org.onosproject.net.pi.runtime.PiActionGroup;
+import org.onosproject.net.pi.runtime.PiActionProfileGroup;
 
 /**
  * A PI translation store that keeps track of which groups have been
- * translated to which PI action groups.
+ * translated to which PI action profile groups.
  */
 @Beta
 public interface PiGroupTranslationStore
-        extends PiTranslationStore<Group, PiActionGroup> {
+        extends PiTranslationStore<Group, PiActionProfileGroup> {
 }
diff --git a/core/api/src/main/java/org/onosproject/net/pi/service/PiGroupTranslator.java b/core/api/src/main/java/org/onosproject/net/pi/service/PiGroupTranslator.java
index d5eb5af..5d7b6b3 100644
--- a/core/api/src/main/java/org/onosproject/net/pi/service/PiGroupTranslator.java
+++ b/core/api/src/main/java/org/onosproject/net/pi/service/PiGroupTranslator.java
@@ -18,12 +18,12 @@
 
 import com.google.common.annotations.Beta;
 import org.onosproject.net.group.Group;
-import org.onosproject.net.pi.runtime.PiActionGroup;
+import org.onosproject.net.pi.runtime.PiActionProfileGroup;
 
 /**
- * A translator of groups to PI action groups.
+ * A translator of groups to PI action profile groups.
  */
 @Beta
 public interface PiGroupTranslator
-        extends PiTranslator<Group, PiActionGroup> {
+        extends PiTranslator<Group, PiActionProfileGroup> {
 }