blob: 4d2b906dfcd136ffef00a5fe35ebf1182e2b67cb [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 Li9ee9c8b2019-01-24 11:48:12 +0900117 public boolean equals(Object o) {
118 if (this == o) {
119 return true;
120 }
121 if (o == null || getClass() != o.getClass()) {
122 return false;
123 }
124 DefaultK8sPort that = (DefaultK8sPort) o;
125 return Objects.equal(networkId, that.networkId) &&
126 Objects.equal(portId, that.portId) &&
127 Objects.equal(macAddress, that.macAddress) &&
128 Objects.equal(ipAddress, that.ipAddress) &&
129 Objects.equal(deviceId, that.deviceId) &&
130 Objects.equal(portNumber, that.portNumber) &&
131 state == that.state;
132 }
133
134 @Override
135 public int hashCode() {
136 return Objects.hashCode(networkId, portId, macAddress, ipAddress,
137 deviceId, portNumber, state);
138 }
139
140 @Override
141 public String toString() {
142 return MoreObjects.toStringHelper(this)
143 .add("networkId", networkId)
144 .add("portId", portId)
145 .add("macAddress", macAddress)
146 .add("ipAddress", ipAddress)
147 .add("deviceId", deviceId)
148 .add("portNumber", portNumber)
149 .add("state", state)
150 .toString();
151 }
152
153 /**
154 * Returns new builder instance.
155 *
156 * @return kubernetes port builder
157 */
158 public static Builder builder() {
159 return new Builder();
160 }
161
162 /**
163 * Default builder implementation.
164 */
165 public static final class Builder implements K8sPort.Builder {
166
167 private String networkId;
168 private String portId;
169 private MacAddress macAddress;
170 private IpAddress ipAddress;
171 private DeviceId deviceId;
172 private PortNumber portNumber;
173 private State state;
174
175 // private constructor not intended to use from external
176 private Builder() {
177 }
178
179 @Override
180 public K8sPort build() {
181 checkArgument(networkId != null, NOT_NULL_MSG, "networkId");
182 checkArgument(portId != null, NOT_NULL_MSG, "portId");
183 checkArgument(macAddress != null, NOT_NULL_MSG, "macAddress");
184 checkArgument(ipAddress != null, NOT_NULL_MSG, "ipAddress");
Jian Li9ee9c8b2019-01-24 11:48:12 +0900185
186 return new DefaultK8sPort(networkId, portId, macAddress, ipAddress,
187 deviceId, portNumber, state);
188 }
189
190 @Override
191 public Builder networkId(String networkId) {
192 this.networkId = networkId;
193 return this;
194 }
195
196 @Override
197 public Builder portId(String portId) {
198 this.portId = portId;
199 return this;
200 }
201
202 @Override
203 public Builder macAddress(MacAddress macAddress) {
204 this.macAddress = macAddress;
205 return this;
206 }
207
208 @Override
209 public Builder ipAddress(IpAddress ipAddress) {
210 this.ipAddress = ipAddress;
211 return this;
212 }
213
214 @Override
215 public Builder deviceId(DeviceId deviceId) {
216 this.deviceId = deviceId;
217 return this;
218 }
219
220 @Override
221 public Builder portNumber(PortNumber portNumber) {
222 this.portNumber = portNumber;
223 return this;
224 }
225
226 @Override
227 public Builder state(State state) {
228 this.state = state;
229 return this;
230 }
231 }
232}