blob: a779a87afcd96aa86bb0ea6482ce38919d9317da [file] [log] [blame]
Jian Li9ee9c8b2019-01-24 11:48:12 +09001/*
2 * Copyright 2019-present Open Networking Foundation
3 *
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 */
16package org.onosproject.k8snetworking.api;
17
18import com.google.common.base.MoreObjects;
19import com.google.common.base.Objects;
20import org.onlab.packet.IpAddress;
21import org.onlab.packet.MacAddress;
22import org.onosproject.net.DeviceId;
23import org.onosproject.net.PortNumber;
24
25import static com.google.common.base.Preconditions.checkArgument;
26
27/**
28 * Default implementation of kubernetes port.
29 */
30public final class DefaultK8sPort implements K8sPort {
31
32 private static final String NOT_NULL_MSG = "Port % cannot be null";
33
34 private final String networkId;
35 private final String portId;
36 private final MacAddress macAddress;
37 private final IpAddress ipAddress;
38 private final DeviceId deviceId;
39 private final PortNumber portNumber;
40 private final State state;
41
42 // private constructor not intended for external invocation
43 private DefaultK8sPort(String networkId, String portId, MacAddress macAddress,
44 IpAddress ipAddress, DeviceId deviceId,
45 PortNumber portNumber, State state) {
46 this.networkId = networkId;
47 this.portId = portId;
48 this.macAddress = macAddress;
49 this.ipAddress = ipAddress;
50 this.deviceId = deviceId;
51 this.portNumber = portNumber;
52 this.state = state;
53 }
54
55 @Override
56 public String networkId() {
57 return networkId;
58 }
59
60 @Override
61 public String portId() {
62 return portId;
63 }
64
65 @Override
66 public MacAddress macAddress() {
67 return macAddress;
68 }
69
70 @Override
71 public IpAddress ipAddress() {
72 return ipAddress;
73 }
74
75 @Override
76 public DeviceId deviceId() {
77 return deviceId;
78 }
79
80 @Override
81 public PortNumber portNumber() {
82 return portNumber;
83 }
84
85 @Override
86 public State state() {
87 return state;
88 }
89
90 @Override
91 public K8sPort updateState(State newState) {
92 return new Builder()
93 .networkId(networkId)
94 .portId(portId)
95 .macAddress(macAddress)
96 .ipAddress(ipAddress)
97 .deviceId(deviceId)
98 .portNumber(portNumber)
99 .state(newState)
100 .build();
101 }
102
103 @Override
Jian Li4aa17642019-01-30 00:01:11 +0900104 public K8sPort updatePortNumber(PortNumber portNumber) {
105 return new Builder()
106 .networkId(networkId)
107 .portId(portId)
108 .macAddress(macAddress)
109 .ipAddress(ipAddress)
110 .deviceId(deviceId)
111 .portNumber(portNumber)
112 .state(state)
113 .build();
114 }
115
116 @Override
Jian Li732c3422020-09-07 17:01:11 +0900117 public K8sPort updateDeviceId(DeviceId deviceId) {
118 return new Builder()
119 .networkId(networkId)
120 .portId(portId)
121 .macAddress(macAddress)
122 .ipAddress(ipAddress)
123 .deviceId(deviceId)
124 .portNumber(portNumber)
125 .state(state)
126 .build();
127 }
128
129 @Override
Jian Li9ee9c8b2019-01-24 11:48:12 +0900130 public boolean equals(Object o) {
131 if (this == o) {
132 return true;
133 }
134 if (o == null || getClass() != o.getClass()) {
135 return false;
136 }
137 DefaultK8sPort that = (DefaultK8sPort) o;
138 return Objects.equal(networkId, that.networkId) &&
139 Objects.equal(portId, that.portId) &&
140 Objects.equal(macAddress, that.macAddress) &&
141 Objects.equal(ipAddress, that.ipAddress) &&
142 Objects.equal(deviceId, that.deviceId) &&
143 Objects.equal(portNumber, that.portNumber) &&
144 state == that.state;
145 }
146
147 @Override
148 public int hashCode() {
149 return Objects.hashCode(networkId, portId, macAddress, ipAddress,
150 deviceId, portNumber, state);
151 }
152
153 @Override
154 public String toString() {
155 return MoreObjects.toStringHelper(this)
156 .add("networkId", networkId)
157 .add("portId", portId)
158 .add("macAddress", macAddress)
159 .add("ipAddress", ipAddress)
160 .add("deviceId", deviceId)
161 .add("portNumber", portNumber)
162 .add("state", state)
163 .toString();
164 }
165
166 /**
167 * Returns new builder instance.
168 *
169 * @return kubernetes port builder
170 */
171 public static Builder builder() {
172 return new Builder();
173 }
174
175 /**
176 * Default builder implementation.
177 */
178 public static final class Builder implements K8sPort.Builder {
179
180 private String networkId;
181 private String portId;
182 private MacAddress macAddress;
183 private IpAddress ipAddress;
184 private DeviceId deviceId;
185 private PortNumber portNumber;
186 private State state;
187
188 // private constructor not intended to use from external
189 private Builder() {
190 }
191
192 @Override
193 public K8sPort build() {
194 checkArgument(networkId != null, NOT_NULL_MSG, "networkId");
195 checkArgument(portId != null, NOT_NULL_MSG, "portId");
196 checkArgument(macAddress != null, NOT_NULL_MSG, "macAddress");
197 checkArgument(ipAddress != null, NOT_NULL_MSG, "ipAddress");
Jian Li9ee9c8b2019-01-24 11:48:12 +0900198
199 return new DefaultK8sPort(networkId, portId, macAddress, ipAddress,
200 deviceId, portNumber, state);
201 }
202
203 @Override
204 public Builder networkId(String networkId) {
205 this.networkId = networkId;
206 return this;
207 }
208
209 @Override
210 public Builder portId(String portId) {
211 this.portId = portId;
212 return this;
213 }
214
215 @Override
216 public Builder macAddress(MacAddress macAddress) {
217 this.macAddress = macAddress;
218 return this;
219 }
220
221 @Override
222 public Builder ipAddress(IpAddress ipAddress) {
223 this.ipAddress = ipAddress;
224 return this;
225 }
226
227 @Override
228 public Builder deviceId(DeviceId deviceId) {
229 this.deviceId = deviceId;
230 return this;
231 }
232
233 @Override
234 public Builder portNumber(PortNumber portNumber) {
235 this.portNumber = portNumber;
236 return this;
237 }
238
239 @Override
240 public Builder state(State state) {
241 this.state = state;
242 return this;
243 }
244 }
245}