blob: d8509433d4b4482920476346785347941579555e [file] [log] [blame]
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -04001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2017-present Open Networking Foundation
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -04003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.net.pi.runtime;
18
19import com.google.common.annotations.Beta;
20import com.google.common.base.MoreObjects;
21import com.google.common.base.Objects;
Carmelo Cascone4c289b72019-01-22 15:30:45 -080022import org.onosproject.net.DeviceId;
Carmelo Casconee44592f2018-09-12 02:24:47 -070023import org.onosproject.net.pi.model.PiActionProfileId;
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -040024
25import static com.google.common.base.Preconditions.checkNotNull;
26
27/**
Carmelo Casconecb4327a2018-09-11 15:17:23 -070028 * Instance of a member of an action profile in a protocol-independent pipeline.
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -040029 */
30@Beta
Carmelo Casconecb4327a2018-09-11 15:17:23 -070031public final class PiActionProfileMember implements PiEntity {
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -040032
Carmelo Casconee44592f2018-09-12 02:24:47 -070033 private final PiActionProfileId actionProfileId;
Carmelo Casconecb4327a2018-09-11 15:17:23 -070034 private final PiActionProfileMemberId memberId;
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -040035 private final PiAction action;
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -040036
Carmelo Casconecb4327a2018-09-11 15:17:23 -070037 private PiActionProfileMember(PiActionProfileId actionProfileId,
38 PiActionProfileMemberId memberId,
Carmelo Cascone99c59db2019-01-17 15:39:35 -080039 PiAction action) {
Carmelo Casconee44592f2018-09-12 02:24:47 -070040 this.actionProfileId = actionProfileId;
Carmelo Casconecb4327a2018-09-11 15:17:23 -070041 this.memberId = memberId;
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -040042 this.action = action;
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -040043 }
44
45 /**
46 * Returns the identifier of this member.
47 *
48 * @return member identifier
49 */
Carmelo Casconecb4327a2018-09-11 15:17:23 -070050 public PiActionProfileMemberId id() {
51 return memberId;
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -040052 }
53
54 /**
Carmelo Casconee44592f2018-09-12 02:24:47 -070055 * Returns the identifier of the action profile.
56 *
57 * @return action profile identifier
58 */
59 public PiActionProfileId actionProfile() {
60 return actionProfileId;
61 }
62
63 /**
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -040064 * Returns the action associated to this member.
65 *
66 * @return action
67 */
68 public PiAction action() {
69 return action;
70 }
71
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -040072 @Override
Carmelo Cascone5bc7e102018-02-18 18:27:55 -080073 public PiEntityType piEntityType() {
Carmelo Casconecb4327a2018-09-11 15:17:23 -070074 return PiEntityType.ACTION_PROFILE_MEMBER;
Carmelo Cascone5bc7e102018-02-18 18:27:55 -080075 }
76
77 @Override
Carmelo Cascone4c289b72019-01-22 15:30:45 -080078 public PiActionProfileMemberHandle handle(DeviceId deviceId) {
79 return PiActionProfileMemberHandle.of(deviceId, this);
80 }
81
82 @Override
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -040083 public boolean equals(Object o) {
84 if (this == o) {
85 return true;
86 }
Carmelo Casconecb4327a2018-09-11 15:17:23 -070087 if (!(o instanceof PiActionProfileMember)) {
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -040088 return false;
89 }
Carmelo Casconecb4327a2018-09-11 15:17:23 -070090 PiActionProfileMember that = (PiActionProfileMember) o;
Carmelo Cascone99c59db2019-01-17 15:39:35 -080091 return Objects.equal(actionProfileId, that.actionProfileId) &&
Carmelo Casconecb4327a2018-09-11 15:17:23 -070092 Objects.equal(memberId, that.memberId) &&
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -040093 Objects.equal(action, that.action);
94 }
95
96 @Override
97 public int hashCode() {
Carmelo Cascone99c59db2019-01-17 15:39:35 -080098 return Objects.hashCode(actionProfileId, memberId, action);
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -040099 }
100
101 @Override
102 public String toString() {
103 return MoreObjects.toStringHelper(this)
Carmelo Casconee44592f2018-09-12 02:24:47 -0700104 .add("actionProfile", actionProfileId)
Carmelo Casconecb4327a2018-09-11 15:17:23 -0700105 .add("id", memberId)
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -0400106 .add("action", action)
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -0400107 .toString();
108 }
109
110 /**
Carmelo Casconecb4327a2018-09-11 15:17:23 -0700111 * Returns a new builder of action profile members.
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -0400112 *
113 * @return member builder
114 */
115 public static Builder builder() {
116 return new Builder();
117 }
118
119 /**
Carmelo Casconecb4327a2018-09-11 15:17:23 -0700120 * Builder of action profile members.
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -0400121 */
122 public static final class Builder {
123
Carmelo Casconee44592f2018-09-12 02:24:47 -0700124 private PiActionProfileId actionProfileId;
Carmelo Cascone99c59db2019-01-17 15:39:35 -0800125 private PiActionProfileMemberId memberId;
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -0400126 private PiAction action;
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -0400127
128 private Builder() {
129 // Hides constructor.
130 }
131
132 /**
Carmelo Casconee44592f2018-09-12 02:24:47 -0700133 * Sets the action profile identifier of this member.
134 *
135 * @param actionProfileId action profile identifier
136 * @return this
137 */
138 public Builder forActionProfile(PiActionProfileId actionProfileId) {
139 this.actionProfileId = actionProfileId;
140 return this;
141 }
142
143 /**
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -0400144 * Sets the identifier of this member.
145 *
146 * @param id member identifier
147 * @return this
148 */
Carmelo Casconecb4327a2018-09-11 15:17:23 -0700149 public Builder withId(PiActionProfileMemberId id) {
Carmelo Cascone99c59db2019-01-17 15:39:35 -0800150 this.memberId = id;
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -0400151 return this;
152 }
153
154 /**
155 * Sets the action of this member.
156 *
157 * @param action action
158 * @return this
159 */
160 public Builder withAction(PiAction action) {
161 this.action = action;
162 return this;
163 }
164
165 /**
Carmelo Casconecb4327a2018-09-11 15:17:23 -0700166 * Creates a new action profile member.
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -0400167 *
Carmelo Casconecb4327a2018-09-11 15:17:23 -0700168 * @return action profile member
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -0400169 */
Carmelo Casconecb4327a2018-09-11 15:17:23 -0700170 public PiActionProfileMember build() {
Carmelo Casconee44592f2018-09-12 02:24:47 -0700171 checkNotNull(actionProfileId);
Carmelo Cascone99c59db2019-01-17 15:39:35 -0800172 checkNotNull(memberId);
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -0400173 checkNotNull(action);
Carmelo Cascone99c59db2019-01-17 15:39:35 -0800174 return new PiActionProfileMember(actionProfileId, memberId, action);
Carmelo Casconeb2e3dba2017-07-27 12:07:09 -0400175 }
176 }
177}