blob: 992eb90f0727407ecd6034b5bd473b2aafbdcfc0 [file] [log] [blame]
Jian Lib9642832021-01-08 03:18:35 +09001/*
2 * Copyright 2021-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.kubevirtnetworking.api;
17
18import com.google.common.base.MoreObjects;
19import org.onlab.packet.IpAddress;
20import org.onlab.packet.MacAddress;
21import org.onosproject.net.DeviceId;
22import org.onosproject.net.PortNumber;
23
24import java.util.Objects;
25
26import static com.google.common.base.Preconditions.checkArgument;
27
28/**
29 * Default implementation of kubernetes port.
30 */
31public final class DefaultKubevirtPort implements KubevirtPort {
32
33 private static final String NOT_NULL_MSG = "Port % cannot be null";
34
Jian Li3ba5c582021-01-14 11:30:36 +090035 private final String networkId;
Jian Lib9642832021-01-08 03:18:35 +090036 private final MacAddress macAddress;
37 private final IpAddress ipAddress;
38 private final DeviceId deviceId;
39 private final PortNumber portNumber;
40
41 /**
42 * Default constructor.
43 *
Jian Li3ba5c582021-01-14 11:30:36 +090044 * @param networkId network identifier
Jian Lib9642832021-01-08 03:18:35 +090045 * @param macAddress MAC address
46 * @param ipAddress IP address
47 * @param deviceId device identifier
48 * @param portNumber port number
49 */
Jian Li3ba5c582021-01-14 11:30:36 +090050 public DefaultKubevirtPort(String networkId, MacAddress macAddress, IpAddress ipAddress,
Jian Lib9642832021-01-08 03:18:35 +090051 DeviceId deviceId, PortNumber portNumber) {
Jian Li3ba5c582021-01-14 11:30:36 +090052 this.networkId = networkId;
Jian Lib9642832021-01-08 03:18:35 +090053 this.macAddress = macAddress;
54 this.ipAddress = ipAddress;
55 this.deviceId = deviceId;
56 this.portNumber = portNumber;
57 }
58
59 @Override
Jian Li3ba5c582021-01-14 11:30:36 +090060 public String networkId() {
61 return networkId;
62 }
63
64 @Override
Jian Lib9642832021-01-08 03:18:35 +090065 public MacAddress macAddress() {
66 return macAddress;
67 }
68
69 @Override
70 public IpAddress ipAddress() {
71 return ipAddress;
72 }
73
74 @Override
75 public DeviceId deviceId() {
76 return deviceId;
77 }
78
79 @Override
80 public PortNumber portNumber() {
81 return portNumber;
82 }
83
84 @Override
Jian Lica20b712021-01-18 00:19:31 +090085 public KubevirtPort updateIpAddress(IpAddress updateIpAddress) {
Jian Li0b481122021-01-17 04:26:18 +090086 return new Builder()
87 .networkId(networkId)
88 .macAddress(macAddress)
Jian Lica20b712021-01-18 00:19:31 +090089 .ipAddress(updateIpAddress)
Jian Li0b481122021-01-17 04:26:18 +090090 .deviceId(deviceId)
91 .portNumber(portNumber)
92 .build();
Jian Lib9642832021-01-08 03:18:35 +090093 }
94
95 @Override
Jian Lica20b712021-01-18 00:19:31 +090096 public KubevirtPort updatePortNumber(PortNumber updatedPortNumber) {
Jian Li0b481122021-01-17 04:26:18 +090097 return new Builder()
98 .networkId(networkId)
99 .macAddress(macAddress)
100 .ipAddress(ipAddress)
101 .deviceId(deviceId)
Jian Lica20b712021-01-18 00:19:31 +0900102 .portNumber(updatedPortNumber)
103 .build();
104 }
105
106 @Override
107 public KubevirtPort updateDeviceId(DeviceId updatedDeviceId) {
108 return new Builder()
109 .networkId(networkId)
110 .macAddress(macAddress)
111 .ipAddress(ipAddress)
112 .deviceId(updatedDeviceId)
Jian Li0b481122021-01-17 04:26:18 +0900113 .portNumber(portNumber)
114 .build();
Jian Lib9642832021-01-08 03:18:35 +0900115 }
116
117 @Override
118 public boolean equals(Object o) {
119 if (this == o) {
120 return true;
121 }
122 if (o == null || getClass() != o.getClass()) {
123 return false;
124 }
125 DefaultKubevirtPort that = (DefaultKubevirtPort) o;
Jian Li3ba5c582021-01-14 11:30:36 +0900126 return networkId.equals(that.networkId) && macAddress.equals(that.macAddress) &&
127 ipAddress.equals(that.ipAddress) && deviceId.equals(that.deviceId) &&
128 portNumber.equals(that.portNumber);
Jian Lib9642832021-01-08 03:18:35 +0900129 }
130
131 @Override
132 public int hashCode() {
Jian Li3ba5c582021-01-14 11:30:36 +0900133 return Objects.hash(networkId, macAddress, ipAddress, deviceId, portNumber);
Jian Lib9642832021-01-08 03:18:35 +0900134 }
135
136 @Override
137 public String toString() {
138 return MoreObjects.toStringHelper(this)
Jian Li3ba5c582021-01-14 11:30:36 +0900139 .add("networkId", networkId)
Jian Lib9642832021-01-08 03:18:35 +0900140 .add("macAddress", macAddress)
141 .add("ipAddress", ipAddress)
142 .add("deviceId", deviceId)
143 .add("portNumber", portNumber)
144 .toString();
145 }
146
147 /**
148 * Returns new builder instance.
149 *
150 * @return kubevirt port builder
151 */
152 public static Builder builder() {
153 return new Builder();
154 }
155
156 /**
157 * Default builder implementation.
158 */
159 public static final class Builder implements KubevirtPort.Builder {
160
Jian Li3ba5c582021-01-14 11:30:36 +0900161 private String networkId;
Jian Lib9642832021-01-08 03:18:35 +0900162 private MacAddress macAddress;
163 private IpAddress ipAddress;
164 private DeviceId deviceId;
165 private PortNumber portNumber;
166
167 // private constructor not intended to use from external
168 private Builder() {
169 }
170
171 @Override
172 public KubevirtPort build() {
Jian Li3ba5c582021-01-14 11:30:36 +0900173 checkArgument(networkId != null, NOT_NULL_MSG, "networkId");
Jian Lib9642832021-01-08 03:18:35 +0900174 checkArgument(macAddress != null, NOT_NULL_MSG, "macAddress");
Jian Lib9642832021-01-08 03:18:35 +0900175
Jian Li3ba5c582021-01-14 11:30:36 +0900176 return new DefaultKubevirtPort(networkId, macAddress, ipAddress,
177 deviceId, portNumber);
178 }
179
180 @Override
181 public Builder networkId(String networkId) {
182 this.networkId = networkId;
183 return this;
Jian Lib9642832021-01-08 03:18:35 +0900184 }
185
186 @Override
187 public Builder macAddress(MacAddress macAddress) {
188 this.macAddress = macAddress;
189 return this;
190 }
191
192 @Override
193 public Builder ipAddress(IpAddress ipAddress) {
194 this.ipAddress = ipAddress;
195 return this;
196 }
197
198 @Override
199 public Builder deviceId(DeviceId deviceId) {
200 this.deviceId = deviceId;
201 return this;
202 }
203
204 @Override
205 public Builder portNumber(PortNumber portNumber) {
206 this.portNumber = portNumber;
207 return this;
208 }
209 }
210}